SAP代码问题,急!在线等待!

有些建议仅供参考:

1,下面这一段,不知道你的具体目的是什么,但是从它的放置位置来看,应该是有问题的:因为当L_GIT-VALSTK_CATG不在GT_VALSTK_CATG_RNG的范围内时,前面做的大量工作就浪费了,所以可以考虑把这个判断前移吗?

如果L _ GIT _ VALSTK _ CATG在GT_VALSTK_CATG_RNG。

将L_GIT收集到DT_GIT中。

否则。

清除L_GIT。

ENDIF。

2.程序逻辑应该有问题。你想先找到采购订单号的位置索引,然后从这一行开始循环ekbe,但是你用了二分搜索法,理论上可以加快搜索速度,但是应该有bug。举个例子,如果有五条数据的顺序号是A B B B C,那么你用二分搜索法找到编号为B的物品的位置,索引应该是3而不是预期的2(仅从二分搜索法的逻辑分析来看,这一点需要验证。

3.也是我个人认为比较重要的一点:

因为EKKO的数据在EKBE中可能没有对应的数据,所以会出现一次EKKO的空循环,同时在EKBE中搜索18次(LOG(300000,2)=18),搜索18次没有结果;另一方面,一条数据可能对应EKBE中的多条数据,也就是说,即使正确找到了位置索引,仍然需要循环30万条数据量的EKBE,而且会循环多次,必然影响速度。

建议:第一层循环EKBE,记录EKBE上一行的EBELN。如果当前行EBELN等于前一行EBELN,则无需重新读取EKKO如果没有,就从EKKO中读取一次,EKBE中的任何EBELN在EKKO中都有唯一的记录,所以不需要回收EKKO。结果是EKBE只需要循环一次,EKKO只需要读取