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 • Seite 1 von 2 (current) Nächste
20 Beiträge Seite 1 von 2 (current) Nächste

Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von Akatash (ForumUser / 18 / 3 / 0 ) »
Hallo zusammen!

Ich hänge nun schon 2 Tage an einem Problem welches einfach nicht in meinen Kopf will, aber vielleicht kann mir ja hier jemand helfen.
Also folgendes ich habe eine interne Tabelle mit der Struktur:
ZMONTH / VBELN / WMENG (kumuliert auf Monatsbasis)

und eine dynamische Tabelle die zur Laufzeit generiert wird je nachdem welchen Betrachtungszeitraum der Anwender eingibt im Selektionsbildschirm, nur um das zu verdeutlichen sagen wir mal 3 Monate Betrachtungszeitraum:
VBELN / 2016_11 / 2016_12 / 2017_1

In dem Feld ZMONTH der internen Tabelle stehen eben genau diese Spaltenbezeichner der dynamischen Tabelle, ich hab schon einiges versucht, aber leider ohne Erfolg. Was ich nun gerne machen würde ist, dass WMENG der richtigen Spalte der dynamischen Tabelle zugewiesen wird, so das ich je VBELN eine Art Lieferabrufhistorie habe die wie folgt aussehen sollte:
VBELN 2016_11 2016_12 2017_1
4711 5.000 6.000 7.500

Danke schonmal im Vorraus für eure Hilfe!

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


Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Lies die mal die Doku zum Befehl "ASSIGN... COMPONENT" durch. Das ist das was dir fehlt
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 ) »
Ja das mit ASSIGN COMPONENT hab ich schon getestet, aber wohl irgendwie falsch, denn er hat mir die VBELN richtig angefügt und dann die Menge in einer neuen Zeile und in die letzte Spalte nicht in die passende dazu. Evtl hast Du ja nen kleines Codeschnipsel wie das ungefähr aussehen müsste ? Wäre sehr nett...

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Pseudocode:

Code: Alles auswählen.

 2 Tabellen:  t_kum mit den kumulierten Werten, t_dyn mit den dynamischen spalten
loop at t_kum assigning <ls_kum>.
  tabelleneintrag in t_dyn zum Beleg finden und in Feldsymbol <ls_dyn> ablegen.  
  Wenn dieser noch nicht existiert einfügen und neuen Eintrag in <ls_dyn> ablegen.
  ASSIGN COMPONENT zmonth of structure <ls_dyn> to <lv_monatsspalte>.  
* Wenn das nicht klappt im Debugger schauen ob zmonth richtig gefüllt ist und es auch wirklich eine Spalte gibt, die genau so heißt.
  add  <ls_kum>-wmeng to <lv_monatsspalte>.
    
endloop.
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 ) »
Erstmal Danke für Deine schnelle Hilfe, aber wie finde ich die richtige Spalte der dynamischen Tabelle heraus an die ich dann anfügen muss, soviel ich weiß gibt es ja nicht sowas wie einen Spaltenindex in ABAP, weil rein theoretisch müsste das ja sowas sein :

Code: Alles auswählen.

If <wa_kum>-zmonth = <lv_spaltenname> 
 ASSIGN....WMENG
In <wa_kum>-zmonth steht ja sogesehen der Spaltenname der dynamischen Tabelle, ich weiß nur nicht wie ich den Vergleich des Inhalts von ZMonth mit jeder Spalte der dynamischen Tabelle mache, da von meiner Logik her ja ein Vergleich statt finden müsste und falls dieser erfolgreich ist soll <wa_kum>-wmeng in die Spalte der dynamischen Tabelle die zb: 2016_12 heisst eingetragen werden.

Also steh da ein wenig auf dem Schlauch noch immer, wäre nett wenn mir jemand sagen könnte wie ich die einzelnen Spalten der dynamischen Tabelle abfragen und ansprechen kann.

Code: Alles auswählen.

