Overblog Folge diesem Blog
Administration Create my blog
SAPManDoo - SAP Resource

Posts mit #basis-entwicklung allg. tag

IDoc-Monitor WLF_IDOC um eigene Funktionen ergänzen

30. August 2017 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Der neue (na ja - so neu ist er auch nicht mehr) IDoc-Monitor bietet gegenüber der guten alten WE02 bzw. WE09 doch einige Vorteile, insbesondere in punkto Übersichtlichkeit und Folgebeleg-Absprünge. Was mich jedoch nervt ist, dass es z.B. keinen Absprung in den POS-Monitor (WPER) für POS-Nachrichtentypen gibt. Ok - ist sicherlich auch eine etwas extravagante Anforderung, aber gut dass es da BAdIs gibt (Details s. Hinweis 1897880 - BAdIs für WLF_IDOC). 

Mithilfe des BAdIs WLF_REPORT_PROCESS_DB können eigene OK-Codes hinzugefügt und ausgewertet werden. Das BAdI beherbergt die Methoden...

ADJUST_STATUS

Hier kann ein eigener Oberflächenstatus gesetzt werden. Hierzu habe ich mithilfe der SE41 den Status STANDARD des Reports RWLFIDOC_NEW in einen (leeren) Z-Report kopiert und eine Drucktaste/Funktionscode (ZWPER) hinzugefügt.

SE41 - Oberflächenstatus erweitern

SE41 - Oberflächenstatus erweitern

In der BAdI-Implementierung setze ich lediglich über den CHANGING-Parameter CV_PROGRAM mein leeres Z-Programm, so dass der namensgleiche Status mit dem neuen FCODE gezogen wird.

 

method IF_WLF_REPORT_PROCESS_BD~ADJUST_STATUS.

     cv_program = 'ZWLF_IDOC'.

endmethod.

HANDLE_FCODE

Hier wird dann auf die (eigenen) Funktionscodes reagiert und (in diesem Fall) in die WPER abgesprungen. In der Struktur IS_DOC_LIST_OUT stehen die Daten des  aktuell selektierten bzw. markierten IDocs zur Verfügung.  Über den CHANGING-Parameter CV_FCODE_PROCESSED wird dem System mitgeteilt, dass der (eigene) Funktionscode prozessiert wurde.

 

METHOD if_wlf_report_process_bd~handle_fcode.

    CASE iv_okcode.
      WHEN 'ZWPER'.
        cv_fcode_processed = abap_true.
        CHECK is_idoc_list_out-docnum IS NOT INITIAL.
        CHECK is_idoc_list_out-mestyp(3) = 'WPU'. "nur für WPUxxx-IDocs
        SUBMIT sapmwper AND RETURN
               WITH p_dat_b = is_idoc_list_out-credat
               WITH p_dat_v = is_idoc_list_out-credat
               WITH s_docnum = is_idoc_list_out-docnum.        
    ENDCASE.

ENDMETHOD.

Dies ist natürlich nur ein Beispiel für eine sinnvolle Funktionserweiterung in Retail-Systemen. Euch fällt sicherlich auch noch was besseres ein...

Der o.g. BAdI ist übrigens nur ein Teil des Erweiterungsframeworks, welches in diesem Kontext zur Verfügung steht. Der Erweiterungsspot WLF_IDOC_PROCESSING umfasst weitere BAdIs, z.B. WLF_ENH_IDOC_DATA_BADI, mit dem der IDoc-Liste zusätzliche Felder hinzugefügt werden können.

 

Weiterlesen

IDoc ACC_DOCUMENT - Beispiele

20. Februar 2017 , Geschrieben von sapmandoo Veröffentlicht in #FI, #Basis-Entwicklung allg.

Will man FI-Belege aus externen Quellen ins System buchen, bietet sich die Verwendung von IDocs des Typs ACC_DOCUMENT an. In den nachfolgenden Abschnitten wird die ordnungsgemäße Befüllung des IDoc-Inhalts beschrieben. 

Eigenschaften der IDocs des Typ ACC_DOCUMENT

Nachrichtentyp: ACC_DOCUMENT

Basistyp: ACC_DOCUMENT04

 

Struktur

Die relevanten Segmente des IDocs sind:

 

  • E1BPACHE09 : Kopfzeile

Status : Optional , min. Anzahl : 1 , max. Anzahl : 1

  • E1BPACGL09 : Sachkontenzeile

Status : Optional , min. Anzahl : 1 , max. Anzahl : 999999999

  • E1BPACAR09 : Debitorzeile

