value # und corresponding # in einer Zeile beim füllen von internen Tabellen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge Seite 1 von 1
5 Beiträge Seite 1 von 1

value # und corresponding # in einer Zeile beim füllen von internen Tabellen

Beitrag von Romaniac (Specialist / 109 / 23 / 16 ) » 10. Nov 2019 10:35

Hallo zusammen,

ich will eine Itab type TVARV mit den Select Options aus meinem Programm füllen und diese einer Methode übergeben ( die Datentypen der jeweiligen Selopts sind jetzt mal egal).

Es werden aber immer 2 neue Zeilen erstellt weil jede Klammerebene bei Value #( (1) (2) (n) ) einen neuen Eintrag erstellt. Sobald ich Klammern weglasse bekomme ich Syntaxfehler. Mit einem strukturierten Datenfeld funktioniert es zwar, das muss doch mit Tabellen auch gehen?

S_BUKRS ist Selopt von BUKRS.

Code: Alles auswählen.

  LOOP AT s_bukrs ASSIGNING FIELD-SYMBOL(<lws_bukrs>).
    lt_tvarv = VALUE #( BASE lt_tvarv ( name = 'TR_BUKRS' ) ( CORRESPONDING #( <lws_bukrs> MAPPING opti = option ) ) ).
  ENDLOOP.
TVARV.jpg
Danke und Gruß,

Wolfgang
Geht nicht gibts nicht


Re: value # und corresponding # in einer Zeile beim füllen von internen Tabellen

Beitrag von a-dead-trousers (Top Expert / 3286 / 90 / 838 ) » 10. Nov 2019 18:12

Ich würds so machen:

Code: Alles auswählen.

  LOOP AT s_bukrs ASSIGNING FIELD-SYMBOL(<lws_bukrs>).
    APPEND CORRESPONDING #( <lws_bukrs> MAPPING opti = option ) TO lt_tvarv ASSIGNING FIELD-SYMBOL(<lws_tvarv>).
    <lws_tvarv>-name = 'TR_BUKRS'.
  ENDLOOP.

Ist nur eine Zeile mehr und IMHO etwas besser lesbar.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Romaniac (10. Nov 2019 19:38)

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: value # und corresponding # in einer Zeile beim füllen von internen Tabellen

Beitrag von ewx (Top Expert / 4074 / 178 / 402 ) » 11. Nov 2019 12:37

Noch besser lesbar finde ich:

Code: Alles auswählen.

APPEND LINES OF
  VALUE tvarv_t(
    FOR bukrs IN s_bukrs[]
      ( name  = 'BUKRS'
        opti  = bukrs-option
        sign  = bukrs-sign
        low   = bukrs-low
        high  = bukrs-high ) )
  TO lt_tvarv.

Re: value # und corresponding # in einer Zeile beim füllen von internen Tabellen

Beitrag von ewx (Top Expert / 4074 / 178 / 402 ) » 11. Nov 2019 16:58

und mit CORRESPONDING:

Code: Alles auswählen.

APPEND LINES OF VALUE tvarv_t(
    FOR bukrs IN s_bukrs[]
    ( VALUE #( BASE CORRESPONDING #( bukrs MAPPING opti = option ) name = 'BUKRS' ) ) )
TO lt_tvarv.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
a-dead-trousers (11. Nov 2019 19:03)


Re: value # und corresponding # in einer Zeile beim füllen von internen Tabellen

Beitrag von DeathAndPain (Top Expert / 1171 / 132 / 254 ) » 11. Nov 2019 18:05

Vor allem dürfte ein APPEND auch wesentlich performanter sein, als wenn bei jeder einzelnen Einfügung der gesamte Tabellenrumpf neu aufgebaut wird wie in Romaniacs ursprünglichem Ansatz.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Romaniac (12. Nov 2019 12:16)


Seite 1 von 1

Aktuelle Forenbeiträge

SAPscript-Textelement mit Bild ausgeben
vor 2 Stunden von Der Formulator 1 / 8
Generische Objekte in der Massenverarbeitung
vor 4 Stunden von TravellingEntwickler 1 / 16
SELECT + LOOP: Geschwindigkeit?
vor 4 Stunden von DeathAndPain 35 / 529
Virtuelles System anlegen
vor 5 Stunden von ichse18577 1 / 18
SAPScrip leere Seite muss mitgedruckt werden gelöst
vor 6 Stunden von TravellingEntwickler 11 / 436

Unbeantwortete Forenbeiträge

SAPscript-Textelement mit Bild ausgeben
vor 2 Stunden von Der Formulator 1 / 8
Generische Objekte in der Massenverarbeitung
vor 4 Stunden von TravellingEntwickler 1 / 16
Virtuelles System anlegen
vor 5 Stunden von ichse18577 1 / 18
SNC Port Fehler
vor 9 Stunden von tekko 1 / 31
Status Kundenauftrag erledigt bei auftragsbezogener Faktura
vor 3 Tagen von SAP_ENTWICKLER 1 / 55