Ich versuche einen Weg zu finden, eine interne Tabelle zu lesen, die dynamisch erstellt werden muss. Ich habe den folgenden Bericht erstellt, der eine dynamische interne Tabelle mit Daten füllt. In der letzten Zeile versuche ich es mit einem Schlüssel zu lesen (zB mandt
). Das Problem ist, dass ich den Fehler bekomme, "der angegebene Typ hat keine Struktur und daher keine Komponente namens MANDT".Lesen von itab mit dynamischer Schlüsselspezifikation
Ich habe debugged und ich kann sehen, dass erfolgreich ausgefüllt wurde und die Struktur der Tabelle (Feldnamen) korrekt sind. Das Problem stellt sich, wenn ich versuche, die Tabelle in einen Arbeitsbereich zu lesen. Vielleicht mache ich das falsch, aber es scheint so etwas wie möglich zu sein, und ich habe das Gefühl, dass ich etwas Kleines vermisse.
Der Grund, warum ich das ausprobiere, ist, dass ich identische Selects in einem Programm gefunden habe und Datensätze im Speicher puffern und von dort lesen möchte, um DB-Zugriffe zu vermeiden. Dies ist einfach zu implementieren, aber ich habe dies nicht getan, wenn die Tabelle, where
Klausel und into
Klausel der OPEN SQL-Anweisung, die ich versuche zu optimieren sind dynamisch.
Prost.
DATA: t681_rep TYPE TABLE OF t681 , wa_681 LIKE LINE OF t681_rep,
tabref TYPE REF TO data , waref TYPE REF TO data.
FIELD-SYMBOLS: <any_tab> TYPE ANY TABLE,
<any_wa> TYPE ANY,
<var1> TYPE ANY.
"fill t681_rep
SELECT *
FROM t681
INTO TABLE t681_rep
UP TO 1 ROWS WHERE kotab = 'A002'.
READ TABLE t681_rep INTO wa_681 WITH KEY kotab = 'A002'.
IF sy-subrc = 0.
"if A002 is found create a table of that type and fill it
CREATE DATA tabref TYPE TABLE OF (wa_681-kotab).
ASSIGN tabref->* TO <any_tab>.
SELECT * UP TO 10 ROWS
FROM (wa_681-kotab)
INTO TABLE <any_tab>.
ENDIF.
CREATE DATA waref TYPE a002.
ASSIGN waref->* TO <any_wa>.
READ TABLE <any_tab> ASSIGNING <any_wa> WITH KEY mandt = '800'. <- problem area
IF sy-subrc = 0.
"do stuff with <any_wa>...
ENDIF.
Hallo Brian, vielen Dank für Ihre Antwort. Das funktioniert, aber ich suche eine voll dynamische Lösung. In Pseudocode so etwas wie: –
Etwas scheint von diesem Kommentar zu fehlen ... –