Status : Optional , min. Anzahl : 1 , max. Anzahl : 999999999

  • E1BPACAP09 : Kreditorzeile

Status : Optional , min. Anzahl : 1 , max. Anzahl : 999999999

  • E1BPACTX09 : Steuerzeile

Status : Optional , min. Anzahl : 1 , max. Anzahl : 999999999

  • E1BPACCR09 : Währungspositionen

Status : Optional , min. Anzahl : 1 , max. Anzahl : 999999999

 

Der generelle Aufbau ist wie folgt: Ein valides IDoc besteht aus genau einem Kopfsegment E1BPACHE09 und mindestens 2 Positionen. Die Positionen setzen sich jeweils aus einem Segment der Typen E1BPACGL09, E1BPACAP09 oder E1BPACAR09 mit jeweils einem korrespondierenden Betragssegment E1BPACCR09 zusammen. Die Verknüpfung zwischen den Belegpositionen und den Betragssegmenten erfolgt über das Feld ITEMNO_ACC (Positionsnummer).

Minimal-Beleg:

Belegkopf E1BPACHE09

Position 000001

Sachkontenzeile E1BPACGL09 oder

Kreditorenzeile E1BPACAP09 oder

Debitorenzeile E1BPACAR09

Position 000002

Sachkontenzeile E1BPACGL09 oder

Kreditorenzeile E1BPACAP09 oder

Debitorenzeile E1BPACAR09

Position 000001 Betragssegment E1BPACCR09

Position 000002 Betragssegment E1BPACCR09

 

Die Positionsnummern können im Prinzip beliebig vergeben werden, es empfiehlt sich jedoch, eine aufsteigende nummerische Positionsnummernvergabe vorzusehen.

 

Befüllung

Der oben beschriebene Minimalbeleg benötigt mindestens folgende Feldversorgungen:

E1BPACHE09

BUS_ACT             RFBU (Vorgang fix)

USERNAME        USERXYZ

HEADER_TXT      KOPFTEXT (Belegkopftext, optional, sofern Belegart keine Eingabe erfordert)

COMP_CODE     1000 (Buchungskreis)

DOC_DATE         20150227 (Belegdatum)

PSTNG_DATE     20150227 (Buchungsdatum)

DOC_TYPE          SA (Belegart)

REF_DOC_NO    REFERENZ-NR (Referenznummer, optional, sofern Belegart keine Eingabe erfordert)

 

E1BPACGL09  (1. Position, Sachkontenposition)

ITEMNO_ACC    000010  (Positionsnummer)

GL_ACCOUNT    0000160000 (Sachkonto)

ITEM_TEXT         BUCHUNGSTEXT (optional)

ALLOC_NMBR   ZUORDNUNG (optional, ansonsten wird Zuordnung systemseitig gemäß Einstellung im Sachkontenstamm befüllt)

 

E1BPACGL09  (2. Position, Sachkontenposition)

ITEMNO_ACC    000020  (Positionsnummer)

GL_ACCOUNT    0000151000 (Sachkonto)

ITEM_TEXT         BUCHUNGSTEXT (optional)

ALLOC_NMBR   ZUORDNUNG (optional, ansonsten wird Zuordnung systemseitig gemäß Einstellung im Sachkontenstamm befüllt)

 

E1BPACCR09 (zu Position 1)

ITEMNO_ACC    000010

CURRENCY         EUR (Belegwährung)

AMT_DOCCUR  10.00  (Betrag in Belegwährung)

 

E1BPACCR09 (zu Position 2)

ITEMNO_ACC    000020

CURRENCY         EUR

 AMT_DOCCUR   10.00-   

(Achtung: Soll und Haben wird durch positiven bzw. negatives Vorzeichen                          unterschieden, - = Haben, + = Soll)

IDoc-Befüllung WE19

IDoc-Befüllung WE19

Erzeugter Beleg

Erzeugter Beleg

Besonderheit bei Buchung mit Umsatzsteuer

Im Gegensatz zum Batch-Input-Verfahren ist es mit dem Nachrichtentyp ACC_DOCUMENT (bzw. im Endeffekt mit dem dahinterliegenden BAPI_ACC_DOCUMENT_POST) nicht möglich, den Steueranteil einer Buchung vom System generieren zu lassen. D.h., die Steuerinformationen müssen dem IDoc auf folgende Weise mitgegeben werden:

