使用参考字段符号挑战在分组依据处循环

2020-09-01 06:26发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)是否可以对从动态表引用中取消引用...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


是否可以对从动态表引用中取消引用的表字段符号使用"组循环"?

FIELD-SYMBOLS 类型标准表。
FIELD-SYMBOLS 类型任意。

ASSIGN ir_data-> *至
创建数据lo_data类似于的行。
ASSIGN lo_data-> * TO

将LOOP AT 放入 GROUP BY (type = -kurst)
(type =无效,因为没有 结构且没有组件库斯特(Kurst)

13条回答
梦想连接
2020-09-01 07:20

好! 这是一个非常有趣的代码,我以前从未见过! :)

使用此编码,可以揭示LOOP GROUP BY的内核逻辑:内部表上存在第一个内核循环,在该循环中针对每一行调用该方法,其结果分组为 临时表,然后在该临时表上发生第二个内核循环,并执行LOOP内部的代码。

如果内部表太大,我担心性能。 可以通过保存先前的结果(请注意ASSIGN COMPONENT 1比ASSIGN COMPONENT'MATNR'快一倍)来优化算法。

另一种性能更高的解决方案是不使用LOOP GROUP BY,而是这样做 一种更苛刻的方法:使用RTTC创建仅包含所需组件的临时HASHED表, = CORRESPONDING#(itab DISCARDING DUPLICATES),然后在中循环:

 TYPES:
   开始ty_sflight,
     carrid TYPE轻型-carrid,
     connid TYPE sflight-connid,
   ty_sflight结束。
 数据:
   lt_sflight ty_sflight的类型标准表,
   r_type_table类型参考cl_abap_tabledescr,
   r_data_tab TYPE REF TO数据。
 字段符号:
    TYPE ANY TABLE。

 选择开始。
   lt_sflight = VALUE#(
                (carrid ='AA'connid = 1)
                (carrid ='LH'connid = 1)
                (carrid ='AA'connid = 2)
                (carrid ='LH'connid = 3))。
   r_type_table = cl_abap_tabledescr => create(
       p_line_type = cl_abap_structdescr =>创建(
         p_components = VALUE#(
           (name ='CARRID'type = CAST#(cl_abap_datadescr => describe_by_name('SFLIGHT-CARRID'))))
           (名称='CONNID'类型= CAST#(cl_abap_datadescr => describe_by_name('SFLIGHT-CONNID'))))))))。
   创建数据r_data_tab类型句柄r_type_table。
   ASSIGN r_data_tab-> * TO  = lt_sflight。

   FIELD-SYMBOLS 类型哈希表。
   r_type_table = cl_abap_tabledescr => create(
       p_line_type = cl_abap_structdescr =>创建(
         p_components = VALUE#(
           (名称='CARRID'类型= CAST#(cl_abap_datadescr => describe_by_name('SFLIGHT-CARRID')))))
       p_table_kind = cl_abap_tabledescr => tablekind_hashed
       p_unique = abap_true
       p_key_kind = cl_abap_tabledescr => keydefkind_tableline)。
   创建数据r_data_tab类型句柄r_type_table。
   ASSIGN r_data_tab-> * TO  =对应的#( DISCARDING DUPLICATES)。

   在处分配字段符号()。
     将结构的组件1分配给FIELD-SYMBOL()。
     cl_demo_output => write(| Group-{} |)。
   结局。

   cl_demo_output => display()。

一周热门 更多>