点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
尊敬的专家,
美好的一天!
我们有一个用于豁免批准流程的自定义程序,其中有一组带有所需详细信息的SO,授权用户将选择任何SO或选择所有SO进行批准。
选择特定的SO并单击"批准"按钮后,系统将调用以下BAPI:
1。 首先,如果有帐单冻结,系统将触发 BAPI_SALESORDER_CHANGE 释放并返回相应的消息。 并提交(如果成功释放了块),否则将在发生任何错误时回滚
2。 稍后,系统将触发 BAPI_BILLINGDOC_CREATEMULTIPLE 创建帐单。
如果所选SO中的WBS存在诸如"超出预算"之类的问题,则BAPI将不会创建账单,但最终会返回适当的消息。 如果成功,那么帐单文档将创建其他回滚。
现在,问题是:
-如果一个SaleOrder在触发BAPI_BILLINGDOC_CREATEMULTIPLE时以任何错误结束,则在回滚后,当系统准备下一个SaleOrder并尝试从BAPI_SALESORDER_CHANGE释放任何块时,它将以相同的错误消息结尾,该错误消息从 BAPI_BILLINGDOC_CREATEMULTIPLE。,即使两个SalesOrder都有不同的WBS。
请提出任何解决方案或其他方法来解决所说明的问题。
下面,我简要地解释了逻辑:
将lt_final_table循环到lw_final_table
调用功能'BAPI_SALESORDER_CHANGE' 阅读lt_baprret。 如果msg_type ='E'*错误 调用功能'BAPI_TRANSACTION_ROLLBACK'。 否则。 调用功能'BAPI_TRANSACTION_COMMIT' *//第二,调用Bapi来创建帐单 呼叫功能'BAPI_BILLINGDOC_CREATEMULTIPLE' 读取lt_return。 如果msg_type ='E' 调用功能'BAPI_TRANSACTION_ROLLBACK'。 否则。 通话功能'BAPI_TRANSACTION_COMMIT' 导出 endif。 Endloop。
导出
salesdocument =
order_header_in = lw_bapisdh1
order_header_inx = lw_bapisdh1x
表格
返回= lt。
导出
等待='X'。
表格
billingdatain = lt_billingdatain
return = lt_return
成功= lt_成功。
wait ='X'。
检查是否可以按照OSS注释1784621中的建议进行代码更正
您好,Lakshmipathi Ganesan,
感谢您的回复。但是,由于我们处于升级版SAP_ALL软件组件中,因此该Snote不适用于我们的系统。
如果您有其他建议,...
您是否尝试过调试并查看BAPI调用前后的变量内容?
伪代码而不是真正的伪代码,但要从头开始:在LOOP的开头,清除所有内部表和其他在循环内重复使用的变量。
Mohammad Ismail -因此,您要说的是这段代码中的内容 在计费BAPI调用中发生错误,循环进入下一个迭代,然后在SO更改BAPI被调用之后,表lt_bapiret包含一些您认为与不同销售订单有关的消息? 假设主表GT_XFINAL具有重复项(这没有意义),我不知道如何发生并且希望看到它相信它。 您如何准确地检查消息以及这些消息是什么? 请发布一些屏幕截图。
一些与代码无关的注释。
请检查清洁ABAP 样式指南会在您有机会时提供。
嗨,
请在两个BAPI调用BAPI_SALESORDER_CHANGE和BAPI_BILLINGDOC_CREATEMULTIPLE之前清除lt_bapiret []
谢谢
一周热门 更多>