neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo ABAP-Freunde,

ich melde mich wieder zurück in der ABAP Welt. Hat sich einiges getan.
Aktuell sitze ich an einer kleinen Herausforderung, welche ich gerne mit den neuesten Mitteln von ABAP gelöst bekommen würde.

Was habe ich: (Ausgangstabelle)
eine gefüllte int. Tabelle mit 4 Spalten.

Was brauche ich: (Zieltabelle)
eine gefüllte int. Tabelle mit 5 Spalten.


Die int. Tabellen sind im Grunde identisch, nur das bei der Zieltabelle eine weitere Spalte angehängt sein soll, in der in jeder Zeile die '1' stehen soll.

Das erzeugen der Zieltabelle mit der neuen Spalte ist kein Problem.

Code: Alles auswählen.

    lr_table_ext ?= cl_abap_tabledescr=>describe_by_data( it_data ).
    lr_struct_ext ?= lr_table_ext->get_table_line_type( ).

    DATA(lt_table_ext) = lr_struct_ext->get_components( ).

    " new col added to table
    APPEND INITIAL LINE TO lt_table_ext ASSIGNING FIELD-SYMBOL(<fs_table_ext>).
    TRANSLATE lv_attr_nm  TO UPPER CASE.
    <fs_table_ext>-name = lv_attr_nm.
    <fs_table_ext>-type = iv_attr_type.

    DATA(lr_struct_new) = cl_abap_structdescr=>create( lt_table_ext ).
    DATA(lr_table_new) = cl_abap_tabledescr=>create( lr_struct_new ).

    CREATE DATA rr_return TYPE HANDLE lr_table_new.
Geht das evtl. noch schneller?

Das füllen der Zieltabelle mit den Werten der Ausgangstabelle

Code: Alles auswählen.

<lt_dbtab_ext> = CORRESPONDING #( BASE ( <lt_dbtab_ext> ) it_data  ).
Kann man bei dem CORRESPONDING nicht irgendwie auch noch ein Feldmapping mitgeben?

Habe es aktuell so gelöst , dass ich mit einem LOOP über die Zieltabelle loope und dort die neue Spalte ASSIGNe und dann den Wert setze. (ziemlich oldschool oder? )

Was ich noch sagen muss...die Strukturen der int. Tabellen sind unbekannt... nur die neue Spalte ist namentlich bekannt..aber die int. Tabelle hat zum Zeitpunkt der Entwicklung keine DDIC Struktur.

Thx schonmal

Grüße
Markus

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


Re: neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von DeathAndPain (Top Expert / 1947 / 257 / 413 ) »
Geht das evtl. noch schneller?
Bisschen optimieren geht immer. 😁

Code: Alles auswählen.

    " new col added to table
    APPEND VALUE #( name = TO_UPPER( lv_attr_nm )
                    type = iv_attr_type ) TO lt_table_ext.
Kann man bei dem CORRESPONDING nicht irgendwie auch noch ein Feldmapping mitgeben?
Ja, kann man, wie auch in der Onlinehilfe steht. Aber Du kannst nur andersnamige Spalten der Quelltabelle ummappen und leider keine Konstanten reinmappen. Daher wird Dein oldschool-Ansatz zum Füllen der zusätzlichen Spalte leider alternativlos sein. Habe mich auch schon in Situationen befunden, in denen ich mir das anders gewünscht hätte.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
MarkusW


Re: neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
DeathAndPain hat geschrieben:
04.01.2024 17:12
Bisschen optimieren geht immer. 😁

Code: Alles auswählen.

    " new col added to table
    APPEND VALUE #( name = TO_UPPER( lv_attr_nm )
                    type = iv_attr_type ) TO lt_table_ext.
Thx.
Das ist schonmal ne ganz schicke Lösung ;) die Schreibweise.

Ok, dachte mir schon, da die Oldschool Lösung noch up-to-date ist ...

Re: neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von rob_abc (Specialist / 107 / 27 / 44 ) »
Ich nutze modify, wenn ich alle Werte einer Spalte auf den gleichen Wert setzen möchte:

Code: Alles auswählen.

MODIFY itab FROM VALUE #( spalte = 1 ) TRANSPORTING spalte WHERE spalte = ''.

Folgende Benutzer bedankten sich beim Autor rob_abc für den Beitrag (Insgesamt 3):
ewxDeathAndPainMarkusW


Re: neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
rob_abc hat geschrieben:
05.01.2024 09:16
Ich nutze modify, wenn ich alle Werte einer Spalte auf den gleichen Wert setzen möchte:

Code: Alles auswählen.

