ABAP Tipp - Loop mit Gruppen
Manchmal möchte man gewisse Gruppen einer ermittelten Menge an Daten abarbeiten. Mit dem heutigen Befehl wollen wir dir eine einfach Methode aus dem Standard zeigen.
Inhaltsverzeichnis
Wenn die ermittelten Daten aus der Datenbank strukturiert in Gruppen abgearbeitet werden sollen, gibt es verschiedene Wege dies zu tun. Einmal könnte man mit einer zweiten Tabelle arbeiten, die man soweit verdichtet auf die Kombinationen die man abdecken möchte. Oder man nimmt sich den von SAP vorgesehenen Weg und arbeitet über Gruppen, die man in einem Loop einfach verarbeiten kann.
Was man dabei beachten sollte und wie die jeweilige Variante funktioniert, werden wir dir heute kurz schildern und an ein paar Beispielen vorstellen.
Freie Verarbeitung
Bei einer freien Verarbeitung nach eigenen Methoden, gibt es sicherlich etliche Varianten, wie man mit den Daten umgehen kann und wie man sich selbst Gruppen bilden kann. Wir wollen dir an dieser Stelle eine unserer Methoden vorstellen.
Im ersten Schritt bauen wir uns eine neue Tabelle aus den Daten auf, die wir entsprechend nach den Gruppen sortieren und verdichten. In unserem Beispiel nehmen wir die Buchungskreise, die wir nach Währung und Land sortieren, dann die doppelten Einträge auf dieser Basis entfernen.
" Bildung der Gruppe
DATA(lt_group) = lt_t001.
SORT lt_group BY waers land1.
DELETE ADJACENT DUPLICATES FROM lt_group COMPARING waers land1.
Dann kannst du auch schon mit der Verarbeitung starten. Wir arbeiten die Daten pro Gruppe ab, dafür kann in der äußeren Schleife noch eine gewisse Vor- und Nacharbeit durchgeführt werden. In der inneren Schleife kann mit den Daten gearbeitet werden.
LOOP AT lt_group ASSIGNING FIELD-SYMBOL(<ls_group>).
" ... vor der Verarbeitung
LOOP AT lt_t001 ASSIGNING FIELD-SYMBOL(<ls_t001>)
WHERE waers = <ls_group>-waers AND land1 = <ls_group>-land1.
" Verarbeitung
ENDLOOP.
" ... nach der Verarbeitung
ENDLOOP.
Verarbeitung mit Gruppen
Bei der Verarbeitung mit Gruppen kommt reiner SAP-Standard zum Zuge. Die Arbeitsweise ähnelt stark der unseres Beispiels, du sparst dir allerdings die zweite Tabelle. Dafür musst du aber auch die abgebildete Logik verstehen.
LOOP AT lt_bukrs ASSIGNING FIELD-SYMBOL(<ls_bukrs>)
GROUP BY ( waers = <ls_bukrs>-waers land1 = <ls_bukrs>-land1 )
ASSIGNING FIELD-SYMBOL(<ls_group>).
" ... vor der Verarbeitung
LOOP AT GROUP <ls_group> ASSIGNING FIELD-SYMBOL(<ls_t001>).
" Verarbeitung
ENDLOOP.
" ... nach der Verarbeitung
ENDLOOP.
Im ersten Loop wird die Gruppe mit den Elementen gebildet und einem neuen Feldsymbol für die Gruppe zugewiesen. Dieses neue Feldsymbol enthält nur die Felder der Gruppe. Der zweite Loop ist die Schleife über die Gruppe. Mit dem Zusatz AT GROUP wird die Gruppe angesprochen und die Daten dem neuen Feldsymbol mit allen Daten zugewiesen.
Fazit
Die Verarbeitung über Gruppen kann man über den ein oder anderen Weg realisieren. Der Standard Weg über die Gruppierung ist etwas schwerer zu lesen, erfüllt aber voll und ganz seinen Zweck. Der freie Weg scheint im ersten Schritt einfacher zu sein, man muss alerdings die Daten doppelt halten und etwas mehr Rechenleistung beim Ablauf einplanen. Welcher Weg für dich der Beste ist, solltest du selbst herausfinden.
Quelle:
SAP Dokumentation AT GROUP