如何聚合内部表而没有循环并收集?

2020-08-19 02:01发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 在启动Loop并实现业务...

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

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


嗨,

在启动Loop并实现业务逻辑之前,我想用相同的字符聚合内部表中的行。

我尝试使用"循环收集"将行从Itab1移到Itab2,这可以很好地工作,但是会花费太多时间。

我的要求是在我的逻辑在主循环中启动之前准备好内部表,以便容易汇总所有值。 我们有功能模块吗?

请提供任何可能的解决方案。

谢谢

(11.4 kB)
14条回答
我是小鹏鹏啊
2020-08-19 02:26

嗨,大家好,

每个人,非常感谢您为帮助我做到这一点所做的努力。

我想对正在发生的事情以及在哪里进行编码提供更多的信息(我将自己定为ABAP的新手)。

我正在将此数据加载到2个不同对象之间的BW(Datawarehouse)中,因此没有在DB级别进行聚合的问题,因此它完全在BW专家例程中的内部表之间。 要求是将BW-APD转换为BW4HANA转换。

下面是我要修复的Dev中的示例代码。

不。 记录数:445,656。

使用现有代码,需要22秒才能完成,而使用下面的代码,则需要4-5分钟(我想尽可能地靠近)。 因此,在此过程中,我发现最大的不同是在ITab中汇总具有相同特征的行。 (BW-APD接收聚合数据时速度更快,而在BW4HANA中,我必须对其进行聚合)

新代码:
 * SOURCE_PACKAGE是源对象和内部表
 * RESULT_PACKAGE是我尝试加载此数据的目标
 * ITAB是我尝试汇总的第二个Inetrnal表

 码:
     类型:开始于Y_SOURCE_FIELDS,
              GL_ACCOUNT TYPE/BI0/OIGL_ACCOUNT,
              FISCPER TYPE/BI0/OIFISCPER,
              FIELDNM003类型/BI0/OIFM_AMOUNT1," ECC
              FIELDNM001类型/BI0/OIFM_AMOUNT1," BW
              FIELDNM005类型/BI0/OIFM_AMOUNT1," BAL
            END OF Y_SOURCE_FIELDS。

     类型:开始于Y_TARGET_FIELDS,
            /BIC/ZRE_REC TYPE/BIC/OIZRE_REC,
              GL_ACCOUNT TYPE/BI0/OIGL_ACCOUNT,
              FISCPER TYPE/BI0/OIFISCPER,
            /BIC/ZSRC_AMT TYPE/BI0/OIFM_AMOUNT1,
            /BIC/ZTRGT_AMT TYPE/BI0/OIFM_AMOUNT1,
              CHRT_ACCTS类型/BI0/OICHRT_ACCTS,
              FISCVARNT TYPE/BI0/OIFISCVARNT,
              余额类型/BI0/OIFM_AMOUNT1,
            END OF Y_TARGET_FIELDS。

     数据:LS_SOURCE类型Y_SOURCE_FIELDS,
           LS_TARGET类型Y_TARGET_FIELDS,
           Y_SOURCE_FIELDS初始大小为0的ITAB类型标准表,
           WA TYPE Y_SOURCE_FIELDS。

 BREAK-POINT。
 * DELETE SOURCE_PACKAGE WHERE FIELDNM005 = 0。

 在SOURCE_PACKAGE ASSIGNING 处循环播放。
       将对应移动到LS_SOURCE。
       将LS_SOURCE收集到ITAB中。
     结局。

     删除ITAB WHERE FIELDNM005 = 0。

     向ITAB进发。
       将WA移动到LS_SOURCE。

       LS_TARGET-GL_ACCOUNT = LS_SOURCE-GL_ACCOUNT。
       LS_TARGET-FISCPER = LS_SOURCE-FISCPER。
       LS_TARGET-/BIC/ZSRC_AMT = LS_SOURCE-FIELDNM003。
       LS_TARGET-/BIC/ZTRGT_AMT = LS_SOURCE-FIELDNM001。
       LS_TARGET-BALANCE = LS_SOURCE-FIELDNM005。
       LS_TARGET-CHRT_ACCTS ='0010'。
       LS_TARGET-FISCVARNT ='V6'。

       I_COUNT = I_COUNT + 1。
 * LS_TARGET-/BIC/ZRE_REC = I_COUNT。
       将LS_TARGET移动到RESULT_FIELDS。
       将RESULT_FIELDS附加到RESULT_PACKAGE。
     结局。
 结局。

 

希望这很清楚。

感谢您的帮助:-)!

一周热门 更多>