[55351] in SAPr3-news
Re: interne Tabelle dynamisch aufbauen - ohne direkten DDIC-Bezug
daemon@ATHENA.MIT.EDU (Andreas Loch)
Wed Aug 31 13:23:42 2005
To: sapr3-news@mit.edu
Date: Wed, 31 Aug 2005 19:23:30 +0200
From: Andreas Loch <anchedo@expires-31-08-2005.news-group.org>
Message-ID: <1125509010.32@anchedo.newsoffice.de>
Reply-To: usenet-reply@anchedo.net
2005-08-31, RudiL:
> ich möchte eine interne Tabelle dynamisch aufbauen.
> Weiß jemand wie das funktioniert?
Ab Release 640 soll das mit RTTC (run time type creation) gehen. Vorher
dürfte wohl Quelltextgenerierung die einzige Möglichkeit sein,
jedenfalls macht SAP selbst das auch so (z.B. bei ALV-Ausgaben).
Also man fülle im Programm ...
REPORT zbla.
DATA: lt_src TYPE STANDARD TABLE OF string,
l_name TYPE syrepid VALUE 'SUBPOOL',
l_message TYPE char256,
l_line TYPE izeile,
l_word TYPE char72,
lf_pointer TYPE REF TO data,
lt_pointer TYPE REF TO data.
FIELD-SYMBOLS:
<lf_table> TYPE ANY, "interne Tabelle
<lt_table> TYPE INDEX TABLE. "Arbeitsbereich der iTab
.. eine Tabelle (bei mir heißt sie lt_src) mit dem zu generierenden
Sourcecode. Die Zeileninhalte von lt_src könnten in etwa so aussehen,
meine Kommentarzeilen sind natürlich sinnvoll zu ersetzen:
REPORT subpool.
FORM create_table CHANGING ct_pointer TYPE REF TO DATA
cf_pointer TYPE REF TO DATA.
TYPES: BEGIN OF lty_table,
* hier Deine Felder mit den gewünschten Typen reinbasteln
* z.B. konto TYPE bseg-hkont,
* z.B. summe TYPE p,
* ...
END OF lty_table.
CREATE DATA: ct_pointer TYPE STANDARD TABLE OF lty_table,
cf_pointer TYPE lty_table.
ENDFORM.
Danach den Quellcode generieren ...
CATCH SYSTEM-EXCEPTIONS generate_subpool_dir_full = 9.
GENERATE SUBROUTINE POOL lt_src
NAME l_name
MESSAGE l_message
LINE l_line
WORD l_word.
ENDCATCH.
IF NOT sy-subrc IS INITIAL OR
l_name IS INITIAL.
* Fehlerbehandlung
ENDIF.
.. und ausführen.
PERFORM create_table
IN PROGRAM (l_name)
CHANGING lt_pointer
lf_pointer.
* erzeugte Tabelle in Feldsymbol abbilden (dereferenzieren)
ASSIGN lt_pointer->* TO <lt_table>.
* Zeilentyp der erzeugten Tabelle Feldsymbol abbilden (dereferenzieren)
ASSIGN lf_pointer->* TO <lf_table>.
Danach kannst Du mit <lt_table> als interne Tabelle und <lf_table> als
deren Arbeitsbereich hantieren.
Andreas
--
http://gigaschatten.de/
40tude Dialog - http://www.40tude.com/dialog/
Newsoffice.de - http://newsoffice.de/