一次性删除SAP Dynamic内部表行的任何选项,而不是循环/索引

2020-09-04 03:04发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个下面的代码,它需要超过1...

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

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


我有一个下面的代码,它需要超过1200万毫秒的时间来执行,

这是在用户命令处触发的,例如,用户选择第一级输出的所有记录(约30万条记录)以获取下一级的向下钻取报告,

A。 在按用户选择所有行的过程中,动态内部表的记录几乎少于300k,其中字段" BOX"标记为用户在第一个输出中选择的那些行的" X"

B。 然后程序选择动态内部表()与另一个标准内部表(GT_BSIS)进行比较(在动态内部表中标记为" X")的记录,该标准内部表的记录略多于300K,正在考虑(检查)另一个字段值(清除) 两个表的键值都应该相同,可以为1:N)

C。 然后将这些通用记录插入到第三标准内部表(GT_L2_DISP)中以进行进一步处理/显示,

分配上的环。 结构的
在gt_bsis上循环,其中clearing_key =
移动gt_bsisTO到gt_l2_disp。 br> ENDLOOP。

我希望我们有一个将动态内部表转换为标准内部表的简单解决方案,

那么提议的解决方案应该是:

1。 将动态内部表转换为标准内部表,例如OI_STD_TAB,

2。 从OI_STD_TAB删除记录,其中字段'BOX'<>'X',

3。 比较OI_STD_TAB的Clearing_key值,从GT_BSIS中删除记录,

4。 将余额记录从GT_BSIS(删除后)移至GT_L2_DISP,

感谢您的建议,

7条回答
能不能别闹
2020-09-04 03:56

我不知道您的ABAP版本,但是LOOP AT dynamicitab WHERE(动态条件)应该可以工作(从7.02版开始):

字段符号类型标准表。
 ...
 在分配字段符号()的地方(`BOX ='X'`)。

此外,您可以通过RTTC使用以下命令对内部表的动态创建进行性能测试。 基于BOX组件的非唯一索引。 内部表的填充将花费一些时间,但是循环会更快。

NB:DELETE不允许动态条件(至少为7.53)。

关于GT_BSIS ,请确保您具有一个以CLEARING_KEY作为第一个组件的索引。

编辑:我的答案使用的是7.40中的内联声明(FIELD-SYMBOL(...)),因为此语法可避免分散注意力,并确保焦点 在其他方面,重要的是。 您可以通过使用ABAP语句FIELD-SYMBOLS声明字段符号来手动将其重写为旧语法(例如,在字段符号上方可以声明FIELD-SYMBOLS TYPE ANY)。

一周热门 更多>