2
DATA: BEGIN OF line,
        CUOBJ TYPE CUOBJ,
        tab_atinn   TYPE STANDARD TABLE OF ATINN WITH DEFAULT KEY,
   END OF line.

  DATA:
    CUBOBJ_TABLE LIKE STANDARD TABLE OF line WITH DEFAULT KEY.

...

DATA(table) = CUBOBJ_TABLE[ CUOBJ = value-instance ]-tab_atinn.
      IF NOT line_exists( table[ currentatinn ] ).
        INSERT currentatinn INTO table INDEX 1.
      ENDIF.

我正在尝试在 CUOBJ_TABLE [..]-tab_atinn 中添加一个新行。执行代码后,表变量将有一个新行,但 CUBOBJ_TABLE[ CUOBJ = value-instance ]-tab_atinn 表没有它。

如何使用引用或其他东西将它直接添加到 CUBOBJ_TABLE[ CUOBJ = value-instance ]-tab_atinn 中?

4

2 回答 2

4

准确地参考,问题是分配:

DATA(table) = CUBOBJ_TABLE[ CUOBJ = value-instance ]-tab_atinn.

这将创建一个与 tab_atinn 字段具有相同值的新表。然后将条目添加到这个新表中,而不影响 CUOBJ_TABLE 中的深层表。您需要的是指向要更改的表的引用,因此它实际上更新了表而不是它的副本,类似于下面的代码应该可以工作。

TYPES: atinn_tab TYPE STANDARD TABLE OF atinn WITH DEFAULT KEY.

DATA: BEGIN OF line,
        cuobj     TYPE cuobj,
        tab_atinn TYPE atinn_tab,
      END OF line.

DATA:
  cubobj_table   LIKE STANDARD TABLE OF line WITH DEFAULT KEY,
  value_instance TYPE                   cuobj,
  current_atinn  TYPE                   atinn.

...

data(table_ref) = REF atinn_tab( cubobj_table[ cuobj = value_instance ]-tab_atinn ).
IF NOT line_exists( table_ref->*[ current_atinn ] ).
  INSERT current_atinn INTO table_ref->* INDEX 1.
ENDIF.
于 2020-09-26T02:31:29.930 回答
1

只是为了检查你不需要辅助变量的存在

IF NOT line_exists( cubobj_table[ cuobj = 'VAL' ]-tab_atinn[ '0000000020' ] ).

ENDIF.

但是要添加一条线,您需要

READ TABLE cubobj_table WITH KEY cuobj = 'VAL' ASSIGNING FIELD-SYMBOL(<fs_cubobj>).
INSERT atinn INTO <fs_cubobj>-tab_atinn INDEX 1.

因为 INSERT 不允许将表表达式放在itab_position中。

于 2020-09-28T09:29:35.267 回答