LOOP AT
Ошибка около LOOP AT
( Внутренняя таблица "<FS>
" не имеет строки заголовка - требуется одно из дополнений "INTO wa", "ASSIGNING", "REFERENCE INTO", "TRANSPORTING NO FIELDS" ), это то, что вы не указываете часть «результата» LOOP AT
, т. Е. НАЗНАЧЕНИЕ, ССЫЛКА НА ... (как сказано в сообщении).
Для символа поля только LOOP AT всегда недопустим, а если это переменная вместо символа поля, то она устарела, поскольку это подразумевает использование строки заголовка.
LOOP AT <fs>. " always invalid !
Допустимый синтаксис может быть следующим: вы должны объявить символ поля как внутреннюю таблицу (по крайней мере со словом TABLE
или обратиться к «типу таблицы»), для которой поддерживается любая категория внутренней таблицы LOOP AT (хешированный, отсортированный, стандартный), поэтому вы можете использовать TYPE ANY TABLE
:
DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
FIELD-SYMBOLS: <fs> TYPE ANY TABLE.
ASSIGN (ex_tbl_name) TO <fs>.
LOOP AT <fs> ASSIGNING FIELD-SYMBOL(<line>).
ENDLOOP.
ЧИТАТЬ СТОЛ
Ошибка около READ TABLE
( Нельзя использовать явные или неявные операции с индексами для таблиц с типами «HASHED TABLE» или «ANY TABLE». «<FS>
» имеет тип «ANY TABLE». возможно, что добавление «TABLE» не было указано до «<FS>
» ), если вы использовали READ TABLE ... INDEX ...
, чей INDEX означает, что его можно использовать только с внутренней таблицей категории SORTED
или STANDARD
.
Следующий код недействителен из-за комбинации ЛЮБОГО TABLE и READ TABLE INDEX, потому что <FS>
может в конечном итоге быть внутренней таблицей hashed (кто знает), тогда READ TABLE INDEX завершится ошибкой, следовательно ошибка компилятора:
DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
FIELD-SYMBOLS: <fs> TYPE ANY TABLE. " <=== impossible with READ TABLE INDEX !
ASSIGN (ex_tbl_name) TO <fs>.
READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1. " <=== impossible with ANY TABLE !
Решение: для использования READ TABLE <fs> INDEX ...
вы можете объявить символ поля как SORTED, STANDARD или INDEX (последнее - это общее имя, соответствующее SORTED и STANDARD).
Этот код действителен:
DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
FIELD-SYMBOLS: <fs> TYPE INDEX TABLE.
ASSIGN (ex_tbl_name) TO <fs>.
READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1.
Конечно, предполагается, что G_TAB является индексной таблицей, а не хеш-таблицей!
PS: в своем коде вы использовали INTO DATA(lv_fs)
, но обычно, если у вас есть общая внутренняя таблица, ASSIGNING
предпочтительнее.