Einführung in MOVE CORRESPONDING

Es war ein typischer Montagmorgen im SAP-Entwicklungsbüro. Lisa, eine erfahrene ABAP-Entwicklerin, saß mit einem Kaffee in der Hand vor ihrem Bildschirm und kämpfte mit einer komplexen Datenstruktur. Sie musste Daten aus einer tief verschachtelten internen Tabelle in eine andere kopieren, ohne bestehende Werte zu überschreiben.

„Da muss es doch eine einfachere Lösung geben“, murmelte sie, als ihr Kollege Tom ihr eine Dokumentation zu ABAP 7.56 zeigte. „Schau dir mal MOVE-CORRESPONDING mit EXPANDING NESTED TABLES und KEEPING TARGET LINES an!“

Plötzlich wurde es klar: Diese neuen Features könnten ihr eine Menge Arbeit ersparen. EXPANDING NESTED TABLES würde ihr ermöglichen, verschachtelte Tabellen automatisch zu kopieren, und KEEPING TARGET LINES sorgte dafür, dass bereits vorhandene Daten unberührt blieben.

Mit neuem Elan machte sich Lisa an den Code – und siehe da: Die Datenübertragung funktionierte jetzt sauber und effizient. Diese Neuerung war nicht nur eine Erleichterung für sie, sondern für das gesamte Team, das fortan weniger Zeit mit manuellen Datenmanipulationen verbringen musste.

In diesem Blogpost erklären wir die neuen Features ausführlich anhand von Beispielen mit den SFLIGHT-Tabellen. Zudem vergleichen wir die neue Funktionalität mit älteren ABAP-Versionen und erläutern, wie sie in der Praxis genutzt werden kann.

Die CloudDNA GmbH ist spezialisiert auf SAP-Entwicklung und -Integration und hilft Unternehmen, moderne ABAP-Funktionen effizient zu nutzen. Unsere Experten setzen gezielt moderne ABAP-Techniken ein, um performante und nachhaltige Lösungen für SAP-Systeme zu entwickeln.

MOVE-CORRESPONDING in älteren ABAP-Versionen

Bis ABAP 7.55 erlaubte MOVE-CORRESPONDING lediglich das Kopieren von Feldern mit gleichem Namen zwischen Strukturen oder Tabellen, ohne die Möglichkeit, verschachtelte Tabellen direkt zu berücksichtigen. Dies führte dazu, dass Entwickler oft zusätzliche Schleifen oder Hilfstabellen benötigten, um komplexe Strukturen korrekt zu übertragen. Ein typisches Problem bestand darin, dass verschachtelte Tabellen nicht automatisch erfasst wurden, sodass manuelle Zwischenschritte erforderlich waren, um die Daten korrekt von einer Tabelle in eine andere zu überführen.

Ein klassisches Beispiel ist das Übertragen von Daten aus der SFLIGHT-Tabelle in eine komplexere Struktur, in der die Flugverbindungen nach Airline und Verbindung gruppiert werden. Ohne die neuen Features von ABAP 7.56 musste man zunächst alle Datensätze in eine Zwischentabelle laden, dann mittels Schleifen die Einträge den richtigen Gruppen zuordnen und schließlich die Zielstruktur manuell aufbauen. Dies war nicht nur fehleranfällig, sondern führte auch zu unnötig kompliziertem Code.

Durch die neuen Erweiterungen in ABAP 7.56 kann dieser Prozess nun mit einer einzigen Anweisung optimiert werden, sodass sowohl die Hauptfelder als auch verschachtelte Tabellen automatisch übertragen werden, ohne dass zusätzliche Logik erforderlich ist.

Beispiel für MOVE-CORRESPONDING in einer älteren ABAP-Version:

DATA: flightTableSource TYPE TABLE OF sflight,
      flightTableTarget TYPE TABLE OF sflight.

SELECT * FROM sflight INTO TABLE flightTableSource.

MOVE-CORRESPONDING flightTableSource TO flightTableTarget.

WRITE: 'Daten kopiert'.

In diesem Beispiel werden zwar alle gleichnamigen Felder übertragen, aber eine tiefere Strukturierung mit verschachtelten Tabellen bleibt unberücksichtigt.

Neuerungen in ABAP 7.56: EXPANDING NESTED TABLES & KEEPING TARGET LINES

Mit ABAP 7.56 bringt SAP zwei neue Erweiterungen:

EXPANDING NESTED TABLES

