Ansicht
Dokumentation

ABAPAT_ITAB - AT ITAB

ABAPAT_ITAB - AT ITAB

General Data in Customer Master   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

AT, Gruppenstufenverarbeitung

Kurzreferenz



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 lautet 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 den Varianten AT NEW und AT END OF durch die gemäß der Verarbeitungsreihenfolge der Schleife aufeinanderfolgenden Zeilen der internen Tabelle definiert, die in einem durch ein Anfangsstück der Zeilen definierten Gruppenschlüssel den gleichen Inhalt haben. Dabei werden alle Zeilen der internen Tabelle ohne Auswertung einschränkender Bedingungen cond berücksichtigt.

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. Wenn eine Tabellenzeile, bei der ein Gruppenwechsel stattfindet, wegen einer einschränkenden Bedingung cond nicht gelesen wird, wird der entsprechende Anweisungsblock nicht ausgeführt.

Damit eine sinnvolle Gruppenstufenverarbeitung erfolgt, sind folgende Regeln zu beachten:

  • Ein bei LOOP in cond angegebener Tabellenschlüssel muss so gewählt werden, dass er die gewünschte Verarbeitungsreihenfolge für die eingelesenen Zeilen ergibt.
  • Der Zusatz STEP kann nicht angegeben werden. Andere einschränkende Bedingungen sollten cond auch nicht angegeben werden. Wenn eine Bedingung angegeben ist, sollte sie zusammenhängende Zeilengruppen inklusive der ersten Zeile der Gruppe selektieren, bei welcher der Gruppenwechsel stattfindet.
  • 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.
  • Ein in der Anweisung LOOP hinter dem Zusatz ASSIGNING angegebenes Feldsymbol <fs> muss mit dem Zeilentyp der Tabelle typisiert sein.
  • Der Inhalt eines in der Anweisung LOOP hinter dem Zusatz INTO angegebenen Arbeitsbereichs wa darf nicht modifiziert werden.

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

  • Im häufigsten Anwendungsfall ist 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. In diesem Fall kann die Gruppenstufenverarbeitung auch durch eine Gruppierung mit dem Zusatz GROUP BY ausgedrückt werden.
  • Wenn möglich wird die Verwendung des Zusatz GROUP BY empfohlen, da die Gruppierung dann nicht vom Aufbau der Zeilen und der Verarbeitungsreihenfolge der Schleife abhängt.
  • Eine Gruppenstufenverarbeitung mit der Anweisung AT ist nicht in LOOP-Schleifen über Zeilengruppen mit dem Zusatz GROUP BY und dort insbesondere nicht in Mitgliederschleifen LOOP AT GROUP möglich.
  • Da die hier beschriebene Gruppenstufenverarbeitung bei Verwendung einer einschränkenden Bedingung cond zu unerwarteten Ergebnissen führen kann, führt sie zu Meldungen der erweiterten Syntaxprüfung.

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.

Hinweis

Wenn die erste Zeile der internen Tabelle wegen einer einschränkenden Bedingung cond nicht gelesen wird, wird der Anweisungsblock der Kontrollstruktur AT FIRST nicht ausgeführt.

Beispiel

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

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

  • die Angabe von Datenobjekte über Datenreferenzen
  • die Angabe von Attributen von Objekten über Objektreferenzen

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:

  • 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 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

  • Die solcherart definierten Gruppenstufen bestehen aus den aufeinanderfolgenden Zeilen der internen Tabelle, die in einem Anfangsstück der Zeilen den gleichen Inhalt haben.
  • Wenn die erste oder letzte Zeile einer Zeilengruppe wegen einer einschränkenden Bedingung cond nicht gelesen wird, wird der Anweisungsblock der Kontrollstruktur AT NEW bzw. AT END OF nicht ausgeführt.
  • In einer obsoleten Variante können außerhalb von Klassen für compi auch noch Feldsymbole angegeben werden.

Beispiel

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

Beispiel

Da die erste Zeile der ersten Zeilengruppe wegen des Zusatzes FROM 2 nicht gelesen wird, wird der zugehörige Anweisungsblock hinter AT NEW table_line nicht ausgeführt. Das Programm führt deshalb zu einer Meldung von der erweiterten Programmprüfung.

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.

Hinweis

Wenn die letzte Zeile der internen Tabelle wegen einer einschränkenden Bedingung cond nicht gelesen wird, wird der Anweisungsblock der Kontrollstruktur AT LAST nicht ausgeführt.

Beispiel

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

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






ROGBILLS - Synchronize billing plans   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 17997 Date: 20240419 Time: 163137     sap01-206 ( 254 ms )