ASSIGN COMPONENT 'VBELN' OF STRUCTURE <wa_dyn_table> to <w_field>.
<w_field> = <wa_res>-vbeln.
also der Teil funktioniert innerhalb des Loops, aber danach weiß ich einfach nicht wie ich anhand von ZMONTH aus <wa_kum> die richtige Spalte finde....
Außerdem glaube hab ich ein weiteres Problem, denn WMENG ist ja vom Typ QUAN und die Spalten meiner dynamischen Tabelle sind logischerweise vom Typ C, da ich ja die Spaltennamen aus ARBDT zusammengebaut hatte, ich denke das wird mich dann noch vor ein weiteres Problem stellen oder mache ich mir da umsonst Sorgen ?

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Schau dir mal dieses "halbdynamische" Beispiel an. Die dyn. Tabelle habe ich hart definiert damit es dir einfacher wird es zu verstehen - aber die Verfahrensweise ist im volldynamischen Fall analog nur etwas schwerer lesbar, da dann auch auf weitere Felder dynamisch zugegriffen werden muss.
Aber zu Demozwecken sollte das hier ausreichen.

Code: Alles auswählen.

REPORT.



TYPES: BEGIN OF ts_kum,
         spmon TYPE spmon,
         vbeln TYPE vbeln,
         wmeng TYPE wmeng,
       END OF ts_kum,
       tt_kum TYPE STANDARD TABLE OF ts_kum WITH NON-UNIQUE DEFAULT KEY.

TYPES: BEGIN OF ts_dyn,
         vbeln        TYPE vbeln,
         wmeng_201611 TYPE wmeng,
         wmeng_201612 TYPE wmeng,
         wmeng_201701 TYPE wmeng,
       END OF ts_dyn,
       tt_dyn TYPE STANDARD TABLE OF ts_dyn WITH NON-UNIQUE DEFAULT KEY.

DATA: gt_kum TYPE tt_kum,
      gs_kum TYPE ts_kum,
      gt_dyn TYPE tt_dyn,
      gs_dyn like line of gt_dyn.

FIELD-SYMBOLS: <ls_dyn>   LIKE LINE OF gt_dyn,
               <lv_field> TYPE wmeng.


DEFINE build_testdata.
  gs_kum-spmon = &1.
  gs_kum-vbeln = &2.
  gs_kum-wmeng = &3.
  append gs_kum to gt_kum.
END-OF-DEFINITION.




END-OF-SELECTION.
* Testdaten -
  build_testdata: '201611' '0000011111' 10,
                  '201612' '0000011111' 20,
                  '201701' '0000011111' 40,
                  '201611' '0000022222' 50,
                  '201611' '0000022222' 60,  " 2. Eintrag mit selbem Schlüssel
                  '201612' '0000022222' 70,
                  '201611' '0000033333' 80,
                  '201611' '0000033333' 90,  " 2. Eintrag mit selbem Schlüssel
                  '201611' '0000033333' 100,
                  '201612' '0000033333' 110,
                  '201611' '0000044444' 120,
                  '201701' '0000044444' 130.

  LOOP AT gt_kum INTO gs_kum.
    LOOP AT gt_dyn ASSIGNING <ls_dyn> WHERE ('VBELN = gs_kum-vbeln').
      EXIT.
    ENDLOOP.
    if sy-subrc <> 0.
      clear gs_dyn.
      gs_dyn-vbeln = gs_kum-vbeln.
      append gs_dyn to gt_dyn ASSIGNING <ls_dyn>.
    endif.

    data: spaltenname type string.
    spaltenname = |WMENG_{ gs_kum-spmon }|.
    assign COMPONENT spaltenname of STRUCTURE <ls_dyn> to <lv_field>.
    if sy-subrc = 0.
      add gs_kum-wmeng to <lv_field>.
    endif.
  ENDLOOP.

  break-point.
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 DIr für die Mühe und ja ich hab das jetzt so ungefähr verstanden wie es funktioniert, aber muss das ja eh noch ein paarmal machen für Materialverbrauch usw, da werd ich dann noch besser durchsteigen. Mein Code sieht nun so aus:

Code: Alles auswählen.

  LOOP AT gt_res INTO wa_res.

    LOOP AT <t_dyn_table> ASSIGNING <wa_dyn_table> WHERE ('VBELN = wa_res-vbeln').
      EXIT.
    ENDLOOP.
    IF sy-subrc <> 0.
      CLEAR <wa_dyn_table>.
      <wa_dyn_table> = wa_res-vbeln.
      APPEND <wa_dyn_table> TO <t_dyn_table> ASSIGNING <wa_dyn_table>.
    ENDIF.

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


  ENDLOOP.