Diese Option ermöglicht das automatische Übertragen von verschachtelten Tabellen innerhalb einer Struktur. Dies bedeutet, dass wenn eine interne Tabelle innerhalb einer anderen Struktur oder Tabelle existiert, die MOVE-CORRESPONDING-Anweisung automatisch auch die enthaltenen Tabellen verarbeitet und kopiert. Dadurch entfällt die Notwendigkeit, manuell Schleifen zu programmieren, um verschachtelte Daten von einer Quellstruktur in eine Zielstruktur zu übernehmen. Besonders in Szenarien mit tief strukturierten Datenmodellen ist dies eine erhebliche Erleichterung, da es nicht nur die Lesbarkeit des Codes verbessert, sondern auch dessen Wartbarkeit und Effizienz steigert.

KEEPING TARGET LINES

Diese Option bewahrt bestehende Einträge in der Zieltabelle und ergänzt neue Werte nur, wenn sie nicht vorhanden sind. Dies ist besonders nützlich, wenn Daten aktualisiert oder ergänzt werden sollen, ohne bereits vorhandene Datensätze zu überschreiben. Dadurch wird sichergestellt, dass bestehende Zeilen mit relevanten Informationen erhalten bleiben, während nur neue oder zusätzliche Werte in die Tabelle aufgenommen werden. Dies kann in verschiedenen Geschäftsszenarien hilfreich sein, beispielsweise wenn eine bestehende Liste von Buchungen um neue Buchungseinträge erweitert werden soll, ohne dass vorhandene Buchungen verändert werden. Zudem trägt dieses Feature zu einer verbesserten Datenintegrität bei, da ungewollte Änderungen an vorhandenen Datensätzen verhindert werden.

Beispiel mit den SFLIGHT-Tabellen

Wir definieren eine verschachtelte Struktur basierend auf den SFLIGHT-Tabellen:

TYPES: BEGIN OF flightNestedStructure,
         airlineId TYPE sflight-carrid,
         connectionId TYPE sflight-connid,
         flightList TYPE TABLE OF sflight WITH EMPTY KEY,
       END OF flightNestedStructure.

DATA: flightTableSource TYPE TABLE OF flightNestedStructure,
      flightTableTarget TYPE TABLE OF flightNestedStructure,
      tempFlights TYPE TABLE OF sflight.

SELECT * FROM sflight INTO TABLE tempFlights.

LOOP AT tempFlights ASSIGNING FIELD-SYMBOL(<flight>).
  READ TABLE flightTableSource ASSIGNING FIELD-SYMBOL(<group>)
    WITH KEY airlineId = <flight>-carrid connectionId = <flight>-connid.
  IF sy-subrc <> 0.
    APPEND INITIAL LINE TO flightTableSource ASSIGNING <group>.
    <group>-airlineId = <flight>-carrid.
    <group>-connectionId = <flight>-connid.
  ENDIF.
  APPEND <flight> TO <group>-flightList.
ENDLOOP.

MOVE-CORRESPONDING flightTableSource TO flightTableTarget EXPANDING NESTED TABLES.

In diesem Beispiel werden alle Flugverbindungen nach carrid und connid gruppiert, und die zugehörigen Flüge in der eingebetteten flightList gespeichert. Danach wird MOVE-CORRESPONDING mit EXPANDING NESTED TABLES verwendet, um die verschachtelten Daten korrekt zu übertragen.

Kombination mit KEEPING TARGET LINES

MOVE-CORRESPONDING flightTableSource TO flightTableTarget 
    EXPANDING NESTED TABLES KEEPING TARGET LINES.

Hierbei bleiben bestehende Einträge in flightTableTarget erhalten, und nur neue Flugverbindungen werden ergänzt. Dies ist besonders nützlich, wenn bereits vorhandene Daten nicht überschrieben werden sollen.

Zusammenfassung

Mit MOVE-CORRESPONDING … EXPANDING NESTED TABLES KEEPING TARGET LINES in ABAP 7.56 wird die Arbeit mit komplexen Tabellenstrukturen erheblich vereinfacht. Entwickler können Daten effizienter übertragen, ohne umständliche Workarounds oder Schleifen zu schreiben.

Die CloudDNA GmbH hilft Unternehmen, das volle Potenzial moderner ABAP-Entwicklung zu nutzen. Kontaktieren Sie uns für maßgeschneiderte Lösungen in der SAP-Integration!