Ich bräuchte mal eine elegante Lösung für MOVE-CORRESPONDING EXCLUDING

Getting started ... Alles für einen gelungenen Start.
6 Beiträge Seite 1 von 1
6 Beiträge Seite 1 von 1

Ich bräuchte mal eine elegante Lösung für MOVE-CORRESPONDING EXCLUDING

Beitrag von DeathAndPain (Top Expert / 1070 / 123 / 234 ) » 23. Mai 2019 13:27

Hallo zusammen,

folgender Codeausschnitt:

Code: Alles auswählen.

  LOOP AT ABWESENHEITEN ASSIGNING FIELD-SYMBOL(<ABWESENHEITEN>).
*   Feldsymbol <M> auf Tabellenzeile mit Personalnummer aus aktueller Abwesenheit setzen.
*   Sofern diese Tabellenzeile noch nicht existiert, wird sie bei dieser Gelegenheit angelegt.
    ASSIGN M[ PERNR = <ABWESENHEITEN>-PERNR ] TO FIELD-SYMBOL(<M>).
    IF SY-SUBRC <> 0.
      INSERT VALUE #( PERNR = <ABWESENHEITEN>-PERNR ) INTO TABLE M.
      ASSIGN M[ PERNR = <ABWESENHEITEN>-PERNR ] TO <M>.
      ASSIGN MITARBEITER_DATA[ PERNR = <M>-PERNR ] TO FIELD-SYMBOL(<MITARBEITER_DATA>).
      IF SY-SUBRC = 0.
        MOVE-CORRESPONDING <MITARBEITER_DATA> TO <M>.
      ENDIF.
    ENDIF.

    APPEND <ABWESENHEITEN> TO <M>-ABWESENHEITEN.
  ENDLOOP.
Obenstehender Code dumpt leider in der Zeile mit dem MOVE-CORRESPONDING. Wie im Code erkennbar zeigt <M> auf eine Zeile der internen Tabelle M, und das ist eine sortierte Tabelle mit UNIQUE KEY PERNR. Obgleich oben im Code klar erkennbar ist, dass <MITARBEITER_DATA>-PERNR und <M>-PERNR gleich sein müssen (denn darüber wird das Feldsymbol <MITARBEITER_DATA> ja zugewiesen), dumpt er mir beim MOVE-CORRESPONDING weg mit der Begründung, ich würde in der Zieltabelle ein Schlüsselfeld überschreiben, was nicht zulässig ist, da Schlüsselfelder nur lesend angesprochen werden dürfen.

Was ich an dieser Stelle also bräuchte (um nicht alle relevanten Komponenten einzeln aufzählen zu müssen), wäre so etwas wie:

Code: Alles auswählen.

MOVE-CORRESPONDING <MITARBEITER_DATA> TO <M> EXCLUDING PERNR.
Diese Syntax gibt es aber leider nicht. Fälle jemandem eine elegante Lösung für dieses Problem ein?



Re: Ich bräuchte mal eine elegante Lösung für MOVE-CORRESPONDING EXCLUDING

Beitrag von DeathAndPain (Top Expert / 1070 / 123 / 234 ) » 23. Mai 2019 14:59

Das haut aber nicht hin, weil ich solch 7.40-Operator ja nur im Rahmen einer Komplettzuweisung nutzen kann. Bei

Code: Alles auswählen.

<M> = CORRESPONDING #( <MITARBEITER_DATA> EXCEPT PERNR ).
würde er die Spalte PERNR initial machen und dadurch in diesem Falle sogar tatsächlich versuchen, die Schlüsselspalte der Tabelle mit einem anderen Wert zu überschreiben!

Re: Ich bräuchte mal eine elegante Lösung für MOVE-CORRESPONDING EXCLUDING

Beitrag von black_adept (Top Expert / 3261 / 54 / 576 ) » 23. Mai 2019 15:45

Coding umstellen. Erst eine Struktur füllen und dann komplett via INSERT einfügen weil du beim Befüllen der Struktur noch ein Move-Corresponding machen kannst.
P.S. Die folgenden Codeschnipsel machen das Selbe.

Code: Alles auswählen.

INSERT VALUE #( PERNR = <ABWESENHEITEN>-PERNR ) INTO TABLE M.
      ASSIGN M[ PERNR = <ABWESENHEITEN>-PERNR ] TO <M>.

