首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个itabs之间合并深度结构中的嵌套表

在两个itabs之间合并深度结构中的嵌套表
EN

Stack Overflow用户
提问于 2022-01-25 04:22:44
回答 1查看 1.2K关注 0票数 0

我需要一些帮助,以找到合并一些嵌套表的最快和最简单的方法。例如:

代码语言:javascript
复制
TYPES: BEGIN OF TEST,
        SFLIGHT1 TYPE SFLIGHT,
        MARA1    TYPE MARA,
        END OF TEST.

DATA: ITAB TYPE TABLE OF TEST,
      WA   TYPE TEST.
DATA: ITAB2 TYPE TABLE OF TEST,
      WA2   TYPE TEST.
DATA: LT_SFLIGHT1 TYPE SFLIGHT,
      LT_SFLIGHT2 TYPE SFLIGHT.
DATA: LT_MARA1 TYPE MARA,
      LT_MARA2 TYPE MARA.

WA-SFLIGHT1 = LT_SFLIGHT1.
WA-MARA1 = LT_MARA1.
APPEND WA TO ITAB.

WA2-SFLIGHT2 = LT_SFLIGHT2.
WA2-MARA2 = LT_MARA2.
APPEND WA2 TO ITAB2.

现在,我想添加从ITAB到ITAB2,WA-SFLIGHT2 1到WA2-SFLIGHT 2和WA2-MARA1到WA2-MARA2的行,而不需要在ITAB2中创建新的行。

例如: ITAB有1行,WA-SFLIGHT1 1有3行,WA-MARA1 1有6行。ITAB2有1条,WA2-SFLIGHT 2有6条,WA2-MARA2有6条。现在我想把want 1的3行和WA-MARA1从ITAB到WA2-SFLIGHT 2和WA2-MARA2的6行添加到ITAB2中。最后,ITAB2有1条WA2-SFLIGHT 2,9条(3条来自ITAB),WA2-MARA2有12条(6条来自ITAB)。

它应该是动态的,因为在我的例子中,我有一个深层次的结构,有6个表,我需要在ITAB中追加一个新的结构,而不需要在ITAB本身中创建一个新的行,只在结构表中。

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-25 07:20:23

代码语言:javascript
复制
    TYPES tt_sflight TYPE STANDARD TABLE OF sflight WITH EMPTY KEY.
    TYPES tt_mara TYPE STANDARD TABLE OF mara WITH EMPTY KEY.
    TYPES: BEGIN OF ts_test,
             t_flight TYPE tt_sflight,
             t_mara   TYPE tt_mara,
           END OF ts_test,
           tt_test TYPE STANDARD TABLE OF ts_test WITH EMPTY KEY.
    
    DATA(ls_test1) = VALUE ts_test(
      t_flight = VALUE #(
        ( carrid = 11 )
        ( carrid = 12 )
        ( carrid = 13 )
      )
      t_mara = VALUE #(
        ( matnr = '11' )
        ( matnr = '12' )
        ( matnr = '13' )
      )
    ).
    
    DATA(ls_test2) = VALUE ts_test(
      t_flight = VALUE #(
        ( carrid = 21 )
        ( carrid = 22 )
        ( carrid = 23 )
      )
      t_mara = VALUE #(
        ( matnr = '21' )
        ( matnr = '22' )
        ( matnr = '23' )
      )
    ).
    
    DATA(lt_test1) = VALUE tt_test( ( ls_test1 ) ).
    DATA(lt_test2) = VALUE tt_test( ( ls_test2 ) ).
    
    "1.Merge struct
    APPEND LINES OF ls_test1-t_flight TO ls_test2-t_flight.
    APPEND LINES OF ls_test1-t_mara TO ls_test2-t_mara.
    BREAK-POINT.
    
    "2.Merge tables
    DATA(lps_dst) = REF #( lt_test2[ 1 ] ).
    APPEND LINES OF lt_test1[ 1 ]-t_flight TO lps_dst->t_flight.
    APPEND LINES OF lt_test1[ 1 ]-t_mara TO lps_dst->t_mara.
    BREAK-POINT.

"3.Merge tables of same struct dynamic
FIELD-SYMBOLS <t_data1> TYPE ANY TABLE.
FIELD-SYMBOLS <t_data2> TYPE ANY TABLE.
DO.
  ASSIGN COMPONENT sy-index OF STRUCTURE ls_test1 TO FIELD-SYMBOL(<any1>).
  IF sy-subrc NE 0.
    EXIT.
  ENDIF.
  DESCRIBE FIELD <any1> TYPE DATA(lv_type).
  CHECK lv_type = 'h'. "Table

  ASSIGN <any1> TO <t_data1>.
  ASSIGN COMPONENT sy-index OF STRUCTURE ls_test2 TO <t_data2>.

  INSERT LINES OF <t_data1> INTO TABLE <t_data2>.
ENDDO.
BREAK-POINT.

"4. Merge tables of corresponding struct dynamic
DATA(lt_comp) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( ls_test1 ) )->get_included_view( ).
LOOP AT lt_comp REFERENCE INTO DATA(lps_comp)
  WHERE type->kind = cl_abap_structdescr=>kind_table.

  ASSIGN COMPONENT lps_comp->name of STRUCTURE ls_test2 to <t_data2>.
  CHECK sy-subrc = 0.

  ASSIGN COMPONENT lps_comp->name of STRUCTURE ls_test1 to <t_data1>.
  CHECK sy-subrc = 0.

  INSERT LINES OF <t_data1> INTO TABLE <t_data2>.
ENDLOOP.
BREAK-POINT.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70843405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档