Also rein von der Logik her müsste das so stimmen, also zumindest kommt das richtige Ergebnis raus, wo ich mir gerade noch ein wenig Sorgen mache ist bei

Code: Alles auswählen.

     <wa_dyn_table> = wa_res-vbeln.
Konnte das nur so machen, da ja VBELN in beiden Tabellen die erste Spalte ist, weil wenn ich

Code: Alles auswählen.

<wa_dyn_table>-vbeln = wa_res-vbeln.
mache, dann sagt er mir "<wa_dyn_table> besitzt keine Struktur und deswegen auch keine Komponente VBELN"

Wenn Du da noch nen Tipp hast wie ich das komplett richtig machen kann, weil ich weiß das so wie es gerade ist unter Umständen krachen kann, wäre ich Dir dankbar, wenn nicht auch ok, dann wart ich mal auf mehr Testdaten und schau einfach mal was passiert. Auf jeden Fall vielen vielen Danke, wäre ich niemals von alleine darauf gekommen. Aber mir fällt gerade ein es gibt sowieso nur immer einen Lieferplan der historisch betrachtet wird und dann dem Verbrauch gegenübergestellt werden soll, also müsste das an sich so passen.

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
1. Möglichkeit mit Assign ( ist die wohl häufiger empfohlene )

Code: Alles auswählen.

FIELD-SYMBOLS: <vbeln> type vbeln_va.
Assign component 'VBELN' of structure <wa_dyn_table> to <vbeln>.
if sy-subrc = 0.
  <vbeln> = wa_res-vbeln.
endif.
2. Möglichkeit mit MOVE-CORRESPONDING ( das verwende ich üblicherweise, da hier der Syntaxcheck hilft diverse Schreibfehler direkt zu erkennen )

Code: Alles auswählen.

DATA: BEGIN OF ls_known_fields,
        vbeln type vbeln,
      END OF ls_known_fields.

ls_known_fields-vbeln = wa_res-vbeln.
MOVE-CORRESPONDING ls_known_fields TO <wa_dyn_table>. 

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 für die erneute Hilfe und die verspätete Rückmeldung, aber musste in der Zwischenzeit was anderes machen und nun hab ich leider noch eine neue Anforderung zu diesem Thema hierbekommen. Es funktioniert auch halbwegs nur die Zuordnung stimmt nicht, soll jetzt nämlich auch noch die Lieferabrufe bei der Ausgabe mit integrieren und somit hab ich das Problem das er mir nicht 5 Zeilen macht sondern 30 weil es sind nur 5 Lieferabrufe. Er fängt dann immer eine neue Zeile an und ich glaube das liegt daran, dass ich in die WHERE Klausel doch noch das Feld LABNK einbauen muss nur wenn ich das über AND verknüpfe, dann sagt er mir "nur statische Typen sind erlaubt". Hier erstmal der Code so wie er aktuell aussieht, evtl hab ich auch einfach einen Denkfehler bei dem LOOP, evtl kannst Du Dir das ja nochmal kurz anschauen, wäre nett.

Code: Alles auswählen.

  field-symbols: <vbeln> type vbeln,
                 <labnk> type labnk.
  create data wa_dyn_table like line of <t_dyn_table>.
  assign wa_dyn_table->* to <wa_dyn_table>.

  loop at gt_res into wa_res.

    loop at <t_dyn_table> assigning <wa_dyn_table> where (('VBELN = wa_res-vbeln') AND ('LABNK = wa_res-LABNK')) * wird zwar hier richtig dargestellt, aber in SAP krieg ich da eine Fehlermeldung.
*      LOOP AT <t_dyn_table> ASSIGNING <wa_dyn_table> WHERE ('LABNK = wa_res-LABNK').
*      EXIT.
*      ENDLOOP.

      exit.
    endloop.

    clear <wa_dyn_table>.
    assign component 'VBELN' of structure <wa_dyn_table> to <vbeln>.
    if sy-subrc = 0.
      <vbeln> = wa_res-vbeln.
    endif.

    assign component 'LABNK' of structure <wa_dyn_table> to <labnk>.
    if sy-subrc = 0.
      <labnk> = wa_res-labnk.
    endif.


    spaltenname = ( wa_res-zmonth ).
    assign component spaltenname of structure <wa_dyn_table> to <w_field>.
    if sy-subrc = 0.
      add wa_res-wmeng to <w_field>.
    endif.
    append <wa_dyn_table> to <t_dyn_table>.

  endloop.
Die Ausgabe sieht jetzt so aus siehe Anhang:

Die Ausgabe sollte aber wie gesagt nur 5 Zeilen haben mit den kumulierten Werten und mir ist aufgefallen, dass ich in der ersten Zeile keine Abrufnummer habe, wenn ich mir das im Debugger anschaue, dann entfernt er komischerweise auch die erste Zeile bei allen anderen stimmt es, also hab ich da wohl auch noch einen Fehler drin...
Was auch noch gut wäre wenn nur in der ersten Zeile die VBELN stehen würde und dann die ganzen Abrufe siehe Anhang, das er jede Zeile die VBELN schreibt ist in meinen Augen ein wenig unübersichtlich.

Wäre für jede Hilfe dankbar...

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von Akatash (ForumUser / 18 / 3 / 0 ) »
So bin schon mal ein Stück weiter gekommen und mir ist klar das durch den APPEND ich immer unten alles angefügt bekomme, deswegen lautet nun meine Frage, wie bekomm ich es hin, das als Resultat nur 5 Zeilen rauskommen ? Ich denke das müsste ich wieder über einen Loop lösen und und irgendeiner Bedingung, aber sitze heute schon die ganze Zeit dran und komm irgendwie auf keinen grünen Zweig. Wäre nett wenn mir da jemand weiterhelfen könnte, weil ich denke ich bin ziemlich nah an der Lösung....
Mittlerweile tendier ich fast dazu, das <wa_dyn_table> komplett aus der gt_res befüllen zu lassen mit ein paar checks und dann mit einem Append am Ende anzufügen, die Frage ist nur wie mach ich das, weil über READ TABLE nach einem bestimmten KEY kann ich es nicht lösen, da die Werte je nach Eingabe des Anwenders dynamisch generiert werden... naja evtl hat ja irgendjemand ne Idee wie man die Problemstellung am schlausten lösen kann.

Aktueller Code:

Code: Alles auswählen.

FIELD-SYMBOLS: <vbeln> TYPE vbeln,
                 <labnk> TYPE labnk.
*                 <wa_res> like LINE OF gt_res.
  CREATE DATA wa_dyn_table LIKE LINE OF <t_dyn_table>.
  ASSIGN wa_dyn_table->* TO <wa_dyn_table>.


  SORT gt_res BY zmonth labnk.

  LOOP AT gt_res INTO wa_res.

      IF <wa_dyn_table> IS NOT ASSIGNED.

        APPEND INITIAL LINE TO <t_dyn_table> ASSIGNING <wa_dyn_table>.
      ENDIF.

    CLEAR <wa_dyn_table>.
    IF <vbeln> IS NOT ASSIGNED.
      ASSIGN COMPONENT 'VBELN' OF STRUCTURE <wa_dyn_table> TO <vbeln>.
    ELSE.
        <vbeln> = wa_res-vbeln.
    ENDIF.
    IF sy-subrc = 0.
      <vbeln> = wa_res-vbeln.
    ENDIF.

    ASSIGN COMPONENT 'LABNK' OF STRUCTURE <wa_dyn_table> TO <labnk>.
    IF sy-subrc = 0.
      <labnk> = wa_res-labnk.
    ENDIF.

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

  ENDLOOP.
Ergebnis sieht aktuell nun so aus siehe Anhang.... das wäre auch richtig nur die Werte von 2017_2 usw müssten in derselben Zeile stehen wie bei 2017_1:

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von hausi (ForumUser / 56 / 11 / 1 ) »
Hallo aktash,

ich hoffe ich liege jetzt nicht daneben, aber ich denke dein Loop ist eher ungeschickt - vor allem weil du ihn anscheinend wirklich nur zum lesen nutzt und gleich wieder raus gehst...
Versuchs doch lieber mit einem READ TABLE...
Die ganzen Klammern sehe ich ehrlich gesagt auch das erste mal - ich vermute das überträgst du aus einer anderen Sprache? Klärt mich hier gern auf, wenn das in ABAP auch relevant ist.

Code: Alles auswählen.

READ TABLE <t_dyn_table> ASSIGNING <wa_dyn_table> WITH KEY vbeln = wa_res-vbeln labnk = wa_res-labnk.
Außerdem glaube ich, dass du dich mit den ganzen FIELD SYMBOLS ein wenig verkünstelst - kannst du nicht einfach normale Strukturen füllen und am Ende zu einer Tabelle zusammensetzen?
Baue dir eine Struktur mit Feldern deiner Ausgabetabelle und schau mal ob das so geht

Code: Alles auswählen.

      loop at gt_res into wa_res.

        READ TABLE <t_dyn_table> INTO ls_wa_dyn_table WITH KEY vbeln = wa_res-vbeln labnk = wa_res-labnk.  

        ls_wa_dyn_table-spaltenname = wa_res-zmonth.

        append ls_wa_dyn_table to <t_dyn_table>.

      endloop.

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von Akatash (ForumUser / 18 / 3 / 0 ) »
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. Der Anwender gibt VBELN ein dann ein Stichttagsdatum und einen Betrachtungszeitraum für welchen die Analyse erfolgen soll. Da ich nicht weiß, was der Anwender eingeben wird und somit nie eine feste Struktur habe, muss das alles dynamisch zur Laufzeit generiert werden, d.h. die Feldsymbole zeigen nur auf den Arbeitsspeicher zur Laufzeit wo der Wert steht, das Feldsymbol selbst hat sogesehen keine Struktur die man direkt ansprechen kann.

Das mit dem READ TABLE hab ich mir auch schon überlegt, dass ich aus meiner ITAB über den KEY die dementsprechenden Sätze suche und dann meine WA damit zusammen baue. Das Problem daran ist dann nur, dass ich als KEY ZMONTH und LABNK hätte und ZMONTH eben auch dynamisch erzeugt wird sprich der Wert wird zur Laufzeit anhand der Benutzereingabe in die ITAB geschrieben, also kann ich keinen KEY definieren, da ich die Werte nicht weiß. Der KEY VBELN und LABNK nützt in dem Fall nichts, denn der Anwender gibt nur eine VBELN ein die dann dutzende LABNKs hat, sogesehen ist VBELN immer eindeutig und nur einmal vorhanden, der richtige KEY ist eben ZMONTH + LABNK.

Aber auf jeden Fall mal danke für Deine Anregung, ich werde mal später das trotzdem mit READ TABLE versuchen. Bin auf jeden Fall für jeden weiteren Ratschlag dankbar, denn diese Problemstellung treibt mich langsam in den Wahnsinn...

Gute Nacht :D

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
hi!

Ich würde die "Gruppierung" die du offensichtlich haben möchtest, über deine Datentabelle bewerkstelligen.

Code: Alles auswählen.

loop at gt_res assigning <ls_res> 
  group by VBELN = <ls_res>-vbeln LABNK = <ls_res>-labnk
  assigning <ls_group>.

  APPEND INITIAL LINE TO <t_dyn_table> ASSIGNING <wa_dyn_table>.
  ASSIGN COMPONENT 'VBELN' OF STRUCTURE <wa_dyn_table> TO <vbeln>.
  <vbeln> = <ls_group>-vbeln.
  
  ASSIGN COMPONENT 'LABNK' OF STRUCTURE <wa_dyn_table> TO <labnk>.
  <labnk> = wa_res-labnk.
  
  loop at group <ls_group> assigning <ls_group_res>.
    spaltenname = ( <ls_group_res>-zmonth ).
    ASSIGN COMPONENT spaltenname OF STRUCTURE <wa_dyn_table> TO <w_field>.
    IF sy-subrc = 0.
      ADD <ls_group_res>-wmeng TO <w_field>.
    ENDIF.   
  endloop.
endloop.
Das ist Code mit Basis 7.40 sollte aber zur Veranschaulichung reichen. Es geht auch ohne die neuen Schlüsselwörter ist aber etwas aufwändiger. Wenn interesse besteht kann ich es auch "downgraden".

