平行光标

2020-08-19 02:08发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我的要求是使用带有4或5个循环的...

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

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


我的要求是使用带有4或5个循环的并行游标。 我想将此代码转换为

在it_mard INTO wa_mard中循环。

wa_final-matnr = wa_mard-matnr。
wa_final-werks = wa_mard-werks。
wa_final-lgort = wa_mard-lgort。
wa_final-lgort。 labst = wa_mard-labst。


清除:wa_mseg,wa_ser03,wa_objk。
在it_mseg处放入wa_mseg,其中matnr = wa_mard-matnr
和werks = wa_mard-werks
lgort = wa_mard-lgort。


wa_final-aufnr = wa_mseg-aufnr。


在it_ser03上循环到wa_ser03在mblnr = wa_mseg-mblnr。
在it_objk上循环 在into wa_objk中obknr = wa_ser03-obknr。

清除:wa_final-status2。

如果wa_mseg-bwart ='261'。 -----------------------
wa_final-status ='已消耗'.---------------- -----
wa_final-status2 ="活动"。----------------------
清除:wa_final-plnbez,wa_final-bldat 。

读取表it_​​afko使用键aufnr = wa_mseg-aufnr进入wa_afko。

如果sy-subrc =0。
wa_final-plnbez = wa_afko-plnbez。
ENDIF。 br>
读取表it_​​mkpf使用键mblnr = wa_mseg-mblnr插入wa_mkpf。

如果sy-subrc =0。
wa_final-bldat = wa_mkpf-bldat。
ENDIF。
-------------------------------------------------- -----------------------------------要添加
ELSEIF wa_mseg-bwart ='551'。
CLEAR:wa_final-status2。
wa_final-status2 ="废料"。
wa_final-status2 ="无效"。

如果wa_final-status ='Scrap'。
CLEAR wa_final-aufnr。
ENDIF。
wa_final-date =''。
ENDIF。

wa_final-sernr = wa_objk-sernr。
SHIFT wa_final-sernr左删除指针为'0 '。
APPEND wa_final到它_final。
ENDLOOP。
ENDLOOP。
ENDLOOP。


* ------------- -------------------------------------------------- -

将it_view循环到wa_view中,matnr = wa_mard-matnr
AND b_werk = wa_mard-werks
AND b_lager = wa_mard-lgort。

清除:wa_final-plnbez, wa_final-bldat。

如果wa_view-b_lager ='112A'或wa_view-b_lager ='113A'或wa_view-b_lager ='114A'或wa_view-b_lager ='111V'。
清除:wa_final- status2。

wa_final-status ='正在生产'。
wa_final-date = wa_view-aedat。
wa_final-status2 =''。
如果wa_final-status ='正在生产 生产'。
CLEAR wa_final-aufnr。
ENDIF。
ELSE。
CLEAR:wa_final-status2。

wa_final-status ='Available'。
wa_final-date =''。
wa_final-status2 =''。

如果wa_final-status ='Available'。
清除wa_final-aufnr。
ENDIF。
ENDIF。
wa_final-sernr = wa_view-sernr。
SHIFT wa_final-sernr左删除领先'0'。
将wa_final附加到it_final。
ENDLOOP。
ENDLOOP。

5条回答
风早神人
2020-08-19 03:05

有许多实现并行游标的方法,这完全取决于不同表中的数据如何具有匹配键(例如,从基数1:1到0..m:0..n)。

  1. 请使自己熟悉以下信息,
  2. 然后实际尝试对并行游标逻辑进行编码,以及
  3. 如果您仍然遇到问题 这样,我很高兴为您提供帮助

并行游标的一般准则如下:

  • 所有表格都需要按 与之比较的键
  • 键比较<,>,=用于增加光标,或"等待"下一个可能的匹配项
  • (平行)光标 每个嵌套循环或读取表都是必需的
  • (并行)光标标记嵌套表的(FROM)索引,您可以在其中继续"搜索"下一条记录,而无需实际搜索整个表
  • 排序的键和并行游标共同构成了与实际表搜索相比性能提高的魔力,在海量表数据集和大量匹配键的情况下
  • 因此,它对于小型数据集并没有任何用处。 在某些情况下,只有匹配的键很少
  • 与直接使用LOOP/READ by KEY语句相比,并行游标使编码更加混乱,从而导致测试工作量更大

并行游标的最基本形式是:

"两个表都按键K排序(而ITAB1有一个唯一键,而ITAB2没有)
 我= 1。
 将ITAB1环入WA1。
   从I循环到ITAB2到WA2。
     如果WA2-K <> WA1-K。
       我= SY-TABIX。
       出口。
     万一。
     " ..."->找到一个匹配项,匹配逻辑在此处发生
   结局。
 结局。
 

有关SAP在ABAP对象中的并行游标上进行上述编码的文档,性能示例:

  • 如果ITAB1具有n1项,而ITAB2具有n2项,则
    使用简单算法的嵌套循环为O(n1 * n2),而并行游标方法仅占用O(n1 + n2)时间。
    上述并行游标算法假定ITAB2仅包含
    entries
    如果此假设不成立,则并行游标算法会变得稍微复杂一些,但其性能特征将保持不变。

一周热门 更多>