dynamische Tabellen in komplexen Strukturen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

dynamische Tabellen in komplexen Strukturen

Beitrag von mike81503 (ForumUser / 35 / 0 / 0 ) »
Hallo zusammen,


wie beschreibe ich mein Problem am besten (fiel mir schon in der Überschrift schwer).
Folgender Wunsch:

innerhalb einer internen Tabelle TAB1 möchte ich in einem Feld ein weitere interne Tabelle TAB2 speichern. Mein Wunsch wäre jetzt noch, dass diese interne Tabelle TAB2, in jeder Zeile (von TAB1) eine andere Struktur hat.

Leider habe ich noch keinen Weg gefunden, die Tabellenstruktur (TAB1) so zu definieren, dass ich während der Laufzeit verschieden strukturierte Tabellen übergeben kann.

Mit den Befehlen CREATE DATA und TYPE REF TO data habe ich noch wenig Erfahrung und bin mir nicht immer so ganz im Klaren, wie diese korrekt einzusetzen sind.

Ich habe mir im DDIC einen Tabellentyp definiert, der als Referenztyp DATA hat. Verwende ich den aber in der Tabellenstruktur TAB1, kann ich trotzdem keine beliebige Tabelle zuweisen.


Ich hoffe mein Anliegen wurde verstanden, und vielleicht kann mir ja jemand helfen.

Danke schon mal im voraus.

Gruss Michael

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


Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hallo,

ich würde in der Tabelle eine Objektreferenz "type ref to data" ablegen.
Beim Füllen der Tabelle kannst Du dann wie Du schon gesagt hast mit
"CREATE DATA Deine_Ref TYPE TABLE OF (Name_Struktur)." die nötigen Objekte kreieren.

Denke ich zumindest :lol:


Gruß,
Olli

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Ups, schlechte Antwort.
Sorry habe nicht zu Ende gelesen. :oops:

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Also noch schnell einen hinterher :P

Code: Alles auswählen.

REPORT  ztestrefdata.

DATA: gt_data TYPE zztestrefdata,
      wa_data TYPE zzteststrefdata.

CONSTANTS: co_tb01 TYPE tabname VALUE 'MARA',
           co_tb02 TYPE tabname VALUE 'MAKT',
           co_tb03 TYPE tabname VALUE 'VBAK'.

FIELD-SYMBOLS: <tab> TYPE ANY TABLE.

* MARA
CLEAR wa_data.
CREATE DATA wa_data-data TYPE TABLE OF (co_tb01).
ASSIGN wa_data-data->* TO <tab>.

SELECT * FROM mara UP TO 10 ROWS
  INTO TABLE <tab>.

APPEND wa_data TO gt_data.

* MAKT
CLEAR wa_data.
CREATE DATA wa_data-data TYPE TABLE OF (co_tb02).
ASSIGN wa_data-data->* TO <tab>.

SELECT * FROM makt UP TO 10 ROWS
  INTO TABLE <tab>.

APPEND wa_data TO gt_data.

* VBAK
CLEAR wa_data.
CREATE DATA wa_data-data TYPE TABLE OF (co_tb03).

ASSIGN wa_data-data->* TO <tab>.

SELECT * FROM vbak UP TO 10 ROWS
  INTO TABLE <tab>.

APPEND wa_data TO gt_data.

BREAK-POINT.
Struktur/Tabellentyp enthält Feld "data" vom Typ DATA, so wie Du es auch angelegt hast, wenn ich es jetzt richtig verstanden habe.
Ich hoffe das hilft.

Gruß,
Olli

Noch nicht ganz

Beitrag von mike81503 (ForumUser / 35 / 0 / 0 ) »
Hallo Olli,


erst einmal Danke für Deine ausführliche Antwort (von wegen Coding und so). So weit habe ich das verstanden und bei mir auch gemacht. Mit dieser Mimik habe ich mir z.B. einen 'universellen' ALV-Viewer für beliebige Tabellen gebaut.

Mein Hauptproblem im Moment ist jedoch, wie kann ich innerhalb einer internen Tabelle generische Tabellen 'speichern' ?.


Im DDIC habe ich mir eine Struktur definiert (von der internen Tabelle, die meine anderen Tabellen speichern soll):

Felder Komponententyp

TABNAME TABNAME CHAR 30 0 Tabellenname
DDTEXT DDTEXT CHAR 60 0 Erläuternder Kurztext
DATA_TABLE ZDATA_TABLE_T 0 0 generischer Tabellentyp


Der Komponententyp ZDATA_TABLE_T ist ein Tabellentyp mit Referenztyp DATA (vordefinierter Typ). Ich dachte das wäre generisch genug ;-)