Code: Alles auswählen.

INSERT VALUE #( PERNR = <ABWESENHEITEN>-PERNR ) INTO TABLE M ASSIGNING <M>.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain (24. Mai 2019 18:31)

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Ich bräuchte mal eine elegante Lösung für MOVE-CORRESPONDING EXCLUDING

Beitrag von ewx (Top Expert / 4002 / 166 / 378 ) » 23. Mai 2019 16:56

Du kannst auch den Datenteil separat als ALIAS definieren:

Code: Alles auswählen.

TYPES: BEGIN OF ts_data,
         a TYPE i,
         b TYPE i,
         c TYPE i,
       END OF ts_data,
       BEGIN OF ts_struc,
         k TYPE n LENGTH 1.
    INCLUDE TYPE ts_data AS data.
TYPES: END OF ts_struc,
tt_table TYPE SORTED TABLE OF ts_struc WITH UNIQUE KEY k.
DATA data TYPE tt_table.
DATA new TYPE ts_struc.

INSERT VALUE #( k = '1' a = 1 b = 1 c = 1 ) INTO TABLE data.

new-k = '1'.
new-a = 2.
new-b = 2.
new-c = 2.

READ TABLE data ASSIGNING FIELD-SYMBOL(<data>) INDEX 1.
IF sy-subrc = 0.
  MOVE-CORRESPONDING new TO <data>-data.
ENDIF.
Ist halt insofern nicht schön, weil man dafür die Strukturdefinition ändern muss, auf die man evtl. gar keinen Zugriff hat.
Löst aber das Problem.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
DeathAndPain (24. Mai 2019 18:40)


Re: Ich bräuchte mal eine elegante Lösung für MOVE-CORRESPONDING EXCLUDING

Beitrag von DeathAndPain (Top Expert / 1070 / 123 / 234 ) » 24. Mai 2019 18:44

Pfiffig ist es auf jeden Fall, danke.
black_adept hat geschrieben:Coding umstellen. Erst eine Struktur füllen und dann komplett via INSERT einfügen weil du beim Befüllen der Struktur noch ein Move-Corresponding machen kannst.
In diesem Fall könnte ich das machen, da die Zeile ohnehin neu eingefügt werden soll. Aber dann bräuchte ich halt wieder eine Workareastruktur zum Aufbau der Tabellenzeile und wäre damit letztlich wieder auf Pre-7.40-Codingniveau. Das hätte ich mir gerne erspart.

Aber dass der INSERT-Befehl den Zusatz ASSIGNING unterstützt, war mir nicht bekannt. Das ist auf jeden Fall klasse, vielen Dank!

Seite 1 von 1


Aktuelle Forenbeiträge

Knobelaufgabe zum Wochenende / Wochenbeginn
vor 12 Stunden von a-dead-trousers 6 / 174
HTTP Request
vor 12 Stunden von a-dead-trousers 2 / 18
BSP-Seiten als Dienst - Fehler beim Aufrufen
vor 20 Stunden von Xilukarim 1 / 27
MATNR Feldlängenänderung von 18 auf 40
vor 23 Stunden von SAP_ENTWICKLER 4 / 149
CCS Bonusabrechnung
vor 23 Stunden von SAP_ENTWICKLER 1 / 18

Aktuelle Forenbeiträge

Knobelaufgabe zum Wochenende / Wochenbeginn
vor 12 Stunden von a-dead-trousers 6 / 174
HTTP Request
vor 12 Stunden von a-dead-trousers 2 / 18
BSP-Seiten als Dienst - Fehler beim Aufrufen
vor 20 Stunden von Xilukarim 1 / 27
MATNR Feldlängenänderung von 18 auf 40
vor 23 Stunden von SAP_ENTWICKLER 4 / 149
CCS Bonusabrechnung
vor 23 Stunden von SAP_ENTWICKLER 1 / 18

Unbeantwortete Forenbeiträge

BSP-Seiten als Dienst - Fehler beim Aufrufen
vor 20 Stunden von Xilukarim 1 / 27
CCS Bonusabrechnung
vor 23 Stunden von SAP_ENTWICKLER 1 / 18
Verfügbarkeitsprüfung
Gestern von NoraP 1 / 18
Verwaltung
Gestern von NoraP 1 / 15
At Selection-Screen
Gestern von L0w-RiDer 1 / 42