Dynamische Deklaration einer Tabelle

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Dynamische Deklaration einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Moin moin,

ich habe gerade wieder mal eine Tüftleraufgabe, an der ich zu verzweifeln drohe.

Gegeben sei eine Tabelle (type table of tabname), in der Tabellennamen aus dem DDIC stehen. Was ich nun brauche ist: Im LOOP über diese Tabelle möchte ich interne Tabellen erzeugen (wichtig: type STANDARD table!!!), die denselben Typ haben, wie die namensgleichen DDIC- Tabellen.

Beispiel:

In der Tabelle stehen die zwei Sätze 'MARA' und 'MARC'. Ich brauche nun (um einen Funktionsbaustein ansprechen zu können, dem ich die interne Tabelle übergebe) erst eine interne Tabelle type standard table of MARA und im zweiten Durchlauf eine interne Tabelle type standard table of MARC.

Schon klar, dass ich das mit CREATE DATA machen muss, aber irgendwie komme ich nicht weiter. Mein bisheriges Coding:

Code: Alles auswählen.

    data: strucname type dd40l-typename.
    DATA: table TYPE REF TO data.

    " Testdaten - normalerweise wird das über importing-parameter gefüllt:
    APPEND 'MARA' to me->tables.
    APPEND 'MARC' to me->tables.

    LOOP AT me->tables ASSIGNING FIELD-SYMBOL(<table>).

        " Ich brauche einen Tabellentyp für die Tabelle type standard table
        select single typename 
        from dd40L into strucname
        where rowtype = <table>
        and   rowkind = 'S'
        and   accessmode = 'T'.

        " Hier deklariere ich die Standard-Tabelle 
        ASSIGN strucname TO FIELD-SYMBOL(<strucname>).
        CREATE DATA table TYPE (<strucname>).

        assign table to field-symbol(<table_>).

* Wenn ich <table_> oder <strucname> einem Funktionsbaustein
* per tables-Parameter übergebe, erhalte ich die Meldung
* "... ist keine interne Tabelle"

  ENDLOOP.
Wo mache ich den Fehler?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Dynamische Deklaration einer Tabelle

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
Ich kenn die neue Kurzschreibweise leider noch nicht so gut.
Aber zumindest das gehört so:

Code: Alles auswählen.

assign table->* to field-symbol(<table_>).
Und ich glaub du wirst die Feld-Symbole etwas genauer typisieren müssen.
Zumindest die, die an den Funktionsbaustein weiter gehen:

Code: Alles auswählen.

field-symbols: <table_> type standard table.
lg ADT

EDIT:
Ach Ja, bei TABLES musst du glaub ich, hinten noch [] dazu machen, da ja die Kopfzeile fehlt.

EDIT 2:
Das mit dem Lesen der DD40L kannst du dir auch sparen:

Code: Alles auswählen.

CREATE DATA table TYPE STANDARD TABLE OF (<table>).

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ralf.wenzel

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Dynamische Deklaration einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Na, da war ich ja bei meinen Versuchen ein paarmal ganz kurz davor, es richtig zu machen ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Deklaration einer Tabelle

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin Ralf.
Hier mein Vorschlag:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZCREATE_DYNTAB
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zcreate_dyntab.

DATA gv_ddic_name TYPE string VALUE 'MAKT'.

FIELD-SYMBOLS:
  <dyn_rec> TYPE any,
  <dyn_tab> TYPE STANDARD TABLE.


DATA:
  l_ref_type_descr_ddic   TYPE REF TO cl_abap_typedescr,
  l_ref_type_descr_line   TYPE REF TO cl_abap_typedescr,
  l_ref_struct_descr_line TYPE REF TO cl_abap_structdescr,
  l_tab_component         TYPE        cl_abap_structdescr=>component_table.

DATA:
  lop_tabledescr    TYPE REF TO cl_abap_tabledescr,
  ldp_dynaic_record TYPE REF TO data,
  ldp_dyn_table     TYPE REF TO data,
  lop_strucdescr    TYPE REF TO cl_abap_structdescr.


l_ref_type_descr_ddic = cl_abap_typedescr=>describe_by_name( gv_ddic_name ).
l_ref_struct_descr_line ?= l_ref_type_descr_ddic.
l_tab_component = l_ref_struct_descr_line->get_components( ).

lop_strucdescr = cl_abap_structdescr=>create( l_tab_component ).
CREATE DATA ldp_dynaic_record TYPE HANDLE lop_strucdescr.

lop_tabledescr ?= cl_abap_tabledescr=>create( p_line_type = lop_strucdescr ).
CREATE DATA ldp_dyn_table TYPE HANDLE lop_tabledescr.

ASSIGN ldp_dynaic_record->* TO <dyn_rec>.
ASSIGN ldp_dyn_table->* TO <dyn_tab>.

break TRON.
Es lässt sich mit einem beliebigen "DDIC Namen" (Tabelle oder Struktur) eine Feldleiste und interne Tabelle
erzeugen. Sozusagen das Pendant zu dem Funktionsbaustein LVC_FIELDCATALOG_MERGE,
welcher die Felddefinitionen für ein ALV beschafft.

lg Jens
Zuletzt geändert von Tron am 01.12.2014 12:22, insgesamt 1-mal geändert.

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
ralf.wenzel

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Dynamische Deklaration einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Moin,

danke - ich hab mir das mal angesehen, und frage mich gerade, welchen Vorteil der hat gegenüber dem, was weiter oben steht...
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Deklaration einer Tabelle

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
Die "dynamische" Komponente tritt noch stärker hervor, da über RTTI/RTTC zur Laufzeit wirklich jeder noch so kleine Teil der Struktur/Tabelle definiert bzw. geändert werden kann.

Wenn du später dann mal vor der Anforderung stehst das Ganze umzubauen, sodass z.B. nur ganz bestimmte Felder aus deinen Tabellen ausgelesen werden, hast du mit Trons Vorschlag schon mal den Grundstein dafür gelegt.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Dynamische Deklaration einer Tabelle

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
.. vermutlich keinen in diesem Fall.
Mein Vorschlag, ist die Vervollständigung des im Beitrag
http://www.abapforum.com/forum/viewtopi ... 61&p=57285
beschrieben Vorgehen, welcher eine Itab aus Einzelfeldern zusammenbaut.

lg Jens
(ich habe dazu sogar eine "renitente" Klasse angelegt.) :wink:
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Dynamische Deklaration einer Tabelle

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Erledigt, sry
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1309
Views
Interne Tabelle als Inline Deklaration?
von tekko » 08.09.2020 14:31 • Verfasst in ABAP® für Anfänger
9
Antw.
3936
Views
Deklaration einer internen Tabelle
von Fools » 01.12.2004 11:09 • Verfasst in ABAP® Core
1
Antw.
12453
Views
Deklaration interne Tabelle im Funktionsbaustein
von Mika Finn » 23.06.2009 11:36 • Verfasst in ABAP® Core
0
Antw.
1157
Views
Deklaration interne Tabelle in SmartForm
von Frank Zet. » 30.12.2008 10:25 • Verfasst in ABAP® Core
3
Antw.
2130
Views
Dynamische interne Tabelle
von c0lt.seavers » 01.08.2007 09:55 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

ABAP unter GUI und FIORI
vor 23 Stunden von wreichelt 3 / 49
MaLo-Checker in ABAP
vor einer Woche von ewx 5 / 128

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.