Создать структуру из динамически назначенного <itab> - PullRequest
0 голосов
/ 03 сентября 2018

В методе у меня есть ссылка на таблицу, которая была объявлена ​​так:

DATA: tabname TYPE tabname,
      dref    TYPE REF TO data,
FIELD-SYMBOLS: <itab> TYPE ANY TABLE.

CREATE DATA dref TYPE TABLE OF (tabname).
ASSIGN dref->* TO <itab>.
SELECT * FROM (tabname)
UP TO 5 ROWS
INTO TABLE <itab>.

Как мне создать структуру / ва на основе?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

1.Вы определяете ANY символ поля и используете ASSIGNING

 FIELD-SYMBOLS:
      <line> type any.

 LOOP at <itab> ASSIGNING <line>.

 ENDLOOP.

2.Вы определяете ANY символ поля и используете INTO

 FIELD-SYMBOLS:
      <line> type any.

 CREATE DATA dref like line of <itab>.
 ASSIGN dref->* to <line>.

 LOOP at <itab> INTO <line>.

 ENDLOOP.
0 голосов
/ 03 сентября 2018

Просто используйте хороший RTTS для этого. Вы можете создать ссылку и читать прямо в нее

FIELD-SYMBOLS: <itab> TYPE STANDARD TABLE.
DATA: ref_wa        TYPE REF TO data,
      ref_rowtype   TYPE REF TO cl_abap_structdescr,
      ref_tabletype TYPE REF TO cl_abap_tabledescr.

ref_rowtype ?= cl_abap_typedescr=>describe_by_name( tabname ).

CREATE DATA ref_wa TYPE HANDLE ref_rowtype.
READ TABLE <itab> REFERENCE INTO ref_wa INDEX 1.

или создайте символ поля на основе этой ссылки и используйте его в READ TABLE

ASSIGN ref_wa->*  TO FIELD-SYMBOL(<fsym_wa>).
READ TABLE <itab> ASSIGNING <fsym_wa> INDEX 1.

Обратите внимание, я объявил <itab> как STANDARD таблицу, чтобы избавиться от полученной операции с ошибкой индекса.

enter image description here

ОБНОВЛЕНИЕ : для создания структуры из <itab> объекта используйте следующий синтаксис:

ref_tabletype ?= cl_abap_typedescr=>describe_by_data( <itab> ).
ref_rowtype  ?= ref_tabletype->get_table_line_type( ).

Последние две строки будут идентичны.

0 голосов
/ 03 сентября 2018

Вы можете использовать встроенную декларацию для определения WA следующим образом. READ TABLE <itab> INTO (<wa>) или сначала объявите символ WA / Field, используя FIELD SYMBOL <wa> TYPE ANY, затем прочитайте таблицу с помощью READ TABLE <tab> ASSIGNING <wa>

...