Code: Alles auswählen.
data: begin of itab_equi,
equnr like equi-equnr,
shtxt like itob-shtxt,
pequi like equi-equnr,
end of itab_equi.
Code: Alles auswählen.
FUNCTION Z_FUBA.
PERFORM getchildelements
using
itab_equi
.
ENDFUNCTION.
form getChildElements using itab_equi.
select * from ... . " Irgendwas
" Füllen der internen Tabelle
itab_equi-idnrk = equz-equnr.
itab_equi-ojtxp = my_SHTXT.
itab_equi-zparent = equz-hequi.
append itab_equi.
" rekursiver FORM-Aufruf
PERFORM getchildelements
using
itab_equi
.
endselect.
endform.
Hey,DeathGuardian hat geschrieben:HI!
Versuch mal beim PERFORM und FORM stats USING lieber TABLE, dann klappt.
Code: Alles auswählen.
form getChildElements tables itab_equi.
Ja, aber wie ??? Das ist ja das Problem.Flo hat geschrieben:Du brauchst neben deiner Tabelle auch einen Arbeitsbereich (also eine Zeile) die musst du dir in der Form dann definieren und immer mit append an die Tabelle anhängen.
Code: Alles auswählen.
data: wa_itab like line of itab_equi.
Code: Alles auswählen.
form getChildElements tables itab_equi.
data: begin of f_itab_equi occurs 0,
equnr like equi-equnr,
shtxt like itob-shtxt,
pequi like equi-equnr,
end of f_itab_equi.
data: wa_itab like line of f_itab_equi.
select * from ...
wa_itab-equnr = equz-equnr.
wa_itab-shtxt = my_SHTXT.
wa_itab-pequi = equz-hequi.
append wa_itab to itab_equi.
Code: Alles auswählen.
data: begin of itab_equi,
equnr like equi-equnr,
shtxt like itob-shtxt,
pequi like equi-equnr,
end of itab_equi.
Code: Alles auswählen.
types: begin of y_itab_equi,
equnr like equi-equnr,
shtxt like itob-shtxt,
pequi like equi-equnr,
end of y_itab_equi.
types: t_itab_equi type table of y_itab_equi.
data: itab_equi type t_itab_equi.
Code: Alles auswählen.
Perform getChildElements using itab_equi[].
...
Code: Alles auswählen.
FORM getChildElements p_itab_equi type t_itab_equi.
Code: Alles auswählen.
FIELD-SYMBOLS: <p_itab_equi> like line of p_itab_equi.
Code: Alles auswählen.
select * from ... . " Irgendwas
* Neue Zeile an die Tabelle anfügen
* Coding bis 4.6C
append initial line to p_itab_equi.
read table p_itab_equi assigning <p_itab_equi>
index sy-tabix.
* ab 4.7 heißt das einfacher:
append initial line to p_itab_equi
assigning <p_itab_equi>.
* Füllen der Tabellenzeile
<p_itab_equi>-idnrk = equz-equnr.
<p_itab_equi>-ojtxp = my_SHTXT.
<p_itab_equi>-zparent = equz-hequi.
* rekursiver FORM-Aufruf
PERFORM getchildelements
using
p_itab_equi[]
.
...
endselect.
Dann leg dir doch im DICT eine Struktur und einen Tabellentyp der als Zeilentyp die zuvor angelegte Struktur hat an. Dann kannst du Systemweit auf die Typdefinitionen zugreifen.shapoc hat geschrieben: Dort soll dann eine FORM aufgerufen werden, die aber erst ausserhalb des Funktionsbausteins definiert ist. Das heißt, dass die Typdeklaration dort nicht bekannt ist.
Ja, das hatte ich befürchtet. Wollte das aber umgehen (keine Ahnung warum?) und nur die Tabelle übergeben...JHM hat geschrieben:Dann leg dir doch im DICT eine Struktur und einen Tabellentyp der als Zeilentyp die zuvor angelegte Struktur hat an. Dann kannst du Systemweit auf die Typdefinitionen zugreifen.shapoc hat geschrieben: Dort soll dann eine FORM aufgerufen werden, die aber erst ausserhalb des Funktionsbausteins definiert ist. Das heißt, dass die Typdeklaration dort nicht bekannt ist.
Naja, "sauberer" wäre ein Tabellentyp, den kann man auch mit USING oder CHANGING übergeben. Von TABLES rät sogar die SAP inzwischen ab.DeathGuardian hat geschrieben:Versuch mal beim PERFORM und FORM stats USING lieber TABLE, dann klappt.
zu 1.)black_adept hat geschrieben:1.) Was ich definitiv unterlassen würde ( und ich hasse auch SAP jedesmal, wenn ich sowas sehe ) ist einen Parameter mittels "USING" zu übergeben und ihn dann trotzdem zu ändern.
2.) Zum Aufbau einer Equihierarchie nehm ich immer den FB "EQUI_HIERARCHY_READ" - der liefert mir alles was ich brauche.