Page 1 of 1

Felder einer dyn.internen Tabelle zuweisen

PostPosted: Wed Mar 09, 2005 3:40 pm
by Celin4809
Hallo,

wer weiß wie ich es hinbekomme, bei einer dyn.erstellten ITAB Felder zuzuweisen.

Momentan geht nur:

loop at atab into <ls_itab>.
append <ls_itab> to <lt_itab>.
endloop.

ich möchte aber gerne genau die Felder bestimmen und zuweisen. Ich weiß aber nicht wie!!!

PostPosted: Wed Mar 09, 2005 3:53 pm
by Juliana3781
Wenn du die Feldnamen weißt, kannst du einzelne Felder des Arbeitsbereichs einem Feldsymbol zuweisen.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   <feld> type any.
  2.  
  3. ...
  4. assign component 'FELD1'
  5.   of structure <ls_itab> to <feld>.
  6.  
GeSHi ©


Wenn du die Feldnamen nicht weißt, musst du sie über die Klasse CL_ABAP_TABLEDESCR bzw. CL_ABAP_STRUCTDESCR ermitteln.

Gruß, Heiko.

Re: Felder einer dyn.internen Tabelle zuweisen

PostPosted: Wed Mar 09, 2005 3:56 pm
by Silke1341
Thorsten hat geschrieben:Hallo,

wer weiß wie ich es hinbekomme, bei einer dyn.erstellten ITAB Felder zuzuweisen.

Momentan geht nur:

loop at atab into <ls_itab>.
append <ls_itab> to <lt_itab>.
endloop.

ich möchte aber gerne genau die Felder bestimmen und zuweisen. Ich weiß aber nicht wie!!!

schau Dir mal den Befehl ASSIGN COMPONENT an.
Da Du eine dynamische Tabelle hat, wirst Du wahrscheinlich die Felder dazu in einer Tabelle definiert haben.
Das Ganze wird typischerweise in einer DO-Schleife abgehandelt.

Nachtrag: ein sogenannter Doppelpost... :D

PostPosted: Wed Mar 09, 2005 4:01 pm
by Edin1867
Moin.

Müßte mit Feldsymbolen vom Typ ANY gehen. Ich schreibsel hier mal 'n Coding hin, ist aber aus dem Kopf programmiert und nicht getestet.
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.     : <l_field>  TYPE ANY
  2.     , <l_field2> TYPE ANY
  3.     , <ls_itab2> TYPE ANY
  4.     .
  5. LOOP AT atab INTO <ls_itab>.
  6.   ASSIGN COMPONENT 'FELD1'          " *
  7.          OF STRUCTURE <ls_itab>     " *
  8.          TO <l_field>.              " *
  9.   IF sy-subrc IS INITIAL.           " *
  10.     ASSIGN COMPONENT 'FELD1'        " *
  11.            OF STRUCTURE <ls_itab2>  " *
  12.            TO <l_field2>.           " *
  13.     IF sy-subrc IS INITIAL.         " *
  14.       MOVE <l_field> TO <l_field2>. " *
  15.       APPEND <ls_itab2> TO <lt_itab>.
  16.     ENDIF.
  17.   ENDIF.
  18.  
GeSHi ©


Die mit "*" markierte Codingstrecke natürlich für Deine gesamte Feldliste und den APPEND am Ende. :wink:

Gruss,
Haubi

/edit: wie jetzt, zwei andere waren schneller und dann auch noch popeiko dabei... :shock:

PostPosted: Wed Mar 09, 2005 5:15 pm
by Celin4809
Hallo Haubi,

klappte fast so (ein Assign fehlte). Danke. Jetzt habe ich nur noch das Problem, dass ich den Feldnamen zusammenbaue. Sobald ich dann beim ASSIGN die Variable oder ein Field-Symbol angebe, kommt SY-SUBRC 4 und er erkennt das Feld nicht. Wie gesagt, ich habe es als Variable und Feld-Symbol probiert. Leider nichts. Vielleicht weißt Du ja noch was. Wäre toll.

z.B.
concatenate 'Feld' zahl into vari.
und
Assign vari to <feld>.

und dann

ASSIGN COMPONENT <VARI> " *
OF STRUCTURE <ls_itab2> " *
TO <l_field2>.

geht leider nicht!?

mfg
Thorsten

PostPosted: Wed Mar 09, 2005 5:40 pm
by Silke1341
Thorsten hat geschrieben:Hallo Haubi,

klappte fast so (ein Assign fehlte). Danke. Jetzt habe ich nur noch das Problem, dass ich den Feldnamen zusammenbaue. Sobald ich dann beim ASSIGN die Variable oder ein Field-Symbol angebe, kommt SY-SUBRC 4 und er erkennt das Feld nicht. Wie gesagt, ich habe es als Variable und Feld-Symbol probiert. Leider nichts. Vielleicht weißt Du ja noch was. Wäre toll.

z.B.
concatenate 'Feld' zahl into vari.
und
Assign vari to <feld>.

und dann

ASSIGN COMPONENT <VARI> " *
OF STRUCTURE <ls_itab2> " *
TO <l_field2>.

geht leider nicht!?

mfg
Thorsten

der Befehl hört auf den Syntax:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. ASSIGN COMPONENT 'Feldname' OF ...
  2. ASSIGN COMPONENT vari OF ...
  3. * oder
  4. ASSIGN COMPONENT index OF ...
  5.  
GeSHi ©

wenn der Inhalt von vari nicht dem Namen eines Feldes entspricht, kommt tatsächlich SY-SUBRC = 4

Also mal im Debugger schauen, wie der Feldname in der Varablen aussieht.

PostPosted: Wed Mar 09, 2005 5:43 pm
by Juliana3781
Bei einem ASSIGN COMPONENT müssen die Feldnamen groß geschrieben werden.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. concatenate 'Feld' zahl into vari.
  2.  
  3. *>>>
  4. TRANSLATE vari TO UPPER CASE.
  5. *<<<
  6.  
  7. ASSIGN COMPONENT vari " *
  8. OF STRUCTURE <ls_itab2> " *
  9. TO <l_field2>.
  10.  
GeSHi ©

PostPosted: Wed Mar 09, 2005 6:17 pm
by Alva1590
Hallo,

so einfach kann es sein. Das klappte auch mit dem GROßSCHREIBEN. Aber jetzt habe ich noch ein Problem. Ich habe z.B eine dyn.Tabelle mit den Feldern Feld1 - Feld50. Jetzt loope ich über eine andere Tabelle und möchte aus dieser Tabelle den Betrag je nach Sy-Tabix in das Feld Feldxx der dyn.Tabelle setzen. Das Problem ist, dass der ASSIGN die Tabelle, in der ich die Felder zuweise, immer wieder initialisiert. Wie kann ich den aktuellen Zwischenstand festhalten? Also sobald ich Loop at atab assigning <tab1> mache, und das Feld2 der dyn.Tabelle schon gefüllt war, ist es danach wieder init und FELD1 ist wieder nur gefüllt, weil es aus dem aktuellen Loop kommt. Kann man das verhindern?

Also ich möchte die ersten 50 Einträge der Tabelle ATAB-BETRG in die Felder der Dyn.Tabelle Feld1 - Feld50 übertragen.

mfg
T.Herter

Hat sich erledigt!! Danke an Alle

PostPosted: Thu Mar 10, 2005 11:49 am
by Celin4809
:D Problem gelöst, Danke an Alle!!! :lol: