ABAP 7.4语法-FOR循环迭代

2020-08-21 19:04发布

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

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


专家们,

我在博客中读到了有关如何在For循环迭代中使用并行游标填充内部表的信息。 在下面共享示例代码。

 *使用"平行游标"基于EKKO,EKPO,MAKT和T001W的数据填充最终表

 DATA(lt_final)= VALUE ty_t_final(FOR ls_ekpo IN lt_ekpo

       FOR ls_ekko IN lt_ekko从line_index(lt_ekko [ebeln = ls_ekpo-ebeln])

       在哪里(ebeln = ls_ekpo-ebeln)

       FOR ls_makt IN lt_makt从line_index(lt_makt [matnr = ls_ekpo-matnr])

       在哪里(matnr = ls_ekpo-matnr)

       FOR ls_t001w IN lt_t001w从line_index(lt_t001w [werks = ls_ekpo-werks])

       在哪里(werks = ls_ekpo-werks)

       LET ls_final = VALUE ty_final(

       lifnr = ls_ekko-lifnr

       maktx = ls_makt-maktx

       name1 = ls_t001w-name1)

       IN(对应#(BASE(ls_final)ls_ekpo)))。

 

将其与传统的并行游标方法进行比较时,在读取与键匹配的行的表格后进入ITAB2的循环时,我们将检查键,如果不匹配则退出循环。 但是在上面的共享代码中,我们正在使用匹配键扫描循环中的所有记录。 如果不匹配,是否可以像退出循环那样受到限制?这会产生什么影响?

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

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


专家们,

我在博客中读到了有关如何在For循环迭代中使用并行游标填充内部表的信息。 在下面共享示例代码。

 *使用"平行游标"基于EKKO,EKPO,MAKT和T001W的数据填充最终表

 DATA(lt_final)= VALUE ty_t_final(FOR ls_ekpo IN lt_ekpo

       FOR ls_ekko IN lt_ekko从line_index(lt_ekko [ebeln = ls_ekpo-ebeln])

       在哪里(ebeln = ls_ekpo-ebeln)

       FOR ls_makt IN lt_makt从line_index(lt_makt [matnr = ls_ekpo-matnr])

       在哪里(matnr = ls_ekpo-matnr)

       FOR ls_t001w IN lt_t001w从line_index(lt_t001w [werks = ls_ekpo-werks])

       在哪里(werks = ls_ekpo-werks)

       LET ls_final = VALUE ty_final(

       lifnr = ls_ekko-lifnr

       maktx = ls_makt-maktx

       name1 = ls_t001w-name1)

       IN(对应#(BASE(ls_final)ls_ekpo)))。

 

将其与传统的并行游标方法进行比较时,在读取与键匹配的行的表格后进入ITAB2的循环时,我们将检查键,如果不匹配则退出循环。 但是在上面的共享代码中,我们正在使用匹配键扫描循环中的所有记录。 如果不匹配,是否可以像退出循环那样受到限制?这会产生什么影响?

付费偷看设置
发送
4条回答
太Q了
1楼 · 2020-08-21 19:49.采纳回答

所有建议的解决方案(请参阅问题注释)表明,使用构造函数表达式执行并行游标没有任何好处,而不会过多混淆目标。

路亽曱_Ryan
2楼-- · 2020-08-21 20:04

Quynh Doan Manh 实际上,它不再是"并行游标",因为您在每个循环中都进行了二进制搜索,因此性能要慢得多。 为了验证这一点,我在您的解决方案下进行了转换,使其适合我之前发布的完整可验证示例,以便可以进行比较(我得到了x4的差)。

NB:您的代码向左 通过UNTIL进行外部联接,您可以改为使用WHILE将其更改为内部联接。

方法parallel_cursor_with_for_until FOR TESTING。
     方法parallel_cursor_with_for_while进行测试。

   方法parallel_cursor_with_for_until。
     做100次。
       DATA(lt_final)= VALUE ty_t_final(
             FOR Scarr_s中的
             FOR i = line_index(spfli_s [carrid =  -carrid])
                 直到i = 0"左外联接
                    或者我>线(spfli_s)
                    或spfli_s [i] -carrid <>  -carrid
             (carrid = <疤痕> -carrid
               carrname = <疤痕> -carrname
               connid = VALUE#(spfli_s [i] -connid可选)
               cityfrom = VALUE#(spfli_s [i] -cityfrom OPTIONAL)))。
     ENDDO。
   终结法。
   方法parallel_cursor_with_for_while。
     做100次。
       DATA(lt_final)= VALUE ty_t_final(
             FOR Scarr_s中的
             FOR i = line_index(spfli_s [carrid =  -carrid])
                 当我<> 0"内联接时
                   AND i <=行(spfli_s)
                   AND spfli_s [i] -carrid =  -carrid
             (carrid = <疤痕> -carrid
               carrname = <疤痕> -carrname
               connid = spfli_s [i] -connid
               cityfrom = spfli_s [i] -cityfrom))。
     ENDDO。
   ENDMETHOD。
代楠1984
3楼-- · 2020-08-21 19:45

感谢您的宝贵反馈和努力! 由于标题与我的下一个问题匹配,请在此处发布。

我正在尝试调试FOR迭代。 我看到了一个博客,其中使用了调试器模式下的STEP SIZE。 但是我不能确切地看到使用它的每次迭代的结果。

您能指导如何调试迭代吗? TIA

软件心理学工程师
4楼-- · 2020-08-21 19:50

Meera K 请提出一个新问题。

请不要将其命名为"我当前的问题",并在那里询问您以后的所有问题;-)

一周热门 更多>