选择最多N行

2020-08-20 20:20发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 我需要使用 BA...

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

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


专家您好,

我需要使用" BAPI_PO_CHANGE"更新与某个特定类型" XYZ"相关的所有采购订单。

在生产环境中,我在EKPO表中有超过一百万条与此采购订单相关的生产线。 来自EKKO内部联接EKPO的简单选择语句将导致性能问题。

我想从EKKO/EKPO中选择一定数量的行,例如1000,使用" BAPI_PO_CHANGE"更新这1000行,然后从EKKO/EKPO中选择接下来的1000行。 处理应该像这样继续进行,直到所有行(百万行)都更新为止。

有什么建议吗? 或其他解决方案?

此致

盟友

5条回答
天桥码农
2020-08-20 21:04

Ally,

我也遇到了同样的问题,我使用的解决方案是将前端和后端处理结合在一起。 程序逻辑为:

如果sy-batch =''"前端处理

---处理1,准备好内部表

Elseif sy-batch ='X'"背景处理

----流程2,BAPI_PO_CHANGE和BAPI_TRANSACTION_COMMIT

Endif。

---处理1,准备好内部表

从EKKO/EKPO中选择数据,准备内部表。

将内部表导出到数据库索引(将itab导出到DATABASE indx(index)ID'TABLE'。这会将您的内部表存储到Database Index中,您可以从中检索相同的表。

导出内部表后,在后台模式下再次调用同一程序(提交)。 您也可以计划在给定时间开始作业。 再次提交程序以在后台模式下调用后,请退出该程序并查看作业是否已在后台模式下调度。 这将调用上面的过程2。

----流程2,BAPI_PO_CHANGE和BAPI_TRANSACTION_COMMIT

一旦程序在后台执行,您就可以从数据库索引中调用内部表(从itab2 DATABASE indx(index)ID'TABLE'中导入IMPORT itab1)。 这将准备好表以供进一步处理。 然后,您需要在表上循环,并保留1000条记录的计数器。 一旦达到1000条记录,请调用BAPI_PO_CHANGE,然后调用BAPI_TRANSACTION_COMMIT。 这将更新记录。 清除字段,然后再次循环以获取更多记录。 记录日志,您可以将其另存为文件。

如果您尝试同时在前台或后台运行这两个部分,则将花费大量时间。 发现这种方法更好,因为它可以照顾到所有方面,并且在前台执行时不会出现超时错误。

一周热门 更多>