CORRESPONDING

Jeder kennt den Befehl MOVE-CORRESPONDING um alle Felder der einen Struktur in die entsprechenden Felder einer anderen Struktur zu kopieren oder SELECT … INTO CORRESPONDING FIELDS um einen Datenbank-Select in die gleichnamigen Felder der internen Tabelle oder Struktur einzulesen.

Mit Netweaver Release 7.40 ist ein neuer CORRESPONDING dazu gekommen. Ausnahmsweise eine Spracherweiterung, die wirklich eindeutig und auf Anhieb zu verstehen ist:

itab_ziel = CORRESPONDING #( itab_quelle MAPPING ziel_feld = quell_feld ).

Eine wirklich schöne und elegante Erweiterung des ABAP Sprachschatzes.

Genauere und weitere Informationen findet ihr hier: ABAP News for Release 7.40 SP05

Codebeispiel

TYPES: BEGIN OF ty_mat,
         matnr TYPE matnr,
         werks TYPE werks_d,
         lgort TYPE lgort_d,
         menge TYPE p DECIMALS 2,
       END OF ty_mat.

DATA gt_mat TYPE STANDARD TABLE OF ty_mat.
DATA gt_mard TYPE STANDARD TABLE OF mard.


START-OF-SELECTION.
  SELECT * FROM mard INTO TABLE gt_mard UP TO 20 ROWS.

  gt_mat = CORRESPONDING #( gt_mard MAPPING menge = labst ).

CORRESPONDING mit separater Wertzuweisung

Bei der Verwendung von CORRESPONDING kann man Werte gleicher Feldnamen zuweisen. Mit dem Zusatz MAPPING können Ausnahmen definiert werden.

TYPES:
  BEGIN OF ts_1,
    matnr TYPE matnr,
    mng   TYPE i,
    flag  TYPE abap_bool,
  END OF ts_1,
  BEGIN OF ts_2,
    matnr TYPE matnr,
    menge TYPE i,
  END OF ts_2.

DATA dst TYPE ts_1.
DATA src TYPE ts_2.

src-matnr = 'ABCD'.
src-menge = 100.

dst = CORRESPONDING #( src MAPPING mng = menge ).

Was macht man jedoch, wenn man der Zielstruktur noch einen Wert zuweisen möchte, der nicht in der Quellstruktur vorkommt?

Hierfür kann man den Zusatz BASE nutzen:

dst = VALUE #( BASE CORRESPONDING #( src MAPPING mng = menge ) flag = 'X' ).

Dies kann natürlich auch mit cond verbunden werden:

dst = VALUE #( BASE CORRESPONDING #(
        src MAPPING mng = menge )
        flag = COND #( 
                WHEN src-menge > 0 THEN 'H' 
                WHEN src-menge < 0 THEN 'S' 
                ELSE 'X' )  ).
Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)

COMMENTS

  • <cite class="fn">ralfwenzel</cite>

    Msn darf #CORRESPONDING nur auf gar keinen Fall mit MOVE-CORRESPONDING verwechseln. Habe ich kürzlich noch bei jemandem erlebt, der meinte, die beiden Anweisungen machten das gleiche. Dem ist nicht so.

    • <cite class="fn">matthias</cite>

      Die Benutzung des Befehls CORRESPONDING ist sehr ausführlich unter http://help.sap.com/abapdocu_740/de/index.htm?file=abapmove-corresponding.htm erklärt.

      Hier wird auch das Pendant zu MOVE-CORROSPONDING erläutert, bei dem das Wort BASE entscheidend ist:

      Eine Zuweisung von Strukturen

      struct2 = CORRESPONDING #( BASE ( struct2 ) struct1 ).

      ist das Gleiche wie eine Zuweisung

      MOVE-CORRESPONDING struct1 TO struct2.

      Eine Zuweisung von internen Tabellen

      itab2 = CORRESPONDING #( BASE ( itab2 ) itab1 ).

      ist das Gleiche wie eine Zuweisung

      MOVE-CORRESPONDING itab1 TO itab2 KEEPING TARGET LINES.

Comments are closed.