Der Schlüsselbefehl LOOP AT im neuen ABAP mit GROUP BY
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Neues ABAP (ab Release 7.40).
Siehe Kategorie:Neues ABAP.
Ab ABAP-Release 7.40 SP8 gibt es den Zusatz GROUP BY bei einer Schleife über einer internen Tabelle.
Vergleich zum alten Befehl "AT NEW / AT END OF ... ENDAT"
Codingbeispiel für LOOP AT GROUP BY KEY
- Hier werden zunächst alle Flugverbindungen aus der Tabelle SFLIGHT ausgelesen.
- Die interne Tabelle wird dann nach der Kombination von Flugzeugtyp PLANETYPE und Anzahl Sitze SEATSMAX gruppiert, bzw. verdichtet.
- Das Ergebnis wird dann in einer WRITE-Liste und einer internen Tabelle LT_GRPDATEN ausgegeben.
- Die interne Tabelle LT_SFLIGHT muss vorher nicht nach den Felder PLANETYPE und SEATSMAX sortiert sein und sie müssen auch nicht links in der Tabelle stehen.
DATA: lt_sflight TYPE TABLE OF sflight. DATA lt_grpdaten TYPE TABLE OF sflight. SELECT * FROM sflight INTO TABLE lt_sflight. LOOP AT lt_sflight ASSIGNING FIELD-SYMBOL(<fs_gruppe>) GROUP BY ( key1 = <fs_gruppe>-planetype key2 = <fs_gruppe>-seatsmax ). append <fs_gruppe> to lt_grpdaten. ENDLOOP.
Codingbeispiel für LOOP AT itab GROUP BY mit Iteration über Gruppe (Variante FOR .. IN GROUP ..)
- Eine sehr mächtige Funktion ist es, wenn man über einen Gruppenwechsel einer internen Tabelle eine Iteration durchführen kann
- Hier sind in der internen Tabelle "LT_DELIVERIES_TO_UPDATE_UB" N Lieferungen mit den jeweiligen Positionen.
- Es erfolgt nun ein Gruppenwechsel über die Lieferungen und pro Lieferung erfolgt eine Iteration über die Positionen mit "FOR wa_gr_ub IN GROUP <wa_group_ub>".
- Es wird letztlich eine interne Tabelle "LT_POITEM" gefüllt mit den passenden Datensätzen für einen Funktionsbaustein "BAPI_PO_CREATE1" für eine Umlagerbestellung.
LOOP AT lt_deliveries_to_update_ub ASSIGNING FIELD-SYMBOL(<wa_ub>) GROUP BY ( vbeln = <wa_ub>-vbeln ) ASSIGNING FIELD-SYMBOL(<wa_group_ub>). "Gruppenwechsel über Lieferung lt_poitem = VALUE #( FOR wa_gr_ub IN GROUP <wa_group_ub> ( po_item = wa_gr_ub-posnr "Positionsnummer material = wa_gr_ub-matnr "Material plant = mv_zwerks "Ziel-Werk stge_loc = mv_zlgort "Ziel-Lagerort quantity = wa_gr_ub-lfimg "Liefermenge SUPPL_STLOC = '1099' "Abgebender Lagerort SHIPTYPE = 'DS' "Direct Shipping ) ). ENDLOOP.
Codingbeispiel für LOOP AT itab GROUP BY mit Iteration über Gruppe (Variante LOOP AT GROUP)
- Dieses Beispiel ist sehr ähnlich zum vorhergehenden Beispiel. Nur erfolgt die Iteration über "LOOP AT GROUP"
"Schleife über Lieferungen LOOP AT lt_afpo ASSIGNING FIELD-SYMBOL(<fs_afpo_afpo>) GROUP BY ( vbeln = <fs_afpo_afpo>-vbeln ) ASSIGNING FIELD-SYMBOL(<fs_afpo_lief>). ... * Schleife über Fertigungsaufträge zu einer Lieferung LOOP AT GROUP <fs_afpo_lief> ASSIGNING FIELD-SYMBOL(<fs_afpo>). "(<fs_afpo_lief_line>). ... ENDLOOP. ENDLOOP.
Tricktresor
- Enno hat wie so oft im Tricktresor auch hier einen hervorragenden Artikel geschrieben, der die Anwendung und Vorteile des Befehls "loop at .. group by" verdeutlicht und auch zeigt, dass der Befehl "at new ..", bzw. "at end .." veraltet ist.
- https://tricktresor.de/blog/loop-at-itab-group-by/
Web-Links
Literatur
- ABAP Objects: Das neue umfassende Handbuch zu Konzepten, Sprachelementen und Werkzeugen in ABAP OO, 2016, von Felix Roth, Kap. 8.5.4, S. 259 ff.