SAP ABAP将动态表行添加到动态内部表

Nik*_*las 1 sap abap

我想在动态内部表中添加动态表格行.

DATA:   lo_structdescr    TYPE REF TO cl_abap_structdescr,
      lo_tabledescr     TYPE REF TO cl_abap_tabledescr,
      lt_components     TYPE abap_component_tab,
      ls_component      TYPE LINE OF abap_component_tab,
      lt_keys           TYPE abap_keydescr_tab,
      lt_table          TYPE REF TO data,
            ls_table          TYPE REF TO data.

FIELD-SYMBOLS: <ls_table>  TYPE any,
               <lt_table>  TYPE ANY TABLE,
               <lv_value> TYPE any.


MOVE 'COMP1' TO ls_component-name.
ls_component-type ?= cl_abap_elemdescr=>get_string( ).
INSERT ls_component INTO TABLE lt_components.

MOVE 'COMP2' TO ls_component-name.
ls_component-type ?= cl_abap_elemdescr=>get_i( ).
INSERT ls_component INTO TABLE lt_components.

lo_structdescr ?= cl_abap_structdescr=>create( lt_components ).

CREATE DATA ls_table TYPE HANDLE lo_structdescr.
ASSIGN ls_table->* TO <ls_table>.

lo_tabledescr ?= cl_abap_tabledescr=>create( p_line_type  = lo_structdescr
                                             p_table_kind = cl_abap_tabledescr=>tablekind_hashed
                                             p_unique     = abap_true
                                             p_key        = lt_keys
                                             p_key_kind   = cl_abap_tabledescr=>keydefkind_default ).

CREATE DATA lt_table TYPE HANDLE lo_tabledescr.
ASSIGN lt_table->* TO <lt_table>.


ASSIGN COMPONENT 'COMP1' OF STRUCTURE <ls_table> TO <lv_value>.
<lv_value> = 'test'.

APPEND <ls_table> TO <lt_table>.
Run Code Online (Sandbox Code Playgroud)

最后一行是问题所在.我收到此语法错误:

您不能对类型为"HASHED TABLE"或"ANY TABLE"的表使用显式或隐式索引操作."<LT_TABLE>"的类型为"ANY TABLE".可能在"<LT_TABLE>"之前未指定"TABLE"添加.

我该如何在表格中添加一行?

DW8*_*per 10

使用INSERT <ls_table> INTO TABLE <lt_table>.是正确的,但语法错误的原因是您将字段符号定义为:

      <lt_table>  TYPE ANY TABLE, 
Run Code Online (Sandbox Code Playgroud)

由于您的程序被硬编码为使用散列表,因此您应该将字段符号定义为

      <lt_table>  TYPE HASHED TABLE,
Run Code Online (Sandbox Code Playgroud)

通过这样做,语法检查器可以为您提供更好的语法检查,因为它知道表的基本类型.

语法错误告诉您的是,使用append只能用于可通过索引访问的表(标准和已排序),因为ANY TABLE可能是哈希表(只能通过键访问),您无法附加到它.


vwe*_*ert 5

使用INSERT操作:

INSERT <ls_table> INTO TABLE <lt_table>.
Run Code Online (Sandbox Code Playgroud)

我希望你知道你在做什么.通过所有通用数据处理,我怀疑任何人都能够理解你想要解决的问题.