Das müsste das sein, was Du sucht, oder?!AT - itab
Syntax
LOOP AT itab result ...
[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} comp
3. ... LAST
Wirkung
Der Anweisungsblock einer LOOP-Schleife kann Kontrollstrukturen für eine Gruppenstufenverarbeitung enthalten. Die entsprechende Kontrollanweisung ist AT. Die Anweisungen AT und ENDAT definieren Anweisungsblöcke, die bei Gruppenwechseln ausgeführt werden. Innerhalb dieser Anweisungsblöcke kann die Anweisung SUM angegeben werden, um numerische Komponenten einer Gruppenstufe zu summieren. Für das Ausgabeverhalten result gilt das Gleiche wie bei LOOP AT.
Damit die Gruppenstufenverarbeitung ordnungsgemäß durchgeführt wird, sind folgende Regeln zu beachten:
Hinter LOOP darf keine einschränkende Bedingung cond angegeben werden.
Die interne Tabelle darf innerhalb der LOOP-Schleife nicht modifiziert werden.
Ein in der Anweisung LOOP hinter dem Zusatz INTO angegebener Arbeitsbereich wa muss kompatibel zum Zeilentyp der Tabelle sein.
Der Inhalt eines in der Anweisung LOOP hinter dem Zusatz INTO angegebenen Arbeitsbereichs wa darf nicht modifiziert werden.
Voraussetzung für die Gruppenstufenverarbeitung ist, dass die interne Tabelle genau nach der Reihenfolge der Komponenten ihres Zeilentyps sortiert ist, d.h. zuerst nach der ersten Komponente, dann nach der zweiten Komponente und so weiter. Aus der Zeilenstruktur und der entsprechenden Sortierung ergibt sich eine Gruppenstruktur des Inhalts der internen Tabelle, deren Stufen mit AT -Anweisungen ausgewertet werden können. Die AT-ENDAT-Kontrollstrukturen müssen entsprechend der Gruppenstruktur hintereinander angeordnet sein.
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.
Wenn in der Anweisung LOOP der Zusatz INTO verwendet wird, um den Inhalt der aktuellen Zeile einem Arbeitsbereich wa zuzuweisen, wird dessen Inhalt bei Eintritt in die AT-ENDAT-Kontrollstruktur wie folgt geändert:
Die Komponenten des aktuellen Gruppenschlüssels bleiben unverändert.
Alle Komponenten mit zeichenartigem flachen Datentyp rechts vom aktuellen Gruppenschlüssel werden an jeder Stelle auf das Zeichen "*" gesetzt.
Alle anderen Komponenten rechts vom aktuellen Gruppenschlüssel werden auf ihren Initialwert gesetzt.
Bei Verlassen der AT-ENDAT-Kontrollstruktur wird dem gesamten Arbeitsbereich wa der Inhalt der aktuellen Tabellenzeile zugewiesen.
Hinweis
Wenn in der Anweisung LOOP der Zusatz INTO verwendet wird, kann außerhalb von Klassen hinter AT {NEW}|{END OF} ein Feldsymbol angegeben werden, dem die entsprechende Komponente des Arbeitsbereichs wa zugewiesen ist.
Zusatz 1
... FIRST
Wirkung
Erste Zeile der internen Tabelle.
Zusatz 2
... {NEW}|{END OF} comp
Wirkung
Anfang bzw. Ende einer Gruppe von Zeilen mit dem gleichen Inhalt in der Komponenten comp1 comp2 ... und in den Komponenten links von comp1 comp2 .... Die Komponenten comp1 comp2 ... können wie im Abschnitt Angabe von Komponenten beschrieben angegeben werden, mit der Einschränkung, dass der Zugriff auf die Attribute von Objekten hier nicht möglich ist.
Zusatz 3
... LAST
Wirkung
Die letzte Zeile der internen Tabelle.
Beispiel
Siehe SUM.
Ausnahmen
Unbehandelbare Ausnahmen
Ursache: Unzulässiger Teilfeldzugriff bei dynamischer Spezifikation des Gruppenwechselkriteriums.
Laufzeitfehler: AT_BAD_PARTIAL_FIELD_ACCESS
Ursache: Bei dynamischer Spezifikation des Gruppenwechselkriteriums via Feldsymbol zeigt das Feldsymbol nicht in den LOOP-Ausgabebereich.
Laufzeitfehler: AT_ITAB_FIELD_INVALID
Ursache: Bei dynamischer Spezifikation des Gruppenwechselkriteriums via (name) enthält das Feld name keinen gültigen Teilfeldbezeichner.
Laufzeitfehler: ITAB_ILLEGAL_COMPONENT
Ursache: Überlauf bei Summenbildung mit SUM.
Laufzeitfehler: SUM_OVERFLOW
Code: Alles auswählen.
loop at itab.
write: itab-kst, itab-dmbtr.
at end of kst.
sum.
write: 'Zwischensum', itab-dmbtr.
endat.
at last.
sum.
write: 'Summe ', itab-dmbtr.
endat.
endloop.