ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Interne Daten verarbeiten →  Interne Tabellen →  Verarbeitungsanweisungen für interne Tabellen →  LOOP AT itab →  LOOP AT itab - Grundform → 

AT - Gruppenstufenverarbeitung

Kurzreferenz

Syntax

LOOP AT itab result [cond].
  [AT FIRST.
     ...
   ENDAT.]
    [AT NEW comp1.
       ...
     ENDAT.
       [AT NEW comp2.
         ...
       ENDAT.
         [...]]]
           [ ... ]
       [[[...]
       AT END OF comp2.
         ...
       ENDAT.]
     AT END OF comp1.
       ...
     ENDAT.]
  [AT LAST.
     ...
  ENDAT.]
ENDLOOP.

Zusätze:

1. ...  FIRST

2. ... {NEW}|{END OF} compi

3. ...  LAST

Wirkung

Der Anweisungsblock einer LOOP-Schleife ohne den Zusatz GROUP BY kann Kontrollstrukturen für eine Gruppenstufenverarbeitung enthalten. Die entsprechende Kontrollanweisung ist AT. Die Anweisungen AT und ENDAT definieren Anweisungsblöcke, die bei Gruppenwechseln, d.h. beim Übergang einer Gruppenstufe zu einer anderen Gruppenstufe ausgeführt werden. Die Zusätze der Anweisungen AT definieren die Kriterien für einen Gruppenwechsel und damit die Gruppenstufen. Gruppenwechsel zwischen Gruppenstufen ergeben sich aus der Zeilenstruktur und der Verarbeitungsreihenfolge, in der die LOOP-Schleife die Zeilen der internen Tabelle einliest. Innerhalb der Anweisungsblöcke kann die Anweisung SUM angegeben werden, um numerische Komponenten einer Gruppenstufe zu summieren.

Abgesehen von den speziellen Varianten AT FIRST und AT LAST werden Gruppenstufen mit der Variante AT NEW durch die aufeinanderfolgenden Zeilen der internen Tabelle definiert, die in einem durch ein Anfangsstück der Zeilen definierten Gruppenschlüssel den gleichen Inhalt haben. Obwohl es syntaktisch möglich ist, AT-Kontrollstrukturen beliebig anzuordnen und auch zu schachteln, wird eine sinnvolle Gruppenstufenverarbeitung in aller Regel nur durch die oben gezeigte Anordnung gezeigt, bei der die Kontrollstrukturen entsprechend der Anordnung der Komponenten im Gruppenschlüssel hintereinander und nicht geschachtelt aufgeführt sind.

Die Anweisungsblöcke innerhalb der AT-ENDAT-Kontrollstrukturen werden ausgeführt, wenn bei der aktuellen Tabellenzeile ein entsprechender Gruppenwechsel stattfindet. Anweisungen der LOOP-ENDLOOP-Kontrollstruktur, die nicht innerhalb einer AT-ENDAT-Kontrollstruktur aufgeführt sind, werden bei jedem Schleifendurchgang ausgeführt. Damit eine sinnvolle Gruppenstufenverarbeitung erfolgt, sind folgende Regeln zu beachten:

Wenn in der Anweisung LOOP der Zusatz INTO wa verwendet wird, wird der Inhalt von wa bei Eintritt in die AT- ENDAT-Kontrollstruktur in Abhängigkeit von der jeweiligen Gruppenstufe überschrieben und beim Verlassen der Kontrollstruktur wieder auf den Inhalt der aktuellen Zeile zurückgesetzt. Bei Verwendung der Zusätze ASSIGNING und REFERENCE INTO werden die referierten Tabellenzeilen bei Eintritt und Verlassen der AT-ENDAT-Kontrollstruktur nicht geändert.

Hinweise

Ausführbare Beispiele

Gruppenstufenverarbeitung

Zusatz 1

... FIRST

Wirkung

Die Gruppenstufe wird durch die erste Zeile der internen Tabelle definiert. Der Gruppenwechsel findet beim Auslesen dieser Zeile statt. In der Gruppenstufe AT FIRST enthält der aktuelle Gruppenschlüssel keine Komponenten.

Wenn in der Anweisung LOOP der Zusatz INTO wa verwendet wird, werden beim Eintritt in die Kontrollstruktur AT FIRST alle zeichenartigen Komponenten des Arbeitsbereichs wa mit "*" gefüllt und alle übrigen Komponenten auf ihren Initialwert gesetzt. Bei einem elementaren Zeilentyp gilt dies für den gesamten Arbeitsbereich. Beim Verlassen der AT- ENDAT-Kontrollstruktur wird dem Arbeitsbereich wa wieder der Inhalt der aktuellen Tabellenzeile zugewiesen.

