Ansicht
Dokumentation
ABAPLOOP_AT_ITAB - LOOP AT ITAB
BAL_S_LOG - Application Log: Log header data CL_GUI_FRONTEND_SERVICES - Frontend ServicesDiese Dokumentation steht unter dem Copyright der SAP AG.
LOOP AT itab, Grundform
LOOP AT itab result $[cond$].
...
$[AT ...
...
ENDAT.$]
...
ENDLOOP.
Wirkung
Mit dieser Variante der Anweisung LOOP AT itab werden Zeilen der internen Tabelle itab sequentiell gelesen und der Anweisungsblock zwischen LOOP und ENDLOOP einmal pro Zeile ausgeführt. Es werden entweder alle Zeilen oder eine durch eine oder mehrere Bedingungen cond angegebene Untermenge gelesen.
- Das Ausgabeverhalten result bestimmt, wie und wohin der Zeileninhalt gelesen wird.
- Die Bedingungen cond können aus folgenden optionalen Zusätzen bestehen:
- Mit einem Zusatz USING KEY kann der Tabellenschlüssel bestimmt werden, mit dem die Schleife durchlaufen wird. Der Tabellenschlüssel beeinflusst die Reihenfolge der Verarbeitung der Zeilen.
- Mit den Zusätzen FROM und TO für Indextabellen und WHERE für alle Tabellenarten kann die Schleifenverarbeitung auf eine Untermenge von Zeilen eingeschränkt werden.
- Ein Zusatz STEP erlaubt die Definition einer Schrittgröße und der Richtung der Schleifenverarbeitung.
- Mit den Kontrollanweisungen AT ...Mit ENDAT können Kontrollstrukturen für eine Gruppenstufenverarbeitung definiert werden.
Die Reihenfolge der gelesenen Zeilen kann von folgenden Aspekten abhängen:
- die Tabellenart
- der Zusatz USING KEY
- der Zusatz STEP
Wenn keine der Zusätze angegeben sind, hängt die Standardreihenfolge wie folgt von der Tabellenart ab:
- Standard-Tabellen und sortierte Tabellen
- Die Zeilen werden nach aufsteigenden Zeilennummern im primären Tabellenindex gelesen. Das Systemfeld sy-tabix enthält in jedem Schleifendurchlauf die Zeilennummer der aktuellen Zeile im primären Tabellenindex.
- Hash-Tabellen
- Die Zeilen werden in der Reihenfolge bearbeitet, in der sie in die Tabelle eingefügt wurden, und nach einer Sortierung mit der Anweisung SORT in der Sortierreihenfolge. Das Systemfeld sy-tabix enthält in jedem Schleifendurchlauf den Wert 0.
Die Schleife wird solange durchlaufen bis alle Tabellenzeilen der Tabelle oder der in der cond-Bedingung angegebenen Untermenge gelesen wurde oder bis sie mit einer Anweisung beendet wird. Falls keine entsprechenden Zeilen gefunden werden oder die interne Tabelle leer ist, wird die Schleife nicht durchlaufen.
Wenn die interne Tabelle als Rückgabewert bzw. Resultat einer funktionalen Methode, eines Konstruktorausdrucks oder eines Tabellenausdrucks angegeben ist, ist dieser Wert für die Dauer der Schleifenverarbeitung vorhanden. Anschließend kann nicht mehr auf die interne Tabelle zugegriffen werden.
Beim Ändern der internen Tabelle innerhalb einer Schleife gelten spezielle Regeln. Insbesondere sollten keine Schreibzugriffe auf den vollen Tabellenkörper durchgeführt werden.
Systemfelder
Diese Variante der Anweisung LOOP AT setzt den Wert des Systemfeldes sy-tabix:
- Bei jedem Schleifendurchlauf für Indextabellen und bei Verwendung eines sortierten Schlüssels auf die Zeilennummer der aktuellen Tabellenzeile im zugehörigen Tabellenindex.
- Bei Hash-Tabellen und bei Verwendung eines Hash-Schlüssels auf den Wert 0.
LOOP AT lässt sy-subrc unverändert. Nach dem Verlassen der Schleife über ENDLOOP wird sy-tabix auf den Wert gesetzt, den es vor dem Eintritt in die Schleife hatte, und für sy-subrc gilt:
sy-subrc | Bedeutung |
0 | Die Schleife wurde mindestens einmal durchlaufen. |
4 | Die Schleife wurde nicht durchlaufen. |
Zusätzlich werden die Systemfelder sy-tfill und sy-tleng versorgt.
Hinweise
- Falls die Angabe der internen Tabelle itab über eine Referenzvariable erfolgt, wird die Schleife vollständig über die beim Eintritt referenzierte Tabelle ausgeführt. Eventuelle Änderungen der Referenzvariablen wirken sich nicht auf die Schleife aus. Das zugehörige Objekt kann so lange nicht vom Garbage Collector gelöscht werden, bis die Schleife beendet wurde. Das Gleiche gilt, wenn die Tabelle durch ein Feldsymbol repräsentiert wird. Auch nach einem Umsetzen des Feldsymbols innerhalb der Schleife wird weiterhin über die beim LOOP-Eintritt an das Feldsymbol gebundene Tabelle iteriert.
-
Es findet keine implizite Auswahl eines passenden Schlüssels oder Index statt. Der verwendete
Tabellenschlüssel oder Tabellenindex ist immer eindeutig spezifiziert. Es kommt zu einer Warnung von der Syntaxprüfung, wenn es einen passenden
sekundären
Tabellenschlüssel gibt, dieser aber nicht verwendet wird. Diese Warnung sollte durch Verwendung des Schlüssels behoben werden. Sie kann in Ausnahmefällen aber auch durch ein
Pragma umgangen werden.
- Das Lesen mehrerer Zeilen in einer LOOP-Schleife ist in aller Regel günstiger als mehrere Einzelzeilenzugriffe über die Anweisung READ TABLE oder über Tabellenausdrücke.
- Aus Kompatibilitätsgründen kommt es bei einem Austausch des Tabellenkörpers in der Schleife nur dann nicht zu einem Laufzeitfehler, wenn ohne Angabe eines Sekundärschlüssel eine direkt angegebene Tabelle gelesen wird und wenn für das Ausgabeverhalten result ein Arbeitsbereich wa angegeben ist.
- Mit einer speziellen Variante LOOP AT mesh_path kann eine Schleife über den letzten Pfadknoten eines Mesh-Pfads ausgeführt werden.
- Eine weitere Form von Tabelleniterationen sind über
Iterationsausdrücke
mit FOR in bestimmten Konstruktorausdrücken möglich.
Beispiel
Schleife über eine mit dem Wertoperator
VALUE konstruierte
interne Tabelle, wobei jede Zeile einem inline mit FIELD-SYMBOL deklarierten Feldsymbol zugewiesen wird.
Beispiel
Geschachtelte LOOP-Schleifen ohne explizite Schlüsselangabe. In der WHERE-Bedingung
für die innere Schleife wird der Inhalt der aktuellen Zeile der äußeren Schleife ausgewertet.
Ausnahmen
Behandelbare Ausnahmen
- Ursache: Fehler in der dynamischen WHERE-Bedingung
Laufzeitfehler: DYN_WHERE_PARSE_ERROR
Unbehandelbare Ausnahmen
- Ursache: Unzulässiges Umsetzen des LOOP-Feldsymbols im Rumpf der Schleife.
Laufzeitfehler: ITAB_ILLEGAL_REG
- Ursache: Unzulässige Zuweisung an die LOOP-Referenz im Rumpf der Schleife.
Laufzeitfehler: MOVE_TO_LOOP_REF
- Ursache: Unzulässiges Ändern des gesamten Tabellenkörpers in der Schleife
Laufzeitfehler: TABLE_FREE_IN_LOOP
- Ursache: Unzulässiger Zugriff auf einen Tabellenindex bei Verwendung eines Hash-Schlüssels..
Laufzeitfehler: ITAB_ILLEGAL_INDEX_OP
CPI1466 during Backup TXBHW - Original Tax Base Amount in Local Currency
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 12871 Date: 20240418 Time: 100359 sap01-206 ( 167 ms )