4AP.de ~ alles fuer ABAP-Programmierer - Infos zur SAP Programmiersprache


das Neueste

10 Jahre 4ap.de

10 Jahre 4ap.de - kleines und stilles Jubiläum

|

 

Buchrezensionen

Einige neue Buchrezensionen sind vorhanden.

|

 

neues Coding: braune Kekse

Lange schwebte mir die Idee vor, aber es fehlte schlicht die Zeit. Heute war es endlich soweit: ich nahm sie mir, die Zeit :-) Ergebnis unter: braune Kekse.

|

 

neues Kontaktformular

Wegen Formularspoofing wurde eine neue Kontaktmöglichkeit geschaffen.
|

 

Codings gesucht

Codings gesucht, die NICHT im SDN stehen.
|

 

Suche



 


Dieser Inhalt wurde zuletzt geändert am:
05.02.2010 von TN

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(1TYPE 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(3TYPE 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 *
* *
* `---´ *
* *
***************