SAP BW中结束例程的性能

2020-09-20 01:15发布

         点击此处--->   EasySAP.com群内免费提供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。
****声明结束****


字段符号:类型TY_CON。

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 = -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 []。

         点击此处--->   EasySAP.com群内免费提供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。
****声明结束****


字段符号:类型TY_CON。

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 = -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 []。

付费偷看设置
发送
4条回答
派大星 ヾ
1楼 · 2020-09-20 01:41.采纳回答

将LT_CON和LT_LOOKUP定义为HASHED表。 将标准表与排序和二进制搜索一起使用是2000年前的技术,而不是最有效的方法。

一只江湖小虾
2楼-- · 2020-09-20 01:34

Matthew Billingham 使用哈希表是正确的。

谢谢

代楠1984
3楼-- · 2020-09-20 01:47

嗨,

您必须确定瓶颈所在。

请在调试中运行转换,然后尝试确定:

1。 是结束例程之前的问题(要花很多时间才能真正进入结束例程)

2。 是结束例程中的问题吗? 如果是这样,那么在代码的哪一部分? 结果包的数量是多少? 内部表的数量和选择时间是多少? 等

3。 结束例行程序后出现问题了吗?

BR,

代楠1984
4楼-- · 2020-09-20 01:23

Abhimanyu,

/BIC/ZCHBL_NUM = LT_RP-/BIC/ZCHBL_NUM是DSO中您进行查找的关键字段吗?

如果没有,则在DSO BDSSDS96上创建二级索引

谢谢

一周热门 更多>