Verschachtelte Interne Tabelle zugreifen

Getting started ... Alles für einen gelungenen Start.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Verschachtelte Interne Tabelle zugreifen

Beitrag von L0w-RiDer (Specialist / 327 / 63 / 1 ) » 22.09.2020 13:02
Hallo zusammen,

ich würde gerne auf eine geschachtelte interne Tabelle zugreifen, bloß leider funktioniert das Ganze nicht wie erhofft und wie ich im Internet nachgelesen habe.

und zwar habe ich eine interne Tabelle die gt_output heißt. Diese hat wiederum ein Feld, welches Bom heißt und auch eine interne Tabelle darstellt (Siehe Bild 1). In dieser ist wieder ein Feld names RG, welches auch wiederum eine interne Tabelle darstellt (Siehe Bild 2). Über diese interne Tabelle würde ich gerne loopen.

Leider hat es mit dem Codebeispiel aus dem Internet nicht geklappt.

Weiß jemand wie man sowas hinbekommt?

Vielen Dank im Voraus.


Re: Verschachtelte Interne Tabelle zugreifen

Beitrag von a-dead-trousers (Top Expert / 3539 / 115 / 918 ) » 22.09.2020 13:07
Einfach die "Verschachtelung" entsprechend auflösen:

Code: Alles auswählen.

loop at gt_output assigning field-symbol(<ls_output>).
  loop at <ls_output>-bom assigning field-symbol(<ls_bom>).
    loop at <ls_bom>-rg assigning field-symbol(<ls_rg>).
* Hier die Verarbeitung rein.
    endloop.
  endloop.
endloop.
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.07
Basis: 7.40

Re: Verschachtelte Interne Tabelle zugreifen

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 22.09.2020 14:01
Wenn der LOOP nur über genau eine Zeile von gt_output und genau ein definiertes bom daraus gehen soll, kann man auch ohne geschachtelte LOOPs einfach schreiben:

Code: Alles auswählen.

DATA(gs_output) = gt_output[ Zeilenkriterium ].

DATA(lt_bom) = gs_output-bom[ Zeilenkriterium ].

LOOP AT lt_bom-rg ASSIGNING FIELD-SYMBOL(<ls_rg>).

ENDLOOP.
Was ich noch nicht ausprobiert habe, ist, ob man auch einfach

LOOP AT gt_output[ Zeilenkriterium ]-bom[ Zeilenkriterium ]-rg ASSIGNING FIELD-SYMBOL(<ls_rg>).

schreiben könnte.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
L0w-RiDer


Re: Verschachtelte Interne Tabelle zugreifen

Beitrag von L0w-RiDer (Specialist / 327 / 63 / 1 ) » 23.09.2020 10:26
Okay, super.

Hat funktioniert.

Vielen Dank!

Re: Verschachtelte Interne Tabelle zugreifen

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 23.09.2020 18:51
Wobei meine Lösung auch suboptimal ist, da sie Kopien der geschachtelten internen Tabellen im Speicher anlegt und dadurch auch nur zum Lesen daraus taugt. Spätestens wenn Du die geschachtelten Tabellen auch verändern möchtest, solltest Du stattdessen konsequent mit Feldsymbolen arbeiten, also:

Code: Alles auswählen.

ASSIGN gt_output[ Zeilenkriterium ] TO FIELD-SYMBOL(<gs_output>).

ASSIGN <gs_output>-bom[ Zeilenkriterium ] TO FIELD-SYMBOL(<bom>).

LOOP AT <bom>-rg ASSIGNING FIELD-SYMBOL(<ls_rg>).

ENDLOOP.
Das ist performanter, verbraucht weniger Speicher, und Du kannst die Tabellenwerte auch nach Belieben verändern oder der internen Tabelle <bom>-rg per APPEND oder INSERT weitere Zeilen hinzufügen.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
L0w-RiDer


Seite 1 von 1

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

interne Tabelle zugreifen im Unterprogramm
von meliz » 25.05.2008 15:17
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28
Verschachtelte LOOP
von AnnaNRW » 05.01.2016 15:36
interne Tabelle in andere interne Tabelle (Format)
von Gast » 20.10.2004 14:44