Codeschnipsel
www.4AP.de - ABAP Syntaxbeispiele: verschiedene Codeschnipsel
Beispielcoding: verschiedene Codeschnipsel (kopieren erlaubt aber auf eigene Gefahr :-))
Einige kleinere Codeschnipsel:
* mostly coded by Thorsten Neubüser - www.4ap.de
![]()
* Debug-Schleife: um eine Batch-Prozess über die SM50 o.ä. debuggen zu
* können. Auch für per RFC angestoßene Fubaus etc.
* das Coding ist eher Trivial.
data: debug. " ACHTUNG! nur in Absprache auskommentieren
while debug is initial. " der WERT von debug muss geändert werden!
* nur mal so zum Spaß und natürlich zum Testen
endwhile. " debug is initial
![]()
* Materialnummer mit führenden Nullen auffüllen // DIRTY!!
UNPACK ITAB-MATNR TO ITAB-MATNR.
![]()
* einige wenige 'harte' Selektionsoptionen abfragen
SELECT * FROM knvp
APPENDING CORRESPONDING FIELDS OF TABLE it_knvp
FOR ALL ENTRIES IN it_kunnr
WHERE kunnr = it_kunnr-kunnr
AND parvw IN ('AG', 'WE', 'ZW').
...
( eshop = 'X' AND eshop_datum <= sy-datum )
OR ( eshop = 'A' AND eshop_datum >= sy-datum )
OR ( eshop = 'B' AND eshop_datum > sy-datum ) AND
![]()
* führende Nullen entfernen
SHIFT ME21_REENR LEFT DELETING LEADING '0'.
![]()
* übersetzungsfähiges Textelement 'intelligent' anlegen
write: 'nach dem Schreiben auf die Nummer doppelklicken'(023),
'legt diesen Text als übersetzungsfähigen Text an'(024).
![]()
* Kopfzeile in itab einfügen
insert itab index 1.
* Meingeneinheit ISO-Umwandlung von 'ST' in 'PCE' etc, benutzt für IDOCs * es kommen Stück = ST aus der MARA, egal welche Anmeldesprache!!! Basismengeneinheit * das IDOC will aber PCE sehen, da englisch angemeldet bzw. englisches System
data: lv_meins TYPE mara-meins.
* Conversion ISO-Code
SELECT SINGLE ISOCODE FROM t006 CLIENT SPECIFIED
into lv_meins
WHERE mandt = sy-mandt
AND msehi = lv_meins.
* 'intelligenter' SPLIT
DATA: ii_split TYPE TABLE OF string.
DATA: ww_split TYPE string.
* Initialize
REFRESH: ii_split.
CLEAR: ww_line.
* Split line
SPLIT w_file-string AT ',' INTO TABLE ii_split.
* Transfer fields
LOOP AT ii_split INTO ww_split.
CASE sy-tabix.
WHEN 1.
ww_line-gcp_matnr = ww_split.
WHEN 2.
ww_line-gcp_qty = ww_split.
WHEN 3.
ww_line-dat00 = ww_split.
WHEN 4.
ww_line-co_matnr = ww_split.
WHEN 5.
ww_line-co_qty = ww_split.
WHEN 6.
ww_line-unit = ww_split.
WHEN 7.
ww_line-stor_loc = ww_split.
WHEN 8.
ww_line-revlv = ww_split.
WHEN OTHERS.
ENDCASE. " sy-tabix
ENDLOOP. " AT ii_split INTO ww_split
![]()
* 10 Sekunden auf Verbuchung warten! DATA: ZEIT LIKE SY-UZEIT. clear zeit. GET TIME FIELD ZEIT. ZEIT = ZEIT + 10. DO. GET TIME. IF SY-UZEIT GT ZEIT. EXIT. ENDIF. ENDDO. Oder ganz kurz: WAIT UP TO 10 SECONDS.
* Anzahl Monate auf Datum addieren,
* davon dann Monatsletzten ermitteln:
PARAMETERS: p_month TYPE t691f-wswin.
DATA:
l_date TYPE sy-datum,
l_month TYPE t691f-wswin.
l_date = sy-datlo.
WRITE: 'Actual:', l_date.
l_month = p_month + 1.
DO l_month TIMES.
l_date+06(02) = 28.
l_date = l_date + 4.
ENDDO.
l_date+06(02) = 1.
l_date = l_date - 1.
WRITE: 'New:', l_date.
* at the end of each downloaded line / Windows, alte Systeme
DATA:
BEGIN OF final,
* line_sep type C value ';',
cr TYPE x VALUE '0D', " carriage return = 013 dec
lf TYPE x VALUE '0A', " line feed = 010 dec
END OF final,
![]()
* für dynamische Programmierung (subroutine-pool) * Windows, alte Systeme * NICHT-Unicode-Syteme haben es leicht: HOCHKOMMA TYPE X VALUE '27'. " hex27 = dec39 = ' * für Unicode-Systeme ist das ein wenig aufwändiger data: hochkomma TYPE c, wert type i value 39, " hex27 = dec39 = ' l_cr(1) type x value 4. FIELD-SYMBOLS: <cr> type x. ASSIGN hochkomma TO <cr> CASTING. l_cr = Wert. <cr> = l_cr. " so, jetzt steht in hochkomma ein Hochkomma also '
################
* GANZ richtig definiert heutzutage * um die noch vorhandenen CRs austauschen zu können
DATA:
lv_replace TYPE c,
lv_ascii TYPE i VALUE 13, " dec-13 = hex-0D also ein 'CR'
lv_hex(1) TYPE x VALUE 4.
FIELD-SYMBOLS: <lv_fs> TYPE x.
ASSIGN lv_replace TO <lv_fs> CASTING.
lv_hex = lv_ascii.
<lv_fs> = lv_hex. " so, jetzt steht in lv_replace der ASCII-Wert drin
* dann klappt auch der folgende Replace
REPLACE ALL OCCURRENCES OF lv_replace IN ev_content WITH ''. ######################
* um die Codierung '$!$' in einen Zeilenumbruch umwandeln zu können DATA: old_lf(3) TYPE c VALUE '§!§', " old LINE FEED new_lf TYPE ABAP_CR_LF value cl_abap_char_utilities=>cr_lf. " new LF ASCII-HEX-Umwandlung unter http://www.goascii.de/ (Javascript erforderlich)
sonstige 'Sonderzeichen' in CL_ABAP_CHAR_UTILITIES
HORIZONTAL_TAB Constant Public Type ABAP_CHAR1 Zeichen "horizontaler Tabulator-Stop"
VERTICAL_TAB Constant Public Type ABAP_CHAR1 Zeichen "vertikaler Tabulator-Stop"
NEWLINE Constant Public Type ABAP_CHAR1 Zeichen "neue Zeile"
CR_LF Constant Public Type ABAP_CR_LF Zeichenpaar "Wagenrücklauf u. Zeilenvorschub"
FORM_FEED Constant Public Type ABAP_CHAR1 Zeichen "Seitenvorschub"
BACKSPACE Constant Public Type ABAP_CHAR1 Zeichen "Backspace"
SPACE_STR Static Attribute Private Type STRING String mit Whitespace-Zeichen
SPACE_STR_LANGU Static Attribute Private Type LANGU Sprachkennzeichen zu SPACE_STR
Für dynamische Tabellendefinition: siehe auch bei wer-weiss-was [http://www.wer-weiss-was.de/theme129/article1119117.html#].
* Nachrichtenklasse '00' zum Ausgeben diversen Fehlermeldungen
* ohne Zwischenräume [ &1&2&3&4 ] message i001(00) with 'maximal bis 50 Character werden je Textfeld ausgegeben'(001) 'X2' 'x3' 'X4'. * mit Zwischenräumen [ &1 &2 &3 &4 ] message i398(00) with 'x1' 'X2' 'x3' 'X4'.
*
![]()
***************
* *
* T T *
* N *
* *
* `---´ *
* *
***************


