ABAP性能优化小记

业务场景

又到繁忙的月底,又到了集中开票的时段,有小伙伴怒气冲冲的反馈说使用VFX3释放发票时,有张SAP系统发票过账到会计凭证已经过了三个小时都没有成功、还在转圈圈,要崩溃了。

看了下这张系统发票,不简单,不简单,足足挂了300多个销售订单,属于月底N多订单合在一起开一张发票的操作。

问题分析

其实开系统发票慢,是很多使用SAP的公司都可能会遇到的问题,究其原因主要是大部分的公司都会在开票环节写很多增强,而这些增强经过几代人的修改,可能存在一些效率比较低的地方,一旦遇到上面这样无敌的发票,开票等待时间就会线性增加。

开SAP系统发票常用的增强方法(点),如OBBH、OB28、SDVFX008、RV60AFZC等,通过这些增强实现各种各样的业务需求,例如取TP价、替换文本、替换利润中心、计算工单关联信息等,有的甚至要一路关联到销售合同、层层展开BOM算价格等,业务逻辑本身就复杂,再遇上垃圾的代码就完了。

通过调试跟踪,问题定位到了一段OBBH替代出口的FORM上,系统发票里的每个行项目平均要在这个FORM里走10秒以上,解决掉这个FORM基本上就能解决这个问题了。

本文通过4个性能优化的技巧,有效改善增强导致开票慢的问题。

性能优化

优化点1:优化低效率JOIN

优化前的写法:

ABAP性能优化小记

优化后的写法:

1)CDS

ABAP性能优化小记

2)ABAP操作

ABAP性能优化小记

优化分析:

一眼瞟过去,优化前的写法一条SQL关联了SAP中最大的表之一KONV,没有充分利用主键,WHERE条件过于复杂,不慢才怪。

优化点2:优化低效率的LOOP操作

优化前的写法:

ABAP性能优化小记

优化后的写法:

ABAP性能优化小记

优化分析:

优化前的写法一眼看过去就感觉非常费事,优化后LOOP时加了WHERE条件,只有满足条件的数据才会进循环;同时,使用了FS,数据直接更新回内表,不用再MODIFY和CLEAR了。

代码一下子变得简洁明了、高效率。

优化点3:优化低效率的READ操作

优化前的写法:

ABAP性能优化小记

优化后的写法:

ABAP性能优化小记

优化分析:

二分查找,没什么好说的,注意要按查找的字段先排序,别忘了加BINARY SEARCH关键字。

优化点4:一次把事情做好

优化前的写法:

ABAP性能优化小记

优化后的写法:

ABAP性能优化小记

优化分析:

优化前的写法,取一行数据的两个字段写了两次SELECT,看着就就觉得很费劲,改!

优化效果

优化完后让用户重新释放一下系统发票,30秒后用户说已过账成功。

Bingo!

本文作者: GavinDong

版权属于: GavinDong博客

文章链接: https://gavindong.com/8377.html

如果使用过程中遇到问题,可 **点击此处** 交流沟通。

版权所有,转载时必须以链接形式注明作者和原始出处及本声明。

(3)

相关文章