ich habe eine Struktur und eine zugehörige interne Tabelle dynmisch erzeugt, da die Felder erst zur Laufzeit festliegen (kein einfacher DDIC-Bezug möglich), und zwar so:
"GENERATE SUBROUTINE POOL lit_src NAME lva_subpool MESSAGE lva_msg."
LIT_SRC enthält dabei das Coding, das vereinfacht so aussieht:
(app ist ein Makro zum APPEND an LIT_SRC)
app 'REPORT dummy.'.
app 'FORM createtab CHANGING po_wa po_it.'.
app ''DATA: BEGIN OF lwa_wrk.'.
* Jetzt die dynamischen Felder:
LOOP AT it_lnart INTO lva_lnart.
CLEAR lva_line.
CONCATENATE 'DATA:' lva_lnart 'TYPE vgwrt.'
INTO lva_line SEPARATED BY space.
app lva_line.
ENDLOOP.
* Der Rest des Unterprogramm-Codings:
app 'DATA: END OF lwa_wrk.'.
app 'DATA: rf_wrk TYPE REF TO DATA.'.
app 'DATA: rf_tab TYPE REF TO DATA.'.
app 'CREATE DATA rf_wrk LIKE lwa_wrk.'.
app 'CREATE DATA rf_tab LIKE TABLE OF lwa_wrk.'.
app 'po_wa = rf_wrk.'.
app 'po_it = rf_tab.'.
app 'ENDFORM.'.
Dann kommt:
"PERFORM createtab IN PROGRAM (lva_subpool) CHANGING lwa_wrk lit_tab.
(LWA_WRK und LIT_TAB sind vom TYPE REF TO DATA)
nun noch:
ASSIGN lwa_wrk->* TO <fs_wrk>.
ASSIGN lit_tab->* TO <fs_tab>.
und ich habe die Struktur im Feldsymbol <fs_wrk> (TYPE ANY)
und die Tabelle im Feldsymbol <fs_tab> (TYPE TABLE).
Jetzt kommt mein Problem:
Obwohl ich im Debugger jedes einzelne Feld sehe, kann ich die einzelnen Felder der Struktur nicht über <fs_wrk>-feld1 usw. ansprechen.
Ich weiß, dass ich über "ASSIGN COMPONENT x ..." da rankomme,
da ich aber auch ein SORT auf die Tabelle machen will und deren Feldkatalog manipulieren will (Tabelle wird im ALV ausgegeben), wäre ein direkter Feldzugriff schon besser.
Irgendwie habe ich das Gefühl, dass das nicht mehr kompliziert sein kann,
aber irgendwie sehe ich den Wald vor lauter Bäumen nicht.
da Du das Feldsymbol generisch (TYPE ANY) angelegt hast, sagst Du ja, dass Du nicht weißt, wie die eventuelle Struktur aussieht. Daher weiß es der Compiler noch weniger.
Um Deinen Sort zu machen, musst Du die dynamische Form mit SORT itab BY (lt_sort). benutzen, in dem Du die Feldnamen in eine Tabelle füllst (siehe Doku zu SORT).
Und der Zugriff auf die einzelnen Felder ist tatsächlich nur über ASSIGN COMPONENT möglich.
Gruß
Ereglam
May the Force be with your code || .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .