点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我编写了结束例程来填充已经存在的帐单号的DSO不会通过查找另一个DSO而得到更新,但是该例程需要1-2小时才能完成更新100-150条记录的过程。 这是代码。 请让我知道您在提高代码性能方面的想法。
代码:
***声明***
类型:TY_CON的开头,
UCCONTRACT类型/BI0/OIUCCONTRACT,
UCINSTALLA类型/BI0/OIUCINSTALLA,
TY_CON的结尾。
类型: TY_LOOKUP的开始,
UC_SIM_ID类型/BI0/OIUC_SIM_ID,
/BIC/ZCHBL_NUM类型/BIC/OIZCHBL_NUM,
TY_LOOKUP的结尾。
数据:LT_CON类型标准表 br> TY_LOOKUP的LT_LOOKUP类型标准表,<_> _TY_S_TG_1的LT_RESULT类型标准表,<_> _TY_S_TG_1的LT_RP类型标准表,
LV_RESULT类型_TY_S_TG_1。
****声明结束****
字段符号:
LT_RP [] = RESULT_PACKAGE []。
通过UCCONTRACT排序LT_RP。
从LT_RP比较中删除相邻的重复项 UCCONTRACT。
如果LT_RP []不是初始的。
从/BI0/PUCCONTRACT中选择UCCONTRACT UCINSTALLA
到表LT_CON中,以查找LT_RP中的所有条目
UCCONTRACT = LT_RP-UCCONTRACT。 >通过UCCONTRACT排序LT_CON。
在UCINSTALLA初始化的地方删除LT_CON。
ENDIF。
ENDIF。
清除LT_RP []。
LT_RP [] = RESULT_PACKAGE []。
>
通过UC_SIM_ID/BIC/ZCHBL_NUM排序LT_RP。
从LT_RP中删除相邻的重复项,并比较UC_SIM_ID/BIC/ZCHBL_NUM。
如果LT_RP []不初始化。 >从/BIC/ABDSSDS9600
的LT_LOOKUP表中为LT_RP
中的所有条目选择UC_SIM_ID/BIC/ZCHBL_NUM,在UC_SIM_ID = LT_RP-UC_SIM_ID和
/BIC/ZCHBL_NUM = LT_RP-/BIC中。 >
如果SY-SUBRC是初始代码。
SORT LT_LOOKUP。
ENDIF。
ENDIF。
清除LT_RP []。 循环到LV_RESULT的RESULT_PACKAGE中。
使用键UCCONTRACT = LV_RESULT-UCCONTRACT
BINARY SEARCH。
读取表LT_CON分配
。如果SY-SUBRC是INITI AL。
LV_RESULT-UCINSTALLA =
ENDIF。
用键读取表LT_LOOKUP
UC_SIM_ID = LV_RESULT-UC_SIM_ID
/BIC/ZCHBL_NUM = LV_RESULT-/BIC/ZCHBL_NUM
二进制搜索不传输任何字段。
如果SY-SUBRC不初始。
将LV_RESULT附加到LT_RESULT。
ENDIF 。
ENDLOOP。
清除RESULT_PACKAGE []。
RESULT_PACKAGE [] = LT_RESULT []。
将LT_CON和LT_LOOKUP定义为HASHED表。 将标准表与排序和二进制搜索一起使用是2000年前的技术,而不是最有效的方法。
Matthew Billingham 使用哈希表是正确的。
谢谢
嗨,
您必须确定瓶颈所在。
请在调试中运行转换,然后尝试确定:
1。 是结束例程之前的问题(要花很多时间才能真正进入结束例程)
2。 是结束例程中的问题吗? 如果是这样,那么在代码的哪一部分? 结果包的数量是多少? 内部表的数量和选择时间是多少? 等
3。 结束例行程序后出现问题了吗?
BR,
Abhimanyu,
/BIC/ZCHBL_NUM = LT_RP-/BIC/ZCHBL_NUM是DSO中您进行查找的关键字段吗?
如果没有,则在DSO BDSSDS96上创建二级索引
谢谢
一周热门 更多>