Beispiel

Ausgabe einer Überschrift und der ersten Zeile einer internen Tabelle bei der Gruppenstufe AT FIRST.

DATA itab TYPE SORTED TABLE OF scarr
               WITH UNIQUE KEY carrid.

SELECT *
       FROM scarr
       INTO TABLE itab.

DATA(out) = cl_demo_output=>new( ).
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
  AT FIRST.
    out->next_section( 'First' ).
    out->write( <fs> ).
  ENDAT.
ENDLOOP.
out->display( ).

Zusatz 2

... {NEW}|{END OF} compi

Wirkung

Gruppenstufen werden durch Anfang bzw. Ende einer Gruppe von Zeilen mit dem gleichen Inhalt in der Komponenten compi (mit i = 1, 2, ...) und in den Komponenten links von compi definiert. Der Inhalt dieser Komponenten bestimmt den Gruppenschlüssel. Die Gruppenwechsel finden statt, wenn sich der Inhalt der Komponente compi oder einer Komponente links von compi ändert.

Die Komponenten compi können wie im Abschnitt Angabe von Komponenten beschrieben angegeben werden, mit der Einschränkung, dass ein Zugriff auf Datenobjekte über Referenzen hier nicht möglich ist. Nicht möglich sind also

Ansonsten können die angegebenen Komponenten einen beliebigen Datentyp haben. Für die Auswertung gelten die entsprechenden Vergleichsregeln. Bei einem elementaren Zeilentyp kann als Gruppenschlüssel nur table_line angegeben werden.

Wenn in der Anweisung LOOP der Zusatz INTO wa verwendet wird, wird der Inhalt von wa bei Eintritt in die AT-ENDAT-Kontrollstruktur wie folgt geändert:

Bei einem elementaren Zeilentyp entspricht der gesamte Arbeitsbereich dem aktuellen Gruppenschlüssel und dieser bleibt unverändert. Beim Verlassen der AT-ENDAT-Kontrollstruktur wird dem Arbeitsbereich wa wieder der Inhalt der aktuellen Tabellenzeile zugewiesen.

Hinweise

Beispiel

Ausgabe der Spalte carrid als Überschrift für den verketteten Inhalt der zugehörigen Flugnummern.

DATA itab TYPE SORTED TABLE OF spfli
               WITH UNIQUE KEY carrid connid.

SELECT *
       FROM spfli
       INTO TABLE itab.

DATA connids TYPE string.
DATA(out) = cl_demo_output=>new( ).
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
  AT NEW carrid.
    out->next_section( <fs>-carrid ).
  ENDAT.
  connids = connids && ` ` && <fs>-connid.
  AT END OF carrid.
    out->write( connids ).
    CLEAR connids.
  ENDAT.
ENDLOOP.
out->display( ).

Zusatz 3

... LAST

Wirkung

Die Gruppenstufe wird durch die letzte Zeile der internen Tabelle definiert. Der Gruppenwechsel findet beim Auslesen dieser Zeile statt. In der Gruppenstufe AT LAST enthält der aktuelle Gruppenschlüssel keine Komponenten.

Wenn in der Anweisung LOOP der Zusatz INTO wa verwendet wird, werden beim Eintritt in die Kontrollstruktur AT LAST alle zeichenartigen Komponenten des Arbeitsbereichs wa mit "*" gefüllt und alle übrigen Komponenten auf ihren Initialwert gesetzt. Bei einem elementaren Zeilentyp gilt dies für den gesamten Arbeitsbereich. Beim Verlassen der AT- ENDAT-Kontrollstruktur wird dem Arbeitsbereich wa wieder der Inhalt der aktuellen Tabellenzeile zugewiesen.

Beispiel

Ausgabe von kumuliertem Inhalt während der Verarbeitung der letzten Zeile.

DATA itab TYPE SORTED TABLE OF scarr
               WITH UNIQUE KEY carrid.

SELECT *
       FROM scarr
       INTO TABLE itab.

DATA carrids TYPE string.
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
  carrids = carrids && ` ` && <fs>-carrid.
  AT LAST.
    cl_demo_output=>display( carrids ).
  ENDAT.
ENDLOOP.

Ausnahmen

Unbehandelbare Ausnahmen



Weiterlesen
SUM
ENDAT
Beispiele zur Gruppenstufenverarbeitung