Ich kann aber keine Zuweisungen von verschiedenen internen Tabellen auf dieses eine Feld (DATA_TABLE) treffen (ich steh da auch total auf dem Schlauch, wie so eine Zuweisung überhaupt aussehen müsste). :-(

Wenn Du in Deinem Beispiel alle drei Tabellen in einer internen Tabelle speichern wolltest, wie würde das aussehen ?

Hast Du mein Problem verstanden ?


Gruss Michael

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hi Michael,

im Moment verstehe ich dein Problem noch nicht :oops:

Ich habe den Quellcode nochmal etwas abgeändert. Es werden Sätze aus der VBAP in eine interne Tabelle gelesen. Der Inhalt der internen Tabelle wird dann einem Datenobjekt zugewiesen... Ich habe auch deine Strukturvorgabe berücksichtigt, allerdings heißt das Textfeld etwas anders...

Code: Alles auswählen.


REPORT  ztestrefdata.

DATA: gt_data TYPE zztestrefdata,
      wa_data TYPE zzteststrefdata.

DATA: gt_vbap TYPE TABLE OF vbap.

FIELD-SYMBOLS: <tab> TYPE ANY TABLE,
               <wa>  TYPE ANY.

DO 3 TIMES.
  CASE sy-index.
    WHEN '1'.
      wa_data-tabname = 'MARA'.
      wa_data-ktext = 'Materialien'.
    WHEN '2'.
      wa_data-tabname = 'MAKT'.
      wa_data-ktext = 'Materialtexte'.
    WHEN '3'.
      wa_data-tabname = 'VBAK'.
      wa_data-ktext = 'Vertriebsbeleg'.
  ENDCASE.

* Datenobjekt instanzieren
  CREATE DATA wa_data-data TYPE TABLE OF (wa_data-tabname).
  ASSIGN wa_data-data->* TO <tab>.

* Daten selektieren aus Datenbank
  SELECT * FROM (wa_data-tabname) UP TO 10 ROWS
    INTO TABLE <tab>.

  APPEND wa_data TO gt_data.

ENDDO.

* alternativ Zuweisung aus itab
  SELECT * FROM vbap UP TO 10 ROWS
    INTO TABLE gt_vbap.

    wa_data-tabname = 'VBAP'.
    wa_data-ktext = 'Vertriebsbelegpos.'.

* Datenobjekt instanzieren
  CREATE DATA wa_data-data TYPE TABLE OF (wa_data-tabname).
  ASSIGN wa_data-data->* TO <tab>.

* Zuweisung aus Itab
  <tab> = gt_vbap[].

  APPEND wa_data TO gt_data.

* Daten sinnlos ausgeben ( Unicodeprüfung deaktiviert )
  LOOP AT gt_data INTO wa_data.
    WRITE: / 'Daten aus Tabelle ' ,wa_data-tabname.

    ASSIGN wa_data-data->* TO <tab>.
      LOOP AT <tab> ASSIGNING <wa>.
       WRITE / <wa>.
      ENDLOOP.

      SKIP 4.
  ENDLOOP.

BREAK-POINT.

Hilft das? Ansonsten gerne fragen. Irgendwie kommen wir schon auf einen Nenner :P

Gruß,
Oliver

Jetzt hat's 'geschnackelt'

Beitrag von mike81503 (ForumUser / 35 / 0 / 0 ) »
Hallo Oliver,


Du hast mein Problem doch ganz gut verstanden. Mit Deinem zweiten Beispiel habe ich meine Fehler erkannt. Hier mal den Codingausschnitt:

Code: Alles auswählen.


*(1) DATA: data_tab  TYPE REF TO data.

  FIELD-SYMBOLS: <data_tab>, <data_tab2>.


  CREATE  DATA  tab_line-data_table
                     TYPE   STANDARD TABLE  OF  iflot.
*(2)  CREATE  DATA  data_tab
*                     TYPE   STANDARD TABLE  OF  iflot.

  ASSIGN  mares_line-data_table->* TO <data_tab>.
*(3)  ASSIGN  data_tab->* TO <data_tab>.


  <data_tab> = gt_iflot[].

  tab_line-tabname     = 'IFLOT'.
  tab_line-ddtext        = 'Technischer Platz '.

*(4)  tab_line-data_table  = <data_tab>.

  APPEND tab_line  TO  gt_tab.

Beim 'Experimentieren mit den (für mich) relativ neuen Befehlen, habe ich die auskommentierten Zeilen benutzt und dabei übersehen, dass ich ja eigentlich die workarea tab_line versorgen muss (1) - (3).

Zusätzlich habe ich noch den Fehler gemacht, nochmals explizit die interne Tabelle <data_tab> zuzuweisen (4).

Zu guter letzt, habe ich in meiner Struktur im DDIC einen Tabellentyp in meinem Feld für die interne Tabelle hinterlegt. Richtig wäre aber ein Feld mit Referenz auf den Typ DATA gewesen. Das konnte ich Deinem Coding zwar nicht entnehmen, aber ein bischen was sollte ich ja auch noch nachdenken ;-).

Es funktioniert jetzt, und ich habe wieder etwas dazugelernt. Danke.


Gruss Michael

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Prima, dann ist ja alles klar.

Viele Grüße,
Oliver

Seite 1 von 1

Vergleichbare Themen

14
Antw.
1103
Views
auf Tabellen in Strukturen zugreifen
von Micha_ela » 07.06.2023 15:46 • Verfasst in ABAP® für Anfänger
1
Antw.
2608
Views
Tabellen/Strukturen zusammenführen
von m4rkusr » 19.10.2006 08:00 • Verfasst in ABAP® Core
6
Antw.
5605
Views
Auf Strukturen untypisierter Tabellen zugreifen
von Timo7 » 18.10.2006 12:56 • Verfasst in ABAP® Core
8
Antw.
3958
Views
dynamische Tabellen
von juli » 11.08.2005 14:31 • Verfasst in ABAP® für Anfänger
1
Antw.
1362
Views
dynamische Tabellen
von Kaiwalker » 15.06.2005 10:28 • Verfasst in ABAP® Core

Über diesen Beitrag


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

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.