Bei der Position, die die Steuer beinhaltet (i.d.R. die Sachkontenposition) wird der Betrag netto mitgegeben. Zusätzlich wird eine Steuerzeile des Segmenttyps E1BPACTX09 nebst Betragssegment (E1BPACCR09) mit folgenden Informationen benötigt:

 

E1BPACTX09

ITEMNO_ACC 000030

TAX_CODE V1 (Steuerkennzeichen)

 

E1BPACCR09

ITEMNO_ACC 000030

CURRENCY EUR

AMT_DOCCUR 1.60 (Steuerbetrag)

AMT_BASE 8.40 (Steuerbasis)

 

 

Beispiel:

Kreditorische Buchung

per Stromkosten 632500 8,40,-- an Kreditor 100003 10,--

Vorsteuer (V1) 1,60,--

 

 

Belegkopf E1BPACHE09:

BUS_ACT: RFBU

USERNAME: USERXYZ

HEADER_TXT: KOPFTEXT

COMP_CODE: 1000

DOC_DATE: 20150227

PSTNG_DATE: 20150227

DOC_TYPE: KR

REF_DOC_NO: 378455676

 

Kreditorenposition E1BPACAP09:

ITEMNO_ACC 000010

VENDOR_NO 0000100003 (Kreditorennummer)

 

Betragsposition zur Kreditorenposition E1BPACCR09

ITEMNO_ACC 000010

CURRENCY EUR

AMT_DOCCUR 10-

 

Sachkontenposition E1BPACGL09

ITEMNO_ACC 000020

GL_ACCOUNT 0000632500

ITEM_TEXT TESTBUCHUNG MIT STEUER

TAX_CODE V1 (Steuerkennzeichen!)

COSTCENTER 0000001000 (Kostenstelle, Konto 632500 ist Kostenart!)

 

Betragsposition zur Sachkontenposition E1BPACCR09

ITEMNO_ACC 000020

CURRENCY EUR

AMT_DOCCUR 8.40 (netto!)

 

Steuerzeile E1BPACTX09

ITEMNO_ACC 000030

TAX_CODE V1

 

Betragsposition zur Steuerzeile E1BPACCR09

ITEMNO_ACC 000030

CURRENCY EUR

AMT_DOCCUR 1.60 (Steuerbetrag)

AMT_BASE 8.40 (Steuerbasis)

IDoc-Befüllung (WE19)

IDoc-Befüllung (WE19)

Erzeugter Beleg inkl. Steuer

Erzeugter Beleg inkl. Steuer

Weiterlesen

Variablen in Selektionsvarianten

21. Februar 2013 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Verwendung von Variablen in Selektionsvarianten:

 

 

Dynamische Datumsberechnung

 

Die dynamische Datumsberechnung ist für alle Selektionsparameter möglich, die vom Typ DATUM (Typ DATS) sind.

 

Selektionsvariable D

image002-Kopie-2.png

 

Name der Variablen --> passenden Eintrag auswählen

image004-Kopie-1.png

Beispiel: Tagesdatum – 2 Arbeitstage

 

image007-Kopie-1.png

 -->

image009-Kopie-2.png 

Die Definition eigener Variablen ist leider ohne Modifikation nicht möglich. Die Liste der zur Verfügung stehenden dynamischen Datumsvariablen wird im Funktionsbaustein RS_VARI_V_INIT aufgebaut. Hierbei werden Bezeichnung, Typ und Berechnungsfunktionsbaustein pro Variable im System bekannt gemacht. Ggf. könnte man über eine geeignete Erweiterungsimplementierung des o.g. Funktionsbausteins die Liste der Variablen erweitern. Dazu müsste dann noch ein eigener Berechnungsbaustein (z.B. als Kopie des FB RS_VARI_V_1_NEXT_MONTH)  ausprogrammiert werden. Sofern zur Berechnung weitere Daten eingegeben werden müssen (z.B. Fabrikkalender), ist darüber hinaus der SAP-Funktionsbaustein RS_VARI_V_SAVE umfänglich anzupassen.

Vor diesem Hintergrund ist von der Verwendung kundeneigener dynamischer Datumsvariablen eher abzuraten.

  

Verwendung von Variablen aus Tabelle TVARV

 

Für andere Datentypen mit variablem Inhalt kann in der Tabelle TVARV eine Variable angelegt und in Varianten verwendet werden:

 

SM31 – TVARV – pflegen oder Transaktion STVARV

 image011-Kopie-2.png

 

