[55352] in SAPr3-news
Re: interne Tabelle dynamisch aufbauen - ohne direkten DDIC-Bezug
daemon@ATHENA.MIT.EDU (gs_dev0@nexgo.de)
Thu Sep 1 02:13:33 2005
To: sapr3-news@mit.edu
Date: 31 Aug 2005 23:13:18 -0700
From: gs_dev0@nexgo.de
Message-ID: <1125555198.612663.8820@g47g2000cwa.googlegroups.com>
RudiL schrieb:
Hallo,
> ich m=F6chte eine interne Tabelle dynamisch aufbauen. Angenommen ich
> habe eine Tabelle ZTAB mit dem Feld F1. Die Tabelle enth=E4lt 3
> Datens=E4tze
> A0
> X7
> B4
> Ausgehend von diesen 3 Datens=E4tzen m=F6chte ich dynamisch eine interne
> Tabelle aufbauen, die die Felder mit den Namen konto, summe, A0, X7 und
> B4 hat. Das Feld konto soll auf bseg-hkont referenzieren, die
> restlichen Felder sollen die L=E4nge 8 haben und vom Type P decimals 8
> sein.
siehe Beispielprogramm.
Gru=DF
Georg
---schnipp---
REPORT ztest.
DATA: it_input TYPE STANDARD TABLE OF lvc_s_fcat, "Feldliste f=FCr ITAB
wa_input TYPE lvc_s_fcat.
DATA: d_ref TYPE REF TO data. "Ref. auf ITAB
DATA: d_ref_wa TYPE REF TO data. "Ref. auf WA
FIELD-SYMBOLS: <it> TYPE table, "Itab
<wa> TYPE ANY, "Workarea
<fs>. "Komponentenzugriff
DATA: BEGIN OF ztab OCCURS 0,
f1(2) TYPE c,
END OF ztab.
ztab-f1 =3D 'A0'. APPEND ztab.
ztab-f1 =3D 'X7'. APPEND ztab.
ztab-f1 =3D 'B4'. APPEND ztab.
PERFORM itab_generieren.
* Tabelle f=FCllen
ASSIGN COMPONENT 'KONTO' OF STRUCTURE <wa> TO <fs>.
<fs> =3D '4711'.
ASSIGN COMPONENT 'SUMME' OF STRUCTURE <wa> TO <fs>.
<fs> =3D 3000.
ASSIGN COMPONENT 'A0' OF STRUCTURE <wa> TO <fs>.
<fs> =3D 1000.
ASSIGN COMPONENT 'X7' OF STRUCTURE <wa> TO <fs>.
<fs> =3D 1000.
ASSIGN COMPONENT 'B4' OF STRUCTURE <wa> TO <fs>.
<fs> =3D 1000.
APPEND <wa> TO <it>.
* Tabelleninhalt ausgeben
LOOP AT <it> INTO <wa>.
DO.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <fs>.
WRITE: <fs>.
ENDDO.
ENDLOOP.
*---------------------------------------------------------------------*
* FORM itab_generieren *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM itab_generieren.
* Feld mit Referenz auf Tabellenfeld anlegen
wa_input-fieldname =3D 'KONTO'.
wa_input-ref_field =3D 'HKONT'.
wa_input-ref_table =3D 'BSEG'.
APPEND wa_input TO it_input.
CLEAR wa_input.
* Feld Typ P mit L=E4nge 8 anlegen
wa_input-fieldname =3D 'SUMME'.
wa_input-inttype =3D 'P'.
wa_input-outputlen =3D 8.
APPEND wa_input TO it_input.
* weitere Felder mit L=E4nge 8 anlegen
LOOP AT ztab.
PERFORM add_field USING ztab-f1.
ENDLOOP.
CALL METHOD cl_alv_table_create=3D>create_dynamic_table
EXPORTING
it_fieldcatalog =3D it_input
IMPORTING
ep_table =3D d_ref .
ASSIGN d_ref->* TO <it>.
CREATE DATA d_ref_wa LIKE LINE OF <it>.
ASSIGN d_ref_wa->* TO <wa>.
ENDFORM. "itab_generieren
*---------------------------------------------------------------------*
* FORM add_field *
*---------------------------------------------------------------------*
* weitere Tabellenfelder Typ P, L=E4nge 8 anlegen
*---------------------------------------------------------------------*
FORM add_field USING i_field.
CLEAR wa_input.
wa_input-fieldname =3D i_field. "Feldbzeichnung.
wa_input-inttype =3D 'P'.
wa_input-outputlen =3D 8.
APPEND wa_input TO it_input.
ENDFORM. "add_field
---schnapp---