Bestimmte Felder dynamisch in eine zweite Struktur überführen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Bestimmte Felder dynamisch in eine zweite Struktur überführen

Beitrag von abapnewbie (ForumUser / 25 / 12 / 0 ) »
Hallo,

als Anfänger stehe ich momentan vor einem Problem. Ich würde gerne kurz die Anforderung erklären die ich erfüllen möchte. Grundsätzlich soll in einem Dynpro-Programm die Möglichkeit erzeugt werden, dass User Varianten speichern und abrufen können. Da es kein Selection-Screen gibt haben mir die meisten Funktionsbausteine hierfür nicht geholfen, sodass wir uns entschieden haben das ganze über eine ZTabelle zu lösen.

Das ganze klappt soweit auch wunderbar, die Varianten und ihre Werte werden in der ZTabelle abgespeichert und richtig aufgerufen. Das Problem entsteht allerdings jetzt:

Es gibt einige Felder die lediglich als Output-Felder funktionieren. Eine davon ist beispielsweise die Materialnummer. Je nach Auswahl im vorherigen Selection-Screen wird diese nämlich eine andere sein. Die Varianten sollen also diese Felder gar nicht speichern und nur die "hellen" also beschreibbaren Felder speichern und beschreiben.

Bis jetzt war meine Herangehensweise so, dass ich die Struktur der Dynpro-Felder übernommen habe und durch ein paar zusätzliche Felder die ich für die Variante brauche geschmückt habe (ZTabelle). So konnte ich also mit Move-Corressponding ziemlich leicht die interne Tabelle der Dynpro-Felder überschreiben. Das ganze wird jetzt allerdings nicht mehr funktionieren, da ja die nicht beschreibbare Materialnummer dadurch trotzdem ersetzt wird.

Mir wurde vorgeschlagen über die Dynpro-Felder zu Loopen und mit Assign Component zu arbeiten. Allerdings verstehe ich die funktionsweise von Assign Component nicht genau und hoffe, dass jemand mein Problem verstanden hat und es mir genauer erklären könnte.


Mit:

Code: Alles auswählen.

 LOOP AT SCREEN.

screen-input = 1.

ENDLOOP.
Lande ich im Debugger meistens auf die richtigen Felder. Mein Gedanke wäre jetzt, dass ich über den Loop alle passenden Felder in eine Struktur überführe und dann die ZTabelle wie gewohnt modifiziere. Allerdings bräuchte ich dann beim abrufen der "Variante" wieder eine Möglichkeit um die leeren Felder zu überspringen, sodass mir die Felder nicht durch Initialwerte überschrieben werden.

Kann mir hier jemand weiterhelfen?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Bestimmte Felder dynamisch in eine zweite Struktur überführen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Democode sagt oft mehr als die meisten Worte. Hier ein kleines Beispielprogramm, das Dir veranschaulichen sollte, wie Du Dein Problem mit ASSIGN COMPONENT lösen kannst.

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


Re: Bestimmte Felder dynamisch in eine zweite Struktur überführen

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Wieso löschst du die MATNR dann nicht aus der Z-Tabelle wieder?
Der Umweg mit dem Auslesen der Dynprofelder und dynamischen Assign ist IMHO für den Fall unnötig kompliziert.

Du kannst eine Dynpro-Struktur mit Includes anlegen.
1. Include: Z-Tabelle
2. Include: Text- und sonstige Felder

Wenn du das erste Include benennst (Spalte "Gruppe" in SE11), dann kannst du sogar ohne MOVE-CORRESPONDING arbeiten, sondern direkt auf diesen Datenteil zugreifen.
Wenn deine Struktur bspw. ZDYNPRO heißt und du das Include der ZTAB mit "GRP" benannt hast, kannst du eine direkte Zuweisung machen:
ZTAB = ZDYNPRO-GRP

Re: Bestimmte Felder dynamisch in eine zweite Struktur überführen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Oder einfach vor dem MOVE-CORRESPONDING die Feldwerte merken, die nicht übergebügelt werden sollen:

Code: Alles auswählen.

DATA(matnr_merker) = beleg1-matnr.
MOVE-CORRESPONDING beleg2 TO beleg1.
beleg1-matnr = matnr_merker.
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.

Re: Bestimmte Felder dynamisch in eine zweite Struktur überführen

Beitrag von abapnewbie (ForumUser / 25 / 12 / 0 ) »
DeathAndPain hat geschrieben:
22.01.2020 13:34
Oder einfach vor dem MOVE-CORRESPONDING die Feldwerte merken, die nicht übergebügelt werden sollen:

Code: Alles auswählen.

DATA(matnr_merker) = beleg1-matnr.
MOVE-CORRESPONDING beleg2 TO beleg1.
beleg1-matnr = matnr_merker.
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.
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.

Re: Bestimmte Felder dynamisch in eine zweite Struktur überführen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Da muss man die Begrifflichkeiten glattziehen.
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.
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 denke, dass das der bessere Weg gewesen wäre. Aber Glückwunsch, dass Deine Eigenbaulösung auch funktioniert.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
2935
Views
alv grid bestimmte felder anzeigen
von kostonstyle » 18.08.2008 13:53 • Verfasst in ABAP® für Anfänger
2
Antw.
4350
Views
Nur bestimmte Felder im IDOC übertragen? Geht das?
von niermaj » 05.07.2007 12:36 • Verfasst in ABAP® Core
3
Antw.
1167
Views
Parameters Anweisung nur bestimmte Felder anzeigen
von BMWi801 » 27.02.2018 09:04 • Verfasst in ABAP® für Anfänger
3
Antw.
527
Views
Felder in der Benutzerpflege dürfen nur bestimmte Personen pflegen
von kaim77 » 12.05.2019 16:57 • Verfasst in ABAP® für Anfänger
1
Antw.
255
Views

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.