Auf diese Weise definierte Variablen können nun in Varianten verwendet werden. Der Datentyp des Selektionsparameters muss natürlich mit dem angegebenen Variableninhalt kompatibel sein.

 

image015.jpg

 

Der Variableninhalt kann entweder manuell im Dialog über die Tabelle TVARV gepflegt oder programmtechnisch gesetzt werden.

 

Die o.g. Bsp. genannte  Variable ZFIC_COPA_PREV_PERIOD wird automatisch auf den „richtigen“ Wert (d.h. im Feb 2012 auf 001.2012) durch ein entsprechendes kundeneigenes Programm gesetzt (Beispielcoding s.u.).

 

D.h. sofern dafür Sorge getragen wird, dass der Report immer am 1. des Monats VOR allen anderen Reports, die entsprechende Variablen verwenden, läuft, kann die Variable ohne Probleme verwendet werden und ist in Bezug zum aktuellen Datum korrekt gefüllt.

 

Beispielcoding:

REPORT Y_TVARVC_UPDATE.

TABLES: TVARVC .             
DATA:   DATUM LIKE SY-DATUM.

DATA:   NDAYS TYPE i.

 

* To be on the safe side, En-/Dequeues

* should be performed on table TVARVC
*...

 

* Example for Parameter-Variable
TVARVC-TYPE = 'P'.
TVARVC-NUMB = 0.             "no multiple entries for PARAMETERS

TVARVC-NAME = 'Y_DAYS_TO_XMAS_EVE'.

DATUM = SY_DATUM.

DATUM+4(4) = '1224'.

IF SY-DATUM > DATUM.         "X-mas eve is over – cu next year

  DATUM(4) = DATUM(4) + 1.

ENDIF.

NDAYS = DATUM – SY-DATUM.

TVARVC-LOW  = NDAYS.
UPDATE TVARVC.

* Example for Select-Option-Variable
TVARVC-TYPE = 'S'.
TVARVC-NAME = 'Y_SO_AGES_FOR_MONOPOLY'.

TVARVC-NUMB = 1.             "first entry

TVARVC-SIGN = 'I'.           "(I)nclude, (E)xclude

TVARVC-OPTI = 'BT'.          "BT = BETWEEN, …

TVARVC-LOW  = 8.             "Family-fun from age x…

TVARVC-HIGH = 99.            "…to y

UPDATE TVARVC.

ADD 1 TO TVARVC-NUMB.        "2nd entry, if necessary

* fill TVARVC-fields according to above example

* …

 

Weiterlesen

BAPI-Meldungen ausgeben

22. Juni 2011 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Nachfolgend einige Hinweise, wie man elegant Return-Nachrichten von BAPIs ausgeben kann.

 

Neuere BAPIs geben Ihre Meldungen in der Struktur BAPIRET2 zurück.

 

Bsp.:

 

 

DATA:
* Meldungen des BAPI's
  git_return            TYPE TABLE OF bapiret2.

*-----------------------------------------------------------------------
* BAPI-Call
*-----------------------------------------------------------------------
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader    = gs_documentheader
    IMPORTING
      obj_type          = g_obj_type
      obj_key           = g_obj_key
      obj_sys           = g_obj_sys
    TABLES
      accountgl         = git_accountgl
      accountreceivable = git_accountreceivable
      currencyamount    = git_currencyamount
      return            = git_return.

 

Ausgabe:

 

 CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = git_return.

 


Einige ältere BAPIs liefern Ihre Nachrichten noch in der Struktur BAPIRETURN zurück. In diesem Falle kann man diese zuvor in die Struktur BAPIRET2 überführen.

 

Bsp:

 

 DATA: lt_return TYPE TABLE OF bapireturn,
       lt_bapiret2 type table of bapiret2.

 

  CALL FUNCTION 'BAPI_...'
    EXPORTING
      ...
    TABLES
      return          = lt_return
      ...

 

Konvertieren:

 

  CALL FUNCTION 'EHSWA_490_BAPIRET_CONVERSION'
    TABLES
      I_BAPIRETURN_MSG_TAB = lt_return
      E_BAPIRET2_MSG_TAB   = lt_bapiret2.

 

Ausgabe:

 

 CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = lt_bapiret2.

 


Weiterlesen

Modifikationsfreie Erweiterung des SAP Referenz-IMG

17. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Modifikationsfreie Erweiterung des Standard-IMG’s

 

 

Ruft die Transaktion S_IMG_EXTENSION auf.

 

 image001-Kopie-2.png

 

