Append mehrer Zeilen mit VALUE # Thema ist als GELÖST markiert

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

Append mehrer Zeilen mit VALUE #

Beitrag von Romaniac (Specialist / 124 / 33 / 22 ) » 09.01.2018 18:14
Hallo zusammen,

baue gerade eine Batchmappe auf und da ist der Befehl Value # ja sehr praktisch. Nur ist mir eben aufgefallen dass die Tabelle jedesmal überschrieben wird, ich will die Zeilen aber abhängig von Bedingungen füllen:

Code: Alles auswählen.

    LOOP AT me->t_agreements ASSIGNING FIELD-SYMBOL(<lw_agreements>).

* Neuer Vertrag
      AT NEW waers.
        me->t_bdc = VALUE #( ( program = 'SAPMM06E' dynpro = '0200' dynbegin = abap_true )
                             ( fnam = 'EKKO-LIFNR'  fval = <lw_agreements>-lifnr )
                             ( fnam = 'RM06E-EVART' fval = <lw_agreements>-evart )
                             ( fnam = 'RM06E-VEDAT' fval = sy-datum )
                             ( fnam = 'EKKO-EKORG'  fval = <lw_agreements>-ekorg )
                             ( fnam = 'EKKO-EKGRP'  fval = <lw_agreements>-ekgrp )
                             ( fnam = 'BDC_OKCODE'  fval = '/00' )

                             ( program = 'SAPMM06E' dynpro = '0201' dynbegin = abap_true )
                             ( fnam = 'EKKO-KDATB'  fval = sy-datum )
                             ( fnam = 'EKKO-KDATE'  fval = <lw_agreements>-kdate )
                             ( fnam = 'EKKO-WAERS'  fval = <lw_agreements>-waers )
                             ( fnam = 'EKKO-ZTERM'  fval = <lw_agreements>-zterm )
                             ( fnam = 'EKKO-IHREZ'  fval = <lw_agreements>-ihrez )
                             ( fnam = 'BDC_OKCODE'  fval = '/00' ) ).
      ENDAT.

* alle Positionen
      ADD 1 TO ln_index.

      me->t_bdc = VALUE #(  ( program = 'SAPMM06E' dynpro = '0220' dynbegin = abap_true )
                            ( fnam = 'EKPO-EMATN(' && ln_index && ')' fval = <lw_agreements>-ematn )
                            ( fnam = 'EKPO-IDNLF(' && ln_index && ')' fval = <lw_agreements>-idnlf )
                            ( fnam = 'EKPO-KTMNG(' && ln_index && ')' fval = <lw_agreements>-ktmng )
                            ( fnam = 'EKPO-ETFZ1(' && ln_index && ')' fval = <lw_agreements>-etfz1 )
                            ( fnam = 'EKPO-ETFZ2(' && ln_index && ')' fval = <lw_agreements>-etfz2 )
                            ( fnam = 'EKPO-ABUEB(' && ln_index && ')' fval = <lw_agreements>-abueb )
                            ( fnam = 'EKPO-WERKS(' && ln_index && ')' fval = <lw_agreements>-werks )
                            ( fnam = 'EKPO-NETPR(' && ln_index && ')' fval = <lw_agreements>-netpr ) ).
Ich bräuchte sowas wie:

Code: Alles auswählen.

       APPEND VALUE #(  ( program = 'SAPMM06E' dynpro = '0220' dynbegin = abap_true )
                        ( fnam = 'BDC_OKCODE'  fval = '=NP' ) ) to  me->t_bdc.
das geht aber nur mit einer Zeile.

Hat da jemand einen Tipp?

Danke,

Gruß Wolfgang
Geht nicht gibts nicht


Re: Append mehrer Zeilen mit VALUE #

