Ansicht
Dokumentation
ABAPLOOP_AT_GROUP - LOOP AT GROUP
Vendor Master (General Section) General Data in Customer MasterDiese Dokumentation steht unter dem Copyright der SAP AG.
LOOP AT GROUP
LOOP AT GROUP group result $[
WHERE log_exp$] $[GROUP BY ...$].
...
ENDLOOP.
Zusatz:
Wirkung
Mitgliederschleife über die Zeilen einer Gruppe innerhalb der Gruppenschleife bei der Gruppierung interner Tabellen. Diese Schleife ist nur innerhalb einer LOOP-Schleife über eine interne Tabelle mit dem Zusatz GROUP BY möglich,
- für welche die interne Tabelle itab direkt als Datenobjekt und nicht als Ergebnis eines Aufrufs oder Ausdrucks angegeben ist,
- bei welcher der Zusatz WITHOUT MEMBERS nicht verwendet wird.
Mit group wird die Gruppe angegeben, über welche die Mitgliederschleife ausgeführt werden soll. Es muss das im Ausgabeverhalten group_result der Gruppenschleife definierte Zielobjekt angegeben werden, das an die Gruppe gebunden ist:
- Bei der Repräsentantenbindung ist dies ein im Ausgabeverhalten result angegebener Repräsentant
- Bei der Gruppenschlüsselbindung ist dies ein im Ausgabeverhalten group_result angegebenes Datenobjekt oder Feldsymbol.
Die Mitgliederschleife über die aktuelle Gruppe wird genau so ausgeführt, wie eine normale LOOP-Schleife über eine Standardtabelle mit dem Zeilentyp von itab, welche die Zeilen der Gruppe enthält. Es sind beide Varianten möglich:
- Schleife über Zeilen ohne den Zusatz GROUP BY.
- Schleife über Gruppen mit dem Zusatz GROUP BY.
Der zweite Punkt ermöglicht die weitere Gruppierung vorhandener Gruppen.
Systemfelder
Die Anweisung LOOP AT GROUP setzt den Wert des Systemfeldes sy-tabix in der Mitgliederschleife auf den Wert der für die aktuelle Zeile in der LOOP-Schleife ohne Gruppierung gesetzt würde.
Das Systemfeld sy-subrc wird von einer Mitgliederschleife immer auf den Wert 0 gesetzt.
Hinweise
- Auch wenn es für eine einzelne LOOP-Schleife immer nur eine Gruppierung gibt, ist es notwendig, die Gruppe group explizit anzugeben, da in geschachtelten LOOP-Schleifen Zugriff auf mehrere Gruppen bestehen kann.
- Für group muss genau der im Ausgabeverhalten angegebene Namen verwendet werden, d.h. ein hinter ASSIGNING angegebenes Feldsymbol mit spitzen Klammern und eine hinter REFERENCE INTO angegebene Datenreferenzvariable ohne Dereferenzierungsoperator ->.
- Die Anweisung LOOP AT GROUP kann nur innerhalb einer mitLOOP AT ... GROUP BY definierten Schleife aufgeführt werden, da nur dort der durch deren Ausgabeverhalten definierte Bezeichner für die Gruppe gültig ist. Insbesondere ist LOOP AT GROUP nicht in Prozeduren möglich, die aus einer Gruppenschleife aufgerufen werden, selbst wenn dort Zugriff auf das durch das Ausgabeverhalten definierte Datenobjekt oder Feldsymbol besteht.
- Auch wenn Syntax und Semantik von LOOP AT GROUP die einer normalen geschachtelten Schleife sind, ist der tatsächliche Zugriff auf die Zeilen der Gruppe optimiert. Hierfür wird die interne Ausprägung der Zuordnung der Zeilen zu ihrer Gruppe ausgenutzt.
- In einer Schleife LOOP AT GROUP ist keine Gruppenstufenverarbeitung mit der Anweisung AT möglich.
- Da eine Gruppenschleife keine leeren Gruppen erzeugt, wird eine Mitgliederschleife in der Regel immer durchlaufen. Nur durch eine WHERE-Bedingung kann bewirkt werden, dass die Mitglieder einer Gruppe nicht verarbeitet werden. Dies wird intern aber erst zu Beginn des ersten Schleifendurchgangs erkannt, so dass auch in diesem Fall sy-subrc auf den Wert 0 gesetzt wird.
- Die Anweisung LOOP AT GROUP hat eine Entsprechung im Ausdruck FOR ... IN GROUP. Ihre Funktionalität kann daher oft auch durch
Tabellen-Comprehensions oder
Tabellenreduzierungen eleganter ausgedrückt werden.
Beispiel
Mitgliederschleife in einer Gruppenschleife. Dort werden die zu einer Fluggesellschaft gehörigen Flugnummern in einem String zusammengefasst.
Das folgende Beispiel führt die sechs verschiedenen syntaktischen Möglichkeiten, eine Gruppe in einer Mitgliederschleife anzugeben, einzeln auf:
- Arbeitsbereich wa der LOOP-Schleife bei Repräsentantenbindung.
- Feldsymbol <fs> der LOOP-Schleife bei Repräsentantenbindung.
- Datenreferenzvariable dref der LOOP-Schleife bei Repräsentantenbindung.
- Arbeitsbereich group der Gruppenschleife bei Gruppenschlüsselbindung.
- Feldsymbol group der Gruppenschleife bei Gruppenschlüsselbindung.
- Datenreferenzvariable group_ref der Gruppenschleife bei Gruppenschlüsselbindung.
Zusatz
... WHERE log_exp
Wirkung
Die aus der Gruppe ausgelesenen Zeilen können mit einer statischen WHERE-Bedingung eingeschränkt werden. Syntax und Bedeutung sind wie bei einer LOOP-Schleife über eine interne Tabelle mit dem Zeilentyp von itab.
Hinweis
Die Zusätze USING KEY,
FROM, TO und eine dynamische WHERE-Bedingung sind hinter LOOP AT GROUP nicht möglich.
Beispiel
Wie obiges Beispiel, aber mit einschränkender WHERE-Bedingung für die Mitgliederschleife.
CL_GUI_FRONTEND_SERVICES - Frontend Services BAL Application Log Documentation
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 8991 Date: 20240420 Time: 164400 sap01-206 ( 110 ms )