Я пытаюсь разработать способ чтения внутренней таблицы, которая должна создаваться динамически. Я создал следующий отчет, который заполняет динамическую внутреннюю таблицу данными.
В последней строке я пытаюсь прочитать его с помощью ключа (например, mandt
), но я получаю эту синтаксическую ошибку:
Указанный тип не имеет структуры и, следовательно, не имеет компонента называется MANDT
Я отладил и вижу, что <любая_вкладка>
успешно заполнена и структура таблицы (имена полей) верна. Проблема возникает, когда я пытаюсь прочитать таблицу в рабочей области.Может быть, я делаю это неправильно, но кажется, что это должно быть возможно сделать, и у меня такое чувство, что я упускаю что-то маленькое.
Причина, по которой я пытаюсь это сделать, заключается в том, что я обнаружил идентичные выборки, происходящие в программе, и хочу буферизовать записи в памяти и читать их оттуда, чтобы избежать доступа к БД. Это легко реализовать, однако я не сделал этого, когда таблица where
и into
предложения OPEN SQL, которые я пытаюсь оптимизировать, являются динамическими.
Как исправить синтаксическую ошибку?
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.