Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

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

Getting started ... Alles für einen gelungenen Start.
20 Beiträge • Vorherige Seite 2 von 2 (current)
20 Beiträge Vorherige Seite 2 von 2 (current)

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von hausi (ForumUser / 56 / 11 / 1 ) »
Akatash hat geschrieben:Hallo hausi,

ich geh mal von aus Du meinst die <>. Falls ja das kann ich Dir eklären das kommt nicht aus einer anderen Sprache sondern sind Feldsymbole in ABAP und das kommt daher, dasss ich zur Laufzeit eine dynamische Tabelle generiere, welche durch die Benutzereingaben des Anwenders definiert wird.
Danke :D :D Fieldsymbols sind mir durchaus geläufig ... ich meinte eigentlich die Klammern die weiter oben zum Einsatz kamen

Code: Alles auswählen.

 loop at <t_dyn_table> assigning <wa_dyn_table> where (('VBELN = wa_res-vbeln') AND ('LABNK = wa_res-LABNK')) 
oder

Code: Alles auswählen.

spaltenname = ( <ls_group_res>-zmonth ).
Aber mit der Lösung unserer beiden super Kollegen black_adept und ADT die ebenfalls kein Wochenende zu haben scheinen kommst du sicher ans Ziel :D :wink:

Grüße
die Hausi

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


Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von Akatash (ForumUser / 18 / 3 / 0 ) »
Ja ich war leicht verwirrt aber auch kein Wunder aktuell :D
Das mit den Klammern wusste ich auch nicht, den Rat hat mir black_adept gegeben und hat schon mal ein Problem für mich gelöst.
Jap naja mal schauen, die Lösung von ADT läuft ned auf dem System bei denen heute schon getestet ich hoffe mal er postet noch die downgegradede Version... aktuell teste ich die Variante von black_adept, mal sehen ob ich das damit gebacken bekomme, hab erst vor 4 Wochen meine Zerti in ABAP gemacht und dann ist sowas schon gerade ein wenig heftig das Ganze :shock:

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Nachdem der Wunsch für die "legacy" Variante besteht

Code: Alles auswählen.

sort gt_res by VBELN LABNK.
loop at gt_res assigning <ls_res>.
  AT NEW labnk.
    APPEND INITIAL LINE TO <t_dyn_table> ASSIGNING <wa_dyn_table>.
    
    ASSIGN COMPONENT 'VBELN' OF STRUCTURE <wa_dyn_table> TO <vbeln>.
    <vbeln> = <ls_res>-vbeln.
     
    ASSIGN COMPONENT 'LABNK' OF STRUCTURE <wa_dyn_table> TO <labnk>.
    <labnk> = <ls_res>-labnk.
  ENDAT. 

  spaltenname = ( <ls_res>-zmonth ).
  ASSIGN COMPONENT spaltenname OF STRUCTURE <wa_dyn_table> TO <w_field>.
  IF sy-subrc = 0.
    ADD <ls_res>-wmeng TO <w_field>.
  ENDIF.  
endloop.
Der AT Zusatz wertet das angegebene Feld und alle die links davon angeführt sind aus. Sprich dieser Code funktioniert nur wenn die Sortierung passt und links von VBELN und LABNK in der Struktur keine anderen Felder sind die unterschiedliche Werte haben. Sollten andere Felder gepüft werden oder "Löcher" berücksichtigt werden muss man die Gruppenbildung selbst bewerkstelligen.

Code: Alles auswählen.

data: ls_group like line of gt_res.
sort gt_res by VBELN LABNK.
clear ls_group.
loop at gt_res assigning <ls_res>.
  if ls_group-VBELN ne <ls_res>-vbeln or ls_group-labnk ne <ls_res>-LABNK.
    APPEND INITIAL LINE TO <t_dyn_table> ASSIGNING <wa_dyn_table>.
    
    ASSIGN COMPONENT 'VBELN' OF STRUCTURE <wa_dyn_table> TO <vbeln>.
    <vbeln> = <ls_res>-vbeln.
     
    ASSIGN COMPONENT 'LABNK' OF STRUCTURE <wa_dyn_table> TO <labnk>.
    <labnk> = <ls_res>-labnk.
