1

在一个方法中,我引用了一个声明如下的表:

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>.

如何创建基于 的结构?

4

3 回答 3

3

只需为此使用好的 ol' 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表以摆脱您得到的索引错误操作。

在此处输入图像描述

更新:从对象创建结构<itab>使用以下语法:

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

最后两行将是相同的。

于 2018-09-03T08:39:26.377 回答
1

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.
于 2018-09-03T08:24:23.390 回答
0

您可以像这样使用内联声明来定义 WA。READ TABLE <itab> INTO (<wa>)或先声明 WA/Field 符号,FIELD SYMBOL <wa> TYPE ANY然后使用读取表READ TABLE <tab> ASSIGNING <wa>

于 2018-09-03T05:53:36.747 回答