从BAPI_BILLINGDOC_CREATEMULTIPLE返回的错误消息反映在BAPI_SALESORDER_CHANGE中。

2020-08-26 18:31发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的专家, 美好的一天! ...

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

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


尊敬的专家,

美好的一天!

我们有一个用于豁免批准流程的自定义程序,其中有一组带有所需详细信息的SO,授权用户将选择任何SO或选择所有SO进行批准。

选择特定的SO并单击"批准"按钮后,系统将调用以下BAPI:

1。 首先,如果有帐单冻结,系统将触发 BAPI_SALESORDER_CHANGE 释放并返回相应的消息。 并提交(如果成功释放了块),否则将在发生任何错误时回滚

2。 稍后,系统将触发 BAPI_BILLINGDOC_CREATEMULTIPLE 创建帐单。

如果所选SO中的W​​BS存在诸如"超出预算"之类的问题,则BAPI将不会创建账单,但最终会返回适当的消息。 如果成功,那么帐单文档将创建其他回滚。

现在,问题是:

-如果一个SaleOrder在触发BAPI_BILLINGDOC_CREATEMULTIPLE时以任何错误结束,则在回滚后,当系统准备下一个SaleOrder并尝试从BAPI_SALESORDER_CHANGE释放任何块时,它将以相同的错误消息结尾,该错误消息从 BAPI_BILLINGDOC_CREATEMULTIPLE。,即使两个SalesOrder都有不同的WBS。

请提出任何解决方案或其他方法来解决所说明的问题。

下面,我简要地解释了逻辑:

将lt_final_table循环到lw_final_table

调用功能'BAPI_SALESORDER_CHANGE'
导出
salesdocument = -vbeln
order_header_in = lw_bapisdh1
order_header_inx = lw_bapisdh1x
表格
返回= lt。

阅读lt_baprret。

如果msg_type ='E'*错误

调用功能'BAPI_TRANSACTION_ROLLBACK'。

否则。

调用功能'BAPI_TRANSACTION_COMMIT'
导出
等待='X'。

*//第二,调用Bapi来创建帐单

呼叫功能'BAPI_BILLINGDOC_CREATEMULTIPLE'
表格
billingdatain = lt_billingdatain
return = lt_return
成功= lt_成功。

读取lt_return。

如果msg_type ='E'

调用功能'BAPI_TRANSACTION_ROLLBACK'。

否则。

通话功能'BAPI_TRANSACTION_COMMIT'

导出
wait ='X'。

endif。

Endloop。