[55351] in SAPr3-news

home help back first fref pref prev next nref lref last post

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/

home help back first fref pref prev next nref lref last post