Wählt als IMG-Struktur SAP Customizing Einführungsleitfaden aus. Fügt diesen am besten in Eure Favoritenliste ein.

 

image003-Kopie-1.png

 

Klappt die Werthilfe zur Erweiterungs-ID auf und wählt entweder ‚Neu’ bzw. wählt unter ‚Originale’ eine vorhandene aus. Die so angelegte Erw.-Id erscheint hinterher in der Werthilfe unter ‚Originale’. Wählt diese aus und klickt auf Struktur erweitern.

 

image005-Kopie-1.png

 

Navigiert an die Stelle, wo Ihr Eure IMG-Aktivität einfügen wollt und fügt eine Aktivität oder einen Knoten ein (Drucktasten image007.png).

 

Hier gibt es natürlich verschiedene Ansätze:

  • Ihr könnt die Aktivität an die Stelle einfügen, wo auch die Standardeinstellungen zum bearbeiteten Themenkreis zu finden sind, z.B. im SD - ‚Steuerung der Preisfindung…’.
  • Ihr könnt am Ende des Standard-IMG’s einen Knoten <Kunde>-Einstellungen einfügen und darunter themenkreisspezifische Ordner anlegen, in denen Ihr letztendlich Eure Customizing-Aktivität einhängt.

Möglicherweise ist der Königsweg eine Mischform nach dem Motto: ‚Wenn es eine Erweiterung des SAP-Standards ist, dann 1., handelt es sich um eine Eigenentwicklung dann 2.’ oder so…

 

image009.png

 

Gebt dem Kind einen Namen und tragt unter ‚Bezeichnung’ den Titel ein, unter dem die Aktivität später im Referenz-IMG erscheinen soll. Sinnvollerweise sollte dieser aus den Standard-Aktivitäten in irgendeiner Form herausstechen, bspw. durch Voranstellen des Kunden-Namens (<KUNDE>: Steuerungsparameter zum Buchungskreis). Gebt einen Dokumentennamen für die IMG-Dokumentation ein (er kann identisch mit dem technischen Namen der IMG-Aktivität selbst sein) und klickt auf ‚Anlegen’.

 

image011.png

 

Pflege eine entsprechende Doku zur IMG-Aktivität ein.

 

Den Reiter ‚Attribute’ könnt Ihr überspringen, es sei denn, Ihr wollt diese Aktivität in die ASAP-Roadmap einhängen oder landesspezifisch ausprägen. Ich weiß es nicht genau, aber es kann sein, dass die Angaben auch für Projekt-IMG’s benötigt werden.

 

image013.png

 

Tragt ggf. im Reiter ‚Attribute’ die entsprechenden Werte ein. Die ASAP-Road-MAP-ID und ‚zugeordn. Anwendungskomponenten’ sind Pflichtangaben. Fürs erstere gibt’s eine Werthilfe, fürs zweite leider nicht. Sucht Euch ggf. die Komponente aus den umliegenden (Standard-)Aktivitäten heraus.

 

image015.png

 

Weist Eurer IMG-Aktivität unter ‚Pflegeobjekte’ abschließend das entsprechende Customizing-Objekt zu (hier: einfache Tabelle mit generiertem Tabellenpflegedialog). Es gehen aber auch Pflegeviews / Viewcluster, Transaktionen und Tod und Teufel was (siehe F4-Hilfe ‚Typ’)…

 

Alles Speichern à fertig!

 

Im Ergebnis sieht’s dann so aus:

 

image018.png

 

Und jetzte kommt das geilste:

 

Ihr könnt in Euren Programm- oder sonst wie gearteten Dokumentationen auf die IMG-Aktivität verweisen.

Syntax: <DS:SIMG.Eure IMG-Aktivität>Text in Doku</>

 

image020.png

 

image023.png

Weiterlesen

Die Gebote der guten Programmierung

17. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Teile Dein Wissen oder 'tue Gutes und rede darüber...'!

Du hast einen bahnbrechenden Funktionsbaustein oder eine tolle Object-Klasse geschrieben, die zu schön ist, um unbeachtet zu versauern? Teile Deinen Schatz, in dem Du Ihn in die ...Reuse-Library einstellst (Transaktion SLIB bzw. SE83). Vergiss dabei die Dokumentation nicht, aber die hast Du ja sowieso schon erstellt, gelle? Du kannst hier aber auch Texte, Internetlinks oder sonst irgendwelche Dateien einstellen, von denen Du glaubst, dass sie auch andere interessieren könnten. Nimm aktiv an einschlägigen Internetforen teil (z.B. abapforum.com), teile Dein Wissen und profitiere vom Expertenwissen anderer.

 

Sei schlau, nutze ALV...!

Sofern es für die Art der Ausgabe Deines Programmes sinnvoll ist, nutze die ALV-Funktionsbausteine (REUSE_ALV...). In der Reuse-Library findet Du den Punkt 'ALV für Faulpelze', hierunter findest Du umfassendes Vorlage- und Anschauungsmaterial. Für Protokolle und Logs kann es sinnvoll sein, die Standard-Anwendungslog-Funktionalitäten zu nutzen (vgl. Demo Reports SBAL_DEMO*). Auch hierzu findest Du entsprechende Reuse-Komponenten.

 

Sei geschwätzig - Reden bzw. Schreiben ist Gold, Schweigen ist Blech...!

Informiere den Anwender über Dein Tun z.B. mit entsprechenden Fortschrittsmeldungen (FuBa SAPGUI_PROGRESS_INDICATOR) und geize nicht mit Statusmeldungen (Meldungstyp S) auch bei Batch-Programmen. Gib aussagekräftige und differenzierte (Fehler-)Meldungen zurück. Dies gilt auch für Ausnahmen bei Klassen oder Funktionsbausteinen ('AN_ERROR_OCCURED' ist so hilfreich wie 'Schutzverletzung an Adresse A4711783BC5'...).

 

Sei edel, gut und insbesondere hilfreich...!

Gehe nicht davon aus, dass ein Anwender (oder Entwickler) mit einer Fehlermeldung a la 'Fehler beim Lesen der Tab. XYZ' oder ähnlichem Zeug etwas anfangen kann. Hänge hinter Deine Fehlermeldungen eine aussagekräftige Dokumentation (Langtext) und vergiss dabei den Part 'Vorgehen...' nicht.

Hinterlege eine Programmdokumentation an Deinen Programmobjekten (F1-Hilfe). Sei hierbei so detailliert und umfänglich wie nötig, d.h. im Einzelfall kann auch ein Verweis auf ein bestehendes, dem Anwenderkreis zugängliches Word-Dokument völlig ausreichend sein. Sorge dafür, dass hinter allen nicht selbsterklärenden Oberflächenobjekten (Felder, Selektionsparameter, ...) eine F1-Hilfe hängt (durch Referenz auf ein [eigenes] Datenelement mit Doku bzw. durch Ausgestaltung des Zeitpunkts AT SELECTION-SCREEN ON HELP-REQUEST).

Nutze die Gestaltungsmöglichkeiten des Selektionsbildes, die ABAP bietet z.B. Subscreens, TabStrips usw. (vgl. SELECTION-SCREEN...).

Nutze die Verweisfunktion beim Gestalten Deiner Hilfetexte, z.B. aufs Glossar oder die Dokumentation von Datenelementen. Eine Auflistung aller hierbei zur Verfügung stehenden Objekte findest Du in der Reuse-Library oder auf tricktresor.de.

 

Sei hart im Nehmen, aber programmiere weich...!

Hoffe das Beste aber erwarte das Schlimmste. Frage den SY-SUBRC ab. Gehe davon aus, dass DB-Operationen auch mal schief gehen können. Informiere den Anwender in angemessener Form (vgl. Gebot 'Sei geschwätzig...').

'Verdrahte' nichts hart in Deinem Coding (IF KUNNR = '4711'.). Erstelle ggf. eigene Customizingtabellen/-objekte, die Du mit der Transaktion S_IMG_EXTENSION in den IMG an geeigneter Stelle modifikationsfrei hinzufügen und dokumentieren kannst. Hierzu findest Du eine ausführliche Anleitung in der Reuse-Library. Superprofessionell sieht auch ein Viewcluster aus (mehrstufiger Customizing-Dialog). Ein ausführliches Tutorial findest Du auf Tricktresor.de

 

Sei weltmännisch...!

Achte darauf, dass Deine Entwicklungen der Globalisierung standhalten, d.h. ggf. übersetzbar sind. Verwende deshalb keine Textliterale (WRITE: / 'Hallo Du da...'), sondern Textsymbole oder andere geeignete Objekte und achte auf Unicode-Fähigkeit.

Wenn Du eigene Tabellen kreierst, arbeite ggf. mit separaten Texttabellen (analog zum SAP-Standard, z.B. T003/T003T).

...

 

Weiterlesen