Мой ответ был проверен на ABAP 7.52.К сожалению, в настоящее время возможно использовать только подмножество статического варианта ASSIGN
, используя LET <fs> = writable_expression IN
внутри выражения конструкции (включая «FOR
» итерации таблицы ), где «записываемое выражение»ограничивается табличным выражением, NEW и CAST.Так что он довольно ограничен, нет эквивалентов для динамических вариантов ASSIGN
, поэтому вы можете использовать только обходные пути.
Синтаксис после WHERE
допускает динамическое выражение, поэтомуможно будет ввести WHERE ('LGART = KNOWN_LINE-LGART')
.Однако это может быть очень неэффективно, если цикл вложен в другой цикл (как в вашем случае), поэтому следует определить индекс, чтобы ускорить итерацию.Если должен использоваться вторичный индекс, то условие должно быть USING KEY ('KEYNAME') WHERE ('LGART = KNOWN_LINE-LGART')
.
Теперь вот обходной путь для вашего конкретного случая: вы статически определяете имена компонентов, поэтому одна возможность состоит в том, чтобы определитьстатическая структура с именами этих компонентов и использование оператора построения CORRESPONDING
.Обратите внимание, что я не тестировал его, но я думаю, что по нескольким причинам производительность использования CORRESPONDING
в вашем случае выше, чем при использовании ASSIGN
.
Следующий код должен работать.Я предполагаю, что внутренняя таблица за <dynamic_table>
имеет первичный ключ, отсортированный по LGART
(TYPE SORTED TABLE OF ... WITH NON-UNIQUE KEY lgart
), так что производительность хорошая:
TYPES: BEGIN OF ty_struc,
lgart TYPE string,
betrg TYPE string,
betpe TYPE string,
END OF ty_struc.
known_table = VALUE #( ( lgart = 'A' ) ( lgart = 'B' ) ).
also_known_table = VALUE #( ( lgart = 'A' ) ( lgart = 'C' ) ( lgart = 'A' ) ).
ASSIGN also_known_table TO <dynamic_table>.
APPEND LINES OF
VALUE ty_results(
FOR known_line IN known_table
FOR <inner_line> IN <dynamic_table>
WHERE ('LGART = KNOWN_LINE-LGART')
LET struc = CORRESPONDING ty_struc( <inner_line> ) IN
( lgart = known_line-lgart
betrg = struc-betrg
betpe = struc-betpe ) )
TO mt_period_results.