ABAP Loop um Spalten einer Tabelle, Tabelle transponieren

Zahlreiche Tabellen in SAP bestehen aus sehr vielen, fast gleich lautenden Spalten. In Customizing Tabellen findet man oft eine Situation wie in folgendem Beispiel aus dem WM Umfeld vor.

Die Tabelle T334p enthält alle Lagerplatztypen, auf denen in einem bestimmten Lager ein bestimmter Lagereinheitentyp gelagert werden kann.

In einem Programm sollen nun zu einem Datensatz alle Lagerplatztypen durchlaufen/verarbeitet werden. Hier wäre eine Schleife um die einzelnen Spalten hilfreich. Zwar gibt es im ABAP Sprachumfang keine passende Anweisung, ich möchte an dieser Stelle aber eine Lösung vorstellen, mit der solche Tabellen komfortabel verarbeitet werden können.

Beispiel des Inhaltes der Tabelle T334P
Beispiel des Inhaltes der Tabelle T334P

Die erlaubten Lagerplatztypen sind in den Spalten LPTY0 bis LPT30 enthalten.

Aufbau der Tabelle T334P
Aufbau der Tabelle T334P

Simple Lösung mit IF

Die auf den ersten Blick einfachste Lösung ist das Verwenden von einem großen IF Statement, in dem alle Spalten abgefragt werden. Dies könnte z.B. so aussehen

Dies ist natürlich eine praktikable, aber keine zufriedenstellende Lösung. Erst recht nicht, wenn noch mehr Spalten geprüft werden müssen. Wie wäre es statt dessen, die Tabelle in eine neue Tabelle zu transponieren?

Transponierte Tabellen

In diesem Beispiel wäre es sinnvoll, die Daten in eine Tabelle von dieser Struktur zu überführen:
- LGNUM
- LETYP
- LPTYP

Diese Tabelle kann dann mit einem einzigen READ TABLE gelesen werden um zu prüfen, ob die Kombination erlaubt ist.

Hier kommt die dynamische Zuweisung von Feldsymbolen ins Spiel. Mit ihnen kann eine einzelne Komponente einer Struktur (hier eines Datensatzes) als Referenz verwendet werden.

Zunächst habe ich eine Struktur für die Zieltabelle ty_t334p_advance erstellt und die notwendigen Variablen und Feldsymbole deklariert.

Nun erfolgt wie eben der Select auf die Customizing Tabelle

Da es insgesamt 30 Spalten sind (LPTY0 - LPT29) die verarbeitet werden sollen, gibt es eine DO Schleife, die bis 30 zählt. Bei jedem Durchgang wird eine Zählvariable um eins erhöht und mit ihr der Feldname für die dynamische Zuweisung erstellt

Nun erfolgt die dynamische Zuweisung der Strukturkomponente. Ist diese geglückt, wird eine neue Zeile in der Zielstruktur erstellt. Falls es nicht klappt oder die Spalte leer ist, wird die DO Schleife verlassen.

Nach dieser Vorarbeit kann leicht geprüft werden, ob ein bestimmter Wert bei dem vorgegebenen Schlüssel erlaubt ist. Beispielsweise ob im Lager mit der Nummer 101 die Lagereinheit vom Typ E60 auf dem Platztyp A1 abgestellt werden darf.

Quellcode

Zum Abschluss nochmal der gesamte Quellcode