Code: Alles auswählen.
LOOP AT SCREEN.
screen-input = 1.
ENDLOOP.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZTEST6
*&---------------------------------------------------------------------*
REPORT ZTEST6.
TYPES: BEGIN OF BELEG,
MATNR TYPE MARA-MATNR,
VBELN TYPE VBRK-VBELN,
FKART TYPE VBRK-FKART,
FKDAT TYPE VBRK-FKDAT,
RFBSK TYPE VBRK-RFBSK,
END OF BELEG.
DATA: BELEG1 TYPE BELEG,
BELEG2 TYPE BELEG.
DO 5 TIMES. " weil der Strukturtyp BELEG fünf Felder hat. Bei dynamisch definierten Strukturen wäre das ggf. mit Hilfe der Klasse CL_ABAP_TYPEDESCR zu ermitteln - oder auch, wenn Du sicherstellen möchtest, dass Dein Programm nach Änderungen an der Struktur immer noch funktioniert.
IF SY-INDEX <> 1. " denn die erste Spalte der Struktur ist die MATNR, die Du nicht übertragen möchtest
ASSIGN COMPONENT SY-INDEX OF STRUCTURE BELEG1 TO FIELD-SYMBOL(<SPALTE_AUS_BELEG1>).
ASSIGN COMPONENT SY-INDEX OF STRUCTURE BELEG2 TO FIELD-SYMBOL(<SPALTE_AUS_BELEG2>).
<SPALTE_AUS_BELEG2> = <SPALTE_AUS_BELEG1>.
ENDIF.
ENDDO.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
abapnewbie
Code: Alles auswählen.
DATA(matnr_merker) = beleg1-matnr.
MOVE-CORRESPONDING beleg2 TO beleg1.
beleg1-matnr = matnr_merker.
Vielen Dank für deine Lösung mit ASSIGN COMPONENT. War letztendlich in der Umsetzung ziemlich ähnlich. Ich musste das ganze mit einer ZTABELLE machen, da die ganzen Funktionsbausteine um Varianten anzulegen nur bei Selection-Screens funktionieren und bei Dynpros zu Dumps führen. Aus diesem Grund war es eine Notlösung. Der Grund warum ich das dynamisch machen wollte (was jetzt durch ASSIGN COMPONENT perfekt funktioniert) war, dass man ansonsten wenn später mal Felder erweitert werden dem Programmierer bewusst sein sollte, dass er die ZTabelle ebenfalls mit dem Feld erweitern muss. So sind sie durch .INCLUDE immer in der ZTabelle und können nicht vergessen werden.DeathAndPain hat geschrieben: ↑22.01.2020 13:34Oder einfach vor dem MOVE-CORRESPONDING die Feldwerte merken, die nicht übergebügelt werden sollen:
Die Lösung von ewx ist sicherlich noch eleganter. Mein Problem war nur, dass ich nicht wirklich verstanden habe, was Du da mit dem Dynpro machst und inwiefern eine Z-Tabelle Varianten ersetzen kann, deshalb habe ich mich auf den ASSIGN COMPONENT kapriziert.Code: Alles auswählen.
DATA(matnr_merker) = beleg1-matnr. MOVE-CORRESPONDING beleg2 TO beleg1. beleg1-matnr = matnr_merker.
Auch ein SELECTION-SCREEN ist ein Dynpro. Ich vermute, dass Du in Wahrheit "Report" vs "Modulpool" meinst. Wobei man natürlich auch einen Modulpool technisch als Report deklarieren kann (und trotzdem über eine selbst definierte Transaktion einspringen kann wie bei einem echten Modulpool). Dadurch hättest Du dann die Möglichkeit, mit CALL SELECTION-SCREEN an beliebiger Stelle in Deinem Programm ein echtes Selektionsbild aufzurufen und bräuchtest nicht das Rad von vorne erfinden, indem Du mit Z-Tabelle händisch nachprogrammierst, was der Standard längst kann.Ich musste das ganze mit einer ZTABELLE machen, da die ganzen Funktionsbausteine um Varianten anzulegen nur bei Selection-Screens funktionieren und bei Dynpros zu Dumps führen.