* Felder für die Gruppenbildung merken
    ls_group-VBELN = <ls_res>-vbeln.
    ls_group-labnk = <ls_res>-LABNK.
  ENDIF. 

  spaltenname = ( <ls_res>-zmonth ).
  ASSIGN COMPONENT spaltenname OF STRUCTURE <wa_dyn_table> TO <w_field>.
  IF sy-subrc = 0.
    ADD <ls_res>-wmeng TO <w_field>.
  ENDIF.  
endloop.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Akatash

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.18
Basis: 7.50

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
Vielleicht noch eine Anmerkung zu a-d-ts Beispielcodings.
Diese sind auf das nötigste reduziert - insbesondere wird auf das Abfragen des SY-SUBRC nach dem ASSIGN verzichtet, was aber ok ist wenn man weiß, dass die entsprechenden Felder in der Struktur vorhanden sein müssen.
Aber gerade in dem Fall, dass man um das Vorhandensein von Feldern weiß und am Besten auch noch um deren Typisierung kann man mit MOVE-CORRESPONDING den selben Effekt erzielen.
Nachteil - Laufzeit dürfte etwas länger sein als bei der ASSIGN-Version.
Vorteil: Bessere Lesbarkeit und da man in diesem Fall mit typisierten Variablen arbeitet hilft einem der Syntaxchecker diverse Probleme zu erkennen die bei der ASSIGN-Version erst zur Laufzeit bemerkt werden. Außerdem ist es leichter erweiterbar, wenn man weitere Felder versorgen/prüfen möchte.
Die Vorgehensweise für den Austausch von ASSIGN durch MOVE-CORRESPONDING ist eigentlich immer der selber
  • Aufbau einer Variablen, die alle Felder enthält, von denen man weiß, dass sie (möglicherweise) in der Struktur vorkommen können - sauber typisiert und halt namensgleich
  • MOVE-CORRESPONDING dynamische Struktur TO Variable mit relevanten Feldern
  • Aktionen mit den relevanten Feldern
  • MOVE-CORRESPONDING Variable mit relevanten Feldern TO dynamische Struktur
Ich schreibe mal das Coding von A-D-T in der alternativen Version auf um zu demonstrieren wie der Unterschied ist.

Code: Alles auswählen.

    
data: begin of relevant_fields, " Struktur mit bekannten Feldern
       labnk type  labnk,
       vbeln type vbeln,
        end of relevant_fields.
sort gt_res by VBELN LABNK.
    loop at gt_res assigning <ls_res>.
      AT NEW labnk.
        APPEND INITIAL LINE TO <t_dyn_table> ASSIGNING <wa_dyn_table>.
* von hier wirds anders
        MOVE-CORRESPONDING <ls_res> to relevant_fields.
        MOVE-CORRESPONDING relevant_fields to <wa_dyn_table>
* bis hier
      ENDAT.

      spaltenname = ( <ls_res>-zmonth ).
      ASSIGN COMPONENT spaltenname OF STRUCTURE <wa_dyn_table> TO <w_field>.
      IF sy-subrc = 0.
        ADD <ls_res>-wmeng TO <w_field>.
      ENDIF.  
    endloop.


Behalte aber immer im Hinterkopf: "Besser" ist keine der beiden Alternativen - was man einsetzt hängt am Ende immer vom speziellen Fall und persönlichen Präferenzen ab

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Akatash

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von Akatash (ForumUser / 18 / 3 / 0 ) »
Danke euch beiden für die Mühe, funktioniert nun so wie es soll und ich bin mir ziemlich sicher, das ich bald mal wieder ne Frage habe, aber nun weiß ich ja, dass einem hier geholfen wird :D

Vergleichbare Themen

0
Antw.
1010
Views
3
Antw.
5129
Views
Alle Spalten durchlaufen und Wert zuweisen
von simethandreas » 12.10.2009 09:35 • Verfasst in ABAP® für Anfänger
3
Antw.
7278
Views
Feldsymbole einer dynamischen Struktur zuweisen
von Margolwes » 25.06.2009 14:33 • Verfasst in ABAP® Core
5
Antw.
1785
Views
Datenbank Wert zuweisen
von Schäfer_anfänger » 26.01.2017 11:27 • Verfasst in ABAP® für Anfänger
2
Antw.
6486
Views
Feldname in Variable - Wert zuweisen
von MarkusW » 13.12.2007 15:38 • Verfasst in ABAP® Core

Ü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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 584
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2213
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8809