Anfang des Inhaltsbereichs

Gruppenstufenverarbeitung Dokument im Navigationsbaum lokalisieren

Durch die Ausführung einer Sortierung über die SORT-Anweisung werden Gruppenstufen im Extraktdatenbestand definiert. Allgemeine Hinweise zu Gruppenstufen finden sich bei der Schleifenverarbeitung interner Tabellen. Die Gruppenstufenhierarchie eines Extraktdatenbestands entspricht der Reihenfolge der Felder in der Feldgruppe HEADER. Nach der Sortierung kann die AT-Anweisung in einer LOOP-Schleife eingesetzt werden, um Anweisungsblöcke anzulegen, die nur bei Gruppenstufenwechseln verarbeitet werden:

AT NEW <f> | AT END OF <f>.
...
ENDAT.

Ein Gruppenstufenwechsel liegt vor, wenn das Feld <f> oder ein übergeordnetes Feld des Sortierschlüssels im aktuellen Extraktsatz einen anderen Wert hat als im vorhergehenden Satz (bei AT NEW) bzw. nachfolgenden Satz (bei AT END) des Extraktdatenbestands. Das Feld <f> muß in der Feldgruppe HEADER enthalten sein.

Wenn der Extraktdatenbestand nicht sortiert ist, wird der Anweisungsblock innerhalb AT-ENDAT nie ausgeführt. Weiterhin werden bei der Bestimmung von Gruppenwechseln alle Extraktsätze ignoriert, bei denen die Feldinhalte von <f> HEX-Null sind.

Die AT... ENDAT-Verarbeitungsblöcke einer Schleife werden gemäß ihrer Reihenfolge bearbeitet. Diese Reihenfolge sollte der Priorität der Sortierung entsprechen. Diese ist nicht unbedingt die Reihenfolge der Felder in der Feldgruppe HEADER, sondern kann auch in der SORT-Anweisung bestimmt werden.

Wurde ein Extraktdatenbestand nach den Feldern <f1>, <f 2>,... sortiert, so sollte die Gruppenstufenverarbeitung wie folgt in der LOOP-Schleife zwischen den anderen Schleifensteueranweisungen angeordnet werden:

LOOP.
  AT FIRST.... ENDAT.
    AT NEW <f
1 >....... ENDAT.
      AT NEW <f
2 >....... ENDAT.
     ...
          AT <fg
i >..... ENDAT.
          <Einzelsatzverarbeitung ohne Steueranweisung>
     ...
      AT END OF <f
2 >.... ENDAT.
    AT END OF <f
1 >.... ENDAT.
  AT LAST..... ENDAT.
ENDLOOP.

Es müssen nicht alle der hier gezeigten Anweisungsblöcke verwendet werden, sondern nur die wirklich benötigten.

Beispiel

REPORT demo_extract_at_new.

DATA: t1(4) TYPE c, t2 TYPE i.

FIELD-GROUPS: header.

INSERT t2 t1 INTO header.

t1 ='AABB'. t2 = 1. EXTRACT header.
t1 ='BBCC'. t2 = 2. EXTRACT header.
t1 ='AAAA'. t2 = 2. EXTRACT header.
t1 ='AABB'. t2 = 1. EXTRACT header.
t1 ='BBBB'. t2 = 2. EXTRACT header.
t1 ='BBCC'. t2 = 2. EXTRACT header.
t1 ='AAAA'. t2 = 1. EXTRACT header.
t1 ='BBBB'. t2 = 1. EXTRACT header.
t1 ='AAAA'. t2 = 3. EXTRACT header.
t1 ='AABB'. t2 = 1. EXTRACT header.

SORT BY t1 t2.

LOOP.

  AT FIRST.
    WRITE 'Start of LOOP'.
    ULINE.
  ENDAT.

  AT NEW t1.
    WRITE / '   New T1:'.
  ENDAT.

  AT NEW t2.
    WRITE / '   New T2:'.
  ENDAT.

  WRITE: /14 t1, t2.

  AT END OF t2.
    WRITE / 'End of T2'.
  ENDAT.

  AT END OF t1.
    WRITE / 'End of T1'.
  ENDAT.

  AT LAST.
    ULINE.
  ENDAT.

ENDLOOP.

Es wird ein Beispielextrakt erstellt, der nur die Felder der Feldgruppe HEADER enthält. Nach der Sortierung treten die in der folgenden Abbildung angedeuteten Gruppenstufenwechsel im Extraktdatenbestand auf.

Diese Grafik wird im zugehörigen Text erklärt

In der LOOP-Schleife werden der Inhalt des Datenbestands und die erkannten Gruppenstufenwechsel wie folgt ausgegeben:

Diese Grafik wird im zugehörigen Text erklärt

 

 

 

Ende des Inhaltsbereichs