Code: Alles auswählen.
Loop at lt_deliv_numb into ls_deliv_numb.
refresh lt_goodsmvt_final.
Loop at lt_goodsmvt_item into ls_goodsmvt_item where VBELN = ls_deliv_numb-vbeln.
append ls_goodsmvt_item to lt_goodsmvt_final.
endloop.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE' ...
endloop. "Loop at lt_deliv_numb into ls_deliv_numb.
Code: Alles auswählen.
SORT it_itab2 BY feld1.
LOOP AT it_itab1 ASSIGNING <ls_itab1>.
READ TABLE it_itab2 TRANSPORTING NO FIELDS BINARY SEARCH
WITH KEY feld1 = <ls_itab1>-feld1.
IF sy-subrc EQ 0.
LOOP AT it_itab2 ASSIGNING <ls_itab2> FROM sy-tabix.
IF <ls_itab2>-feld1 NE <ls_itab1>-feld1.
EXIT.
ENDIF.
* Verarbeitung der gefundenen Einträge
ENDLOOP.
ENDIF.
ENDLOOP.
Code: Alles auswählen.
SORT lt_goodsmvt_item BY deliv_numb ASCENDING.
LOOP AT lt_goodsmvt_item INTO ls_goodsmvt_final.
APPEND ls_goodsmvt_final TO lt_goodsmvt_final.
AT END OF deliv_numb.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'.
CLEAR lt_goodsmvt_final.
ENDAT.
ENDLOOP.
Ups, ein wichtiger Hinweis. Denn DELIV_NUMB ist das 107. Feld von 126 in der Struktur BAPI2017_GM_ITEM_CREATE. D.h. - wenn ich Deinen Einwand richtig verstehe - dass sich nur eines der 106 anderen Feld links von DELIV_NUMB sich ändern muss, damit die AT-Verarbeitung einsetzt.a-dead-trousers hat geschrieben:Etwas, das die Hilfe mitunter verschweigt, weswegen ich AT END bzw. AT NEW auch nicht einsetze:
Alle Felder die in der Struktur LINKS von dem Feld das mit AT geprüft wird, werden implizit ebenfalls geprüft. d.h. Wenn sich da was ändert, aber das eigentlich Feld nicht, wird trotzdem die AT NEW Verarbeitung aufgerufen.
Das steht schon in der Hilfe: " Die Gruppenwechsel finden statt, wenn sich der Inhalt der Komponente compi oder einer Komponente links von compi ändert.", aber wer liest die heutzutage schon noch daher ist der Hinweis durchaus gut hier.a-dead-trousers hat geschrieben:Etwas, das die Hilfe mitunter verschweigt, weswegen ich AT END bzw. AT NEW auch nicht einsetze:
Alle Felder die in der Struktur LINKS von dem Feld das mit AT geprüft wird, werden implizit ebenfalls geprüft. d.h. Wenn sich da was ändert, aber das eigentlich Feld nicht, wird trotzdem die AT NEW Verarbeitung aufgerufen.
Man kann die AT-Verarbeitung mit Hilfsvariablen selber gestallten:Murdock hat geschrieben:Ich habe deswegen mal eine komplette zweite Struktur erstellt, in der ich das entsprechende Feld ganz vorne hatte und immer schön umgeschaufelt...
Code: Alles auswählen.
DATA: merker TYPE vbeln.
CLEAR merker.
SORT lt_goodsmvt_item BY deliv_numb ASCENDING.
LOOP AT lt_goodsmvt_item INTO ls_goodsmvt_item.
IF merker <> ls_goodsmvt_item-deliv_numb.
IF merker IS NOT INITIAL. "nicht beim erstenmal
PERFORM bapi_call USING lt_goodsmvt_final.
CLEAR lt_goodsmvt_final.
ENDIF.
merker = ls_goodsmvt_item-deliv_numb. "Lieferung merken
ENDIF.
APPEND ls_goodsmvt_item to lt_goodsmvt_final.
ENDLOOP.
* Die letzte Lieferung wurde nicht in der Schleife angelegt, deshalb hier nach hohlen
IF sy-subrc = 0. "nur wenn es einen Schleifendurchlauf gab
PERFORM bapi_call USING lt_goodsmvt_final.
ENDIF.
Vielleicht hast Du ja nur die falsche SAP Hilfe?a-dead-trousers hat geschrieben:Etwas, das die Hilfe mitunter verschweigt, weswegen ich AT END bzw. AT NEW auch nicht einsetze:
Alle Felder die in der Struktur LINKS von dem Feld das mit AT geprüft wird, werden implizit ebenfalls geprüft. d.h. Wenn sich da was ändert, aber das eigentlich Feld nicht, wird trotzdem die AT NEW Verarbeitung aufgerufen.
Code: Alles auswählen.
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<flight>).
members = VALUE #( BASE members ( <flight> ) ).
ENDLOOP.
Danke. "Standardgruppenwechselprogrammierung" ist mir aber durchaus bekannt . Ich weiß auch nicht mehr genau, warum ich das mit dem AT machen wollte / musste, aber an die zweite extra Struktur erinnere ich mich...JHM hat geschrieben:Man kann die AT-Verarbeitung mit Hilfsvariablen selber gestallten:Murdock hat geschrieben:Ich habe deswegen mal eine komplette zweite Struktur erstellt, in der ich das entsprechende Feld ganz vorne hatte und immer schön umgeschaufelt...
Ok... Stimmt das steht bei mir auchUnit605 hat geschrieben:Vielleicht hast Du ja nur die falsche SAP Hilfe?
In meiner Hilfe steht folgendes:
Gruppenstufen werden durch Anfang bzw. Ende einer Gruppe von Zeilen mit dem gleichen Inhalt in der Komponenten compi (mit i = 1, 2, ...) und in den Komponenten links von compi definiert. Die Gruppenwechsel finden statt, wenn sich der Inhalt der Komponente compi oder einer Komponente links von compi ändert.