Beitrag von Romaniac (Specialist / 124 / 33 / 22 ) » 09.01.2018 18:34
Hab es gefunden, mit <BASE itab> als erstes Argument funktioniert es: ( hier gefunden https://blogs.sap.com/2014/09/29/abap-n ... pressions/ )

Code: Alles auswählen.

      me->t_bdc = VALUE #( BASE me->t_bdc
                          ( program = 'SAPMM06E' dynpro = '0220' dynbegin = abap_true )
                          ( fnam = 'EKPO-EMATN(' && ln_index && ')' fval = <lw_agreements>-ematn )
                          ( fnam = 'EKPO-IDNLF(' && ln_index && ')' fval = <lw_agreements>-idnlf )
                          ( fnam = 'EKPO-KTMNG(' && ln_index && ')' fval = <lw_agreements>-ktmng )

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

Geht nicht gibts nicht

Re: Append mehrer Zeilen mit VALUE #

Beitrag von ewx (Top Expert / 4261 / 201 / 454 ) » 09.01.2018 19:36
Oder so:

Code: Alles auswählen.

TYPES: BEGIN OF ty_test,
         eins TYPE c LENGTH 1,
         zwei TYPE c LENGTH 2,
         drei TYPE c LENGTH 3,
       END OF ty_test,
       ty_test_t TYPE STANDARD TABLE OF ty_test WITH DEFAULT KEY.
DATA lt_test TYPE ty_test_t.

APPEND LINES OF VALUE ty_test_t( ( eins = 'A' zwei = 'a' )
                                 ( eins = 'a' drei = 'c' ) ) TO lt_test.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Thomas R.


Re: Append mehrer Zeilen mit VALUE #

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 16.01.2018 12:19
Ohne es getestet zu haben, würde ich aber vermuten, dass die Version mit BASE ein Stück performanter ist, denn die APPEND LINES OF-Version baut erst aus einzeln spezifizierten Zeilen per VALUE # eine temporäre interne Tabelle auf, zerlegt diese dann per LINES OF wieder in ihre einzelnen Zeilen, um diese dann an die Zieltabelle anzufügen, wohingegen man dem System bei der BASE-Variante direkt sagt, dass er die einzeln spezifizierten Zeilen ohne Umweg über eine namenlose temporäre Tabelle an die Zieltabelle anfügen soll.

Wieviel das ausmacht, wäre zu testen.

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Hakk (ForumUser / 5 / 0 / 0 ) » 03.09.2020 19:09
Hi wieso machst du es nicht mit der Lösung?

manuell mit Feldsymbolen (~30% langsamer als die beiden vorherigen Varianten)

LOOP AT itab1 ASSIGNING FIELD-SYMBOL(<wa_1>).
APPEND INITIAL LINE TO itab2 ASSIGNING FIELD-SYMBOL(<wa_2>).

******* und hier deine Logik zur Befüllung...

MOVE-CORRESPONDING <wa_1> TO <wa_2>.
ENDLOOP.

Re: Append mehrer Zeilen mit VALUE #

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 04.09.2020 14:18
Warum sollte man sich für eine Lösung entscheiden, von der Du selber sagst, dass sie 30% langsamer ist? Schlechter zu lesen wäre sie meiner Meinung nach obendrein.

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Hakk (ForumUser / 5 / 0 / 0 ) » 10.09.2020 19:22
Also es ist 30 % langsamer als wenn du tab1 = tab2 machst. Und nichts für ungut, wenn du den Lösungsansatz nicht verstehst dann frag doch nicht in die Foren rein. Und sogar wenn es 200 % langsamer wäre, ich denke nicht dass irgend jemanden dich Programme schreiben lässt, bei denen es darauf ankommt ob diese eine Millisekunde langsamer sind...

Re: Append mehrer Zeilen mit VALUE #

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 11.09.2020 08:52
Was bringt Dich zu der Vermutung, dass ich den Lösungsansatz nicht verstehe? Hier wurde eine Lösung geboten, und dann kamst Du mit einer kosmetisch schlechteren Lösung, die obendrein weniger performant ist. Das hat mich zu der Frage bewegt, wozu Du diese auf der ganzen Linie unterlegene Lösung noch geboten hast.

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Hakk (ForumUser / 5 / 0 / 0 ) » 14.09.2020 08:56
Wieso ist die Lösung langsamer? Hast du es getestet? Es ist 30 % langsamer als die Anweisung tab1 = tab2. Oh man mach du ruhig dein Batch-Input, sagt schon einiges...

Re: Append mehrer Zeilen mit VALUE #

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 14.09.2020 12:37
Ich mache Batch Input?!?

Ich bin dann mal hier raus; das ist mir zu blöd...

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Romaniac (Specialist / 124 / 33 / 22 ) » 25.09.2020 15:33
Hakk hat geschrieben:
14.09.2020 08:56
Wieso ist die Lösung langsamer? Hast du es getestet? Es ist 30 % langsamer als die Anweisung tab1 = tab2. Oh man mach du ruhig dein Batch-Input, sagt schon einiges...
Erst ALLES lesen, dann denken, dann schreiben...
Geht nicht gibts nicht

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Hakk (ForumUser / 5 / 0 / 0 ) » 29.09.2020 18:50
Für was machst du deine Batch-Mappe wenn nicht für einen Batch-Input?

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Romaniac (Specialist / 124 / 33 / 22 ) » 29.09.2020 18:54
Hakk hat geschrieben:
29.09.2020 18:50
Für was machst du deine Batch-Mappe wenn nicht für einen Batch-Input?
Hast Du es noch immer nicht geschnallt? DeathAndPain hat nur auf einen Beitrag geantwortet in dem von einem Batch Input gesprochen wurde, der aber garnicht das Thema war.

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

Geht nicht gibts nicht

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Hakk (ForumUser / 5 / 0 / 0 ) » 29.09.2020 20:33
Ah ok, aber meine Lösung hat er trotzdem nicht richtig zugeordnet oder? Ist ja dann doch performant. Dann machst du ja denn Batch Input oder nicht?

Re: Append mehrer Zeilen mit VALUE #

Beitrag von Romaniac (Specialist / 124 / 33 / 22 ) » 29.09.2020 20:43
Hakk hat geschrieben:
10.09.2020 19:22
Also es ist 30 % langsamer als wenn du tab1 = tab2 machst. Und nichts für ungut, wenn du den Lösungsansatz nicht verstehst dann frag doch nicht in die Foren rein. Und sogar wenn es 200 % langsamer wäre, ich denke nicht dass irgend jemanden dich Programme schreiben lässt, bei denen es darauf ankommt ob diese eine Millisekunde langsamer sind...
Sorry, Du schlägst eine Lösung mit LOOP vor wo es wesentlich eleganter mit VALUE geht und schreibst noch selbst dass es 30% langsamer ist, wirfst dann aber den anderen vor dass sie einen simplen LOOP mit Feldsymbolzuweisung nicht verstehen??? Und im gleichen Atemzug wirfst ihm den Batch Input vor die Füße der gar nicht von ihm stammt?

Es geht bei Deinen Antworten auch garnicht um den fachlichen Inhalt an sich sondern um die Art und Weise wie Du die Leute angehst weil Sie Deine Lösung diskutieren! Das passiert hier meist sehr sachlich und vor allem fundiert und wenn damit nicht klar kommst (oder es nicht verstehst) dann such Dir ein anderes Forum zum stänkern!

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

Geht nicht gibts nicht

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Mehrer Schlüsselfelder
von Lemmy » 10.04.2003 15:58
Mehrer Änhänge per Mail verschicken
von godevilgo » 28.04.2006 15:08
Selektion mehrer Excel-Sheets
von Ludo » 20.01.2005 14:50
Vergleich mehrer Variablen auf gleichen Wert
von donossi » 27.09.2012 17:58
Mehrer Selects in eine Tabelle bringen
von burggartenkind » 25.07.2019 13:44