Daten kumulieren

Wenn man Daten aus einer Tabelle in einer anderen Tabelle zusammenfassen möchte, dann kann man dies mit COLLECT machen. Das ist jedoch recht langsam. Die andere Möglichkeit ist die, die Daten zu sammeln und am Ende einer Einheit an die zweite Tabelle anzufügen. Das ist aber langweilig. Mit dem folgenden Trick geht’s schnell und elegant.

REPORT ZCOLLECT.

DATA:
  FELD,
*** Tabelle “Eins”
  BEGIN OF TAB1 OCCURS 0,
    FELD,
    WERT(5) TYPE P DECIMALS 2,
  END OF TAB1,
*** Tabelle “Zwei”
  TAB2 LIKE TAB1 OCCURS 0 WITH HEADER LINE.

*** Feldsymbole
  FIELD-SYMBOLS: <TAB1> STRUCTURE TAB1 DEFAULT TAB1,
                 <TAB2> STRUCTURE TAB2 DEFAULT TAB2.

START-OF-SELECTION.

*** Testwerte “A”
  TAB1-FELD = ‘A’.
  TAB1-WERT = 1.
  APPEND TAB1.
  TAB1-WERT = 2.
  APPEND TAB1.
  TAB1-WERT = 3.
  APPEND TAB1.
  TAB1-WERT = 4.
  APPEND TAB1.

*** Testwerte “B”
  TAB1-FELD = ‘B’.
  TAB1-WERT = 1.
  APPEND TAB1.
  TAB1-WERT = 2.
  APPEND TAB1.

*** Testwerte “C”
  TAB1-FELD = ‘C’.
  TAB1-WERT = 3.
  APPEND TAB1.
  TAB1-WERT = 4.
  APPEND TAB1.


*** Daten sammeln
  LOOP AT TAB1 ASSIGNING <TAB1>.
    IF <TAB1>-FELD <> FELD.
*** Leeren Eintrag zur Zieltabelle hinzufügen
      APPEND INITIAL LINE TO TAB2.
*** Hinzugefügten Eintrag mit Feldzuweisung lesen (ASSIGN)
      READ TABLE TAB2 INDEX SY-TABIX ASSIGNING <TAB2>.
*** Vorbelegung
      <TAB2>-FELD = <TAB1>-FELD.
*** Merker aktualisieren
      FELD = <TAB1>-FELD.
    ENDIF.
*** “COLLECT”
    ADD <TAB1>-WERT TO <TAB2>-WERT.
  ENDLOOP.

*** Ausgabe
  LOOP AT TAB2 ASSIGNING <TAB2>.
    WRITE: / <TAB2>-FELD, <TAB2>-WERT.
  ENDLOOP.

Hinweis

Ab Release 4.6C können sie auch anstelle von APPEND + READ den folgenden Befehl verwenden:

APPEND INITIAL LINE TO itab ASSIGNING <fs>.

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)

Leave a Comment