Dynami c ASSIGN выражения строки таблицы - PullRequest
1 голос
/ 13 февраля 2020

В моем отчете ABAP у меня есть некоторая структура:

data: 
  begin of struct1,
    field1 type char10,
  end of struct1.

Я могу получить доступ к ее полю field1 напрямую:

data(val) = struct1-field1

или динамически с присвоением:

assign ('struct1-field1') to field-symbol(<val>).

Также у меня есть некоторая внутренняя таблица:

data: table1 like standard table of struct1 with default key.
append initial line to table1.

Я могу получить доступ к столбцу field1 первой строки напрямую:

data(val) = table1[ 1 ]-field1.

Но я не могу получить доступ к field1 с помощью Dynami c assign:

assign ('table1[ 1 ]-field1') to field-symbol(<val>).

После присваивания sy-subr c равно «4».

Почему?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Сандра абсолютно права, если табличные выражения не указаны в справке, то они не допускаются.

Вы можете использовать оператор ASSIGN COMPONENT для своей динамичности:

FIELD-SYMBOLS: <tab> TYPE INDEX TABLE.

ASSIGN ('table1') TO <tab>.
ASSIGN COMPONENT 'field1' OF STRUCTURE <tab>[ 1 ] TO FIELD-SYMBOL(<val>).

Однако такая динамика возможна только для таблиц индекса (стандартные + отсортированные) из-за характера этой версии спецификации строки . Если вы попытаетесь передать хешированную таблицу в символ поля, она выдаст дамп.

2 голосов
/ 13 февраля 2020

Синтаксис ASSIGN (syntax1) ... не совпадает с синтаксисом правой стороны (RHS) присвоений ... = syntax2.

Синтаксис для ASSIGN объяснен в документации ASSIGN (variable_containing_name) ... или ASSIGN ('name') ... (глава 1. (имя) страницы ASSIGN - dynamic_dobj).

Вот краткое изложение того, что принято:

  • "name может содержать цепочку имен, состоящую из селекторов компонентов [(-)] "
  • ", первое имя [может быть], за которым следует селектор компонентов объекта (->) "
  • «первое имя [может быть] сопровождаемое селектором компонента класса (=>

Нет упоминания о табличных выражениях, поэтому они запрещены. То же самое для сеток ...

Относительно RHS назначений, как описано в документации , это может быть:

  • Объекты данных
  • Возвращаемые значения или результаты функциональных методов, возвращаемые значения или результаты встроенных функций и выражений конструктора или возвращаемые значения или результаты табличных выражений
  • Результаты выражений вычисления
...