MODIFY itab FROM VALUE #( spalte = 1 ) TRANSPORTING spalte WHERE spalte = ''.
Danke Dir Rob,
dass funktioniert aber nur, wenn die Struktur der itab bekannt ist, ansonsten weiß der VALUE nicht welcher Typ '#' er hat.
In meinem Fall leider nicht nutzbar :(

Re: neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von DeathAndPain (Top Expert / 1947 / 257 / 413 ) »
Auch von mir Dank an Rob; diese Syntaxvariante des MODIFY-Befehls war mir noch gar nicht bekannt. Die leistet ja genau das Benötigte.
MarkusW hat geschrieben:dass funktioniert aber nur, wenn die Struktur der itab bekannt ist, ansonsten weiß der VALUE nicht welcher Typ '#' er hat
Dieses Problem halte ich für lösbar, indem Du das machst, was man bei dynamischer Typgenerierung ohnehin alle Naselang machen muss: ein dynamisch erzeugtes Hilfsfeld verwenden.

Ich schreib das jetzt mal aus dem Kopf runter, wie ich mir das vorstelle (unter Nutzung der von Dir definierten Felder), ohne es jetzt auch tatsächlich auszuprobieren:

Code: Alles auswählen.

DATA where_string TYPE string.
FIELD-SYMBOLS <new_table> TYPE ANY TABLE.

* Hier steht Dein Code aus Deinem Originalpost bis einschließlich der Definition von rr_return
ASSIGN rr_return->* TO <new_table>.

CREATE DATA hilfsfeld LIKE LINE OF <new_table>.
ASSIGN hilfsfeld->* TO FIELD-SYMBOL(<hilfsfeld>).

ASSIGN COMPONENT lv_attr_nm OF STRUCTURE <hilfsfeld> TO FIELD-SYMBOL(<neue_spalte_des_hilfsfelds>).
<neue_spalte_des_hilfsfelds> = '1'.

where_string = lv_attr_nm && ` = ''`.
MODIFY <new_table> FROM <hilfsfeld> TRANSPORTING (lv_attr_nm) WHERE (where_string).
Kann gut sein, dass in Obenstehendem noch ein Fehlerchen drin ist, aber ich denke, die Idee wird klar, und ich wette, dass man das zum Laufen bekommen kann.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag (Insgesamt 2):
ewxMarkusW


Re: neues Attribute einer int. Tabelle hinzufügen und mit Festwert vorbelegen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
DeathAndPain hat geschrieben:
06.01.2024 16:43
Auch von mir Dank an Rob; diese Syntaxvariante des MODIFY-Befehls war mir noch gar nicht bekannt. Die leistet ja genau das Benötigte.
MarkusW hat geschrieben:dass funktioniert aber nur, wenn die Struktur der itab bekannt ist, ansonsten weiß der VALUE nicht welcher Typ '#' er hat
Dieses Problem halte ich für lösbar, indem Du das machst, was man bei dynamischer Typgenerierung ohnehin alle Naselang machen muss: ein dynamisch erzeugtes Hilfsfeld verwenden.

Ich schreib das jetzt mal aus dem Kopf runter, wie ich mir das vorstelle (unter Nutzung der von Dir definierten Felder), ohne es jetzt auch tatsächlich auszuprobieren:

Code: Alles auswählen.

DATA where_string TYPE string.
FIELD-SYMBOLS <new_table> TYPE ANY TABLE.

* Hier steht Dein Code aus Deinem Originalpost bis einschließlich der Definition von rr_return
ASSIGN rr_return->* TO <new_table>.

CREATE DATA hilfsfeld LIKE LINE OF <new_table>.
ASSIGN hilfsfeld->* TO FIELD-SYMBOL(<hilfsfeld>).

ASSIGN COMPONENT lv_attr_nm OF STRUCTURE <hilfsfeld> TO FIELD-SYMBOL(<neue_spalte_des_hilfsfelds>).
<neue_spalte_des_hilfsfelds> = '1'.

where_string = lv_attr_nm && ` = ''`.
MODIFY <new_table> FROM <hilfsfeld> TRANSPORTING (lv_attr_nm) WHERE (where_string).
Kann gut sein, dass in Obenstehendem noch ein Fehlerchen drin ist, aber ich denke, die Idee wird klar, und ich wette, dass man das zum Laufen bekommen kann.
Hi DeathandPain,

genau richtig...hätte ich selbst drauf kommen müssen.
Danke Dir sehr!!
Dein Coding ist korrekt :D
Habe jetzt genau was ich wollte, super.

Seite 1 von 1

Vergleichbare Themen

9
Antw.
1053
Views
4
Antw.
1336
Views
CORRESPONDING mit Festwert
von ralf.wenzel » 21.07.2021 21:33 • Verfasst in ABAP® Core
0
Antw.
1563
Views
Festwert im ALV-Grid auflösen
von Hansi4u » 10.01.2006 20:54 • Verfasst in Dialogprogrammierung
2
Antw.
657
Views
Fußzeile hinzufügen interne Tabelle
von L0w-RiDer » 09.05.2019 16:08 • Verfasst in ABAP® für Anfänger
1
Antw.
726
Views
Spalte in interner Tabelle hinzufügen
von Gekomo » 04.10.2022 11:56 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 39 Minuten von DeathAndPain 14 / 10735
Dialog-Container mit Toolbar/Status
vor 50 Minuten von DeathAndPain gelöst 24 / 3852
User Exit EXIT_RQCPRM10_001
vor 20 Stunden von a-dead-trousers 2 / 341
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1392

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.

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 39 Minuten von DeathAndPain 14 / 10735
Dialog-Container mit Toolbar/Status
vor 50 Minuten von DeathAndPain gelöst 24 / 3852
User Exit EXIT_RQCPRM10_001
vor 20 Stunden von a-dead-trousers 2 / 341
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1392

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2924
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9517