lg ADT
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 Akatash (ForumUser / 18 / 3 / 0 ) »
Hallo ADT,

danke für Deine Hilfe ich werd das dann später mal per VPN am System testen, aber generell würde mich so oder so die "downgrade" Version interessieren, denn sowas kann an sich nie schaden, wenn ich mal wieder auf so eine Aufgabenstellung treffen sollte. Danke schon mal im Vorraus für Deine Mühe.

LG

Re: Wert aus ITAB Spalten einer dynamischen Tabelle zuweisen

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Akatash hat geschrieben:[...] Er fängt dann immer eine neue Zeile an und ich glaube das liegt daran, dass ich in die WHERE Klausel doch noch das Feld LABNK einbauen muss nur wenn ich das über AND verknüpfe, dann sagt er mir "nur statische Typen sind erlaubt".
Warum schreibst du auch das AND außerhalb der dynamischen WHERE-Bedingung? Alles zusammen in einen String und alles ist easy.

Code: Alles auswählen.

REPORT.  " DÖF 


FIELD-SYMBOLS: <gt_test> TYPE STANDARD TABLE.
DATA: gt_t005 TYPE STANDARD TABLE OF t005 WITH NON-UNIQUE DEFAULT KEY,
      begin of gs_relevant_fields,
        land1 type t005-land1,
      end of gs_relevant_fields,
      gs_t005t type t005t.

PARAMETERS: p_waers TYPE t005-waers OBLIGATORY DEFAULT 'EUR',
            p_spras TYPE t005-spras OBLIGATORY DEFAULT 'D'.

SELECT * FROM t005 INTO TABLE gt_t005.
ASSIGN gt_t005 TO <gt_test>.


*LOOP AT <gt_test> ASSIGNING FIELD-SYMBOL(<gs_line>) WHERE ('Bedingung1 AND Bedingung2').
LOOP AT <gt_test> ASSIGNING FIELD-SYMBOL(<gs_line>) WHERE ('WAERS = p_waers AND SPRAS = p_spras').
  MOVE-CORRESPONDING <gs_line> to gs_relevant_fields.
  select single *
    into gs_t005t
    from t005t
    where land1 = gs_relevant_fields-land1
      and spras = sy-langu.
  WRITE:/ gs_t005t-landx.
ENDLOOP.
Akatash hat geschrieben:Mittlerweile tendier ich fast dazu, das <wa_dyn_table> komplett aus der gt_res befüllen zu lassen mit ein paar checks und dann mit einem Append am Ende anzufügen, die Frage ist nur wie mach ich das, weil über READ TABLE nach einem bestimmten KEY kann ich es nicht lösen, da die Werte je nach Eingabe des Anwenders dynamisch generiert werden... naja evtl hat ja irgendjemand ne Idee wie man die Problemstellung am schlausten lösen kann.
Weil es keinen dynamischen READ gibt ( naja - irgendwie gibts das schon - ist aber nicht sonderlich schön das zu verwenden und Lesbarkeit leidet stark darunter ) nimm halt den dynamischen LOOP.. WHERE. EXIT. ENDLOOP. Das enstpricht dem dyn. READ und die WHERE-Bedingung kann eben auch sehr gut lesbar sein ( siehe Beispiel ) und beliebig komplex mit Mischformen aus Konstanten und Programmvariablen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Vergleichbare Themen

0
Antw.
908
Views
3
Antw.
4983
Views
Alle Spalten durchlaufen und Wert zuweisen
von simethandreas » 12.10.2009 09:35 • Verfasst in ABAP® für Anfänger
3
Antw.
7055
Views
Feldsymbole einer dynamischen Struktur zuweisen
von Margolwes » 25.06.2009 14:33 • Verfasst in ABAP® Core
5
Antw.
1626
Views
Datenbank Wert zuweisen
von Schäfer_anfänger » 26.01.2017 11:27 • Verfasst in ABAP® für Anfänger
2
Antw.
6238
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

Aktuelle Forenbeiträge

ABAP unter GUI und FIORI
vor 23 Stunden von wreichelt 3 / 48
MaLo-Checker in ABAP
vor einer Woche von ewx 5 / 128

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.