使用BAPI_SALESORDER_CHANGE更新销售订单计划行时出现问题

2020-09-03 22:02发布

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

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


您好,

虽然我尝试使用BAPI_SALESORDER_CHANGE来补充计划行日期,但它适用于订单项的第一个计划行。 如果我要修改同一订单项的第二个计划行,则其给出的错误为

"系统错误:项目000010的计划行0002不存在"。

请问我是否遇到相同问题或解决此错误的任何想法。

谢谢

Kamalakar。

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

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


您好,

虽然我尝试使用BAPI_SALESORDER_CHANGE来补充计划行日期,但它适用于订单项的第一个计划行。 如果我要修改同一订单项的第二个计划行,则其给出的错误为

"系统错误:项目000010的计划行0002不存在"。

请问我是否遇到相同问题或解决此错误的任何想法。

谢谢

Kamalakar。

付费偷看设置
发送
9条回答
xfwsx85
1楼-- · 2020-09-03 22:56

你好Jalena,

感谢您的回复。

请在下面找到我的代码。

在我-> lt_order上引用我-> lr_order
在vbeln NE lv_vbeln。
lv_vbeln = me-> lr_order-> vbeln。
ls_order_header_in-dlvschduse ='WAP'。
ls_order_header_inx-dlvschduse ='X'。

ls_order_header_in-dun_date = lr_order->基准。

ls_order_header_inx-dun_date ='X'。

ls_order_header_inx-updateflag ='U'。

将lt_vbap循环放入ls_vbap所在的地方vbeln = me-> lr_order-> vbeln。
* ls_item-vbeln = ls_vbap-vbeln。
ls_item-itm_number = ls_vbap-posnr__item lt。
ls_itemx-itm_number = ls_vbap-posnr。
ls_itemx-updateflag ='U'。
将ls_itemx附加到lt_itemsx。
将lt_vbep INTO循环到ls_vbep WHERE vbeln = ls_vbrap-n ls_vbap-posnr。

ls_schedule_lines-itm_number = ls_vbep-posnr。
ls_schedule_lines-sched_line = ls_vbep-etenr。"" 0001"。 gi_date = ls_order_header_in-dun_date。
ls_schedule_lines-tp_date = ls_order_header_in-dun_date。
ls_schedule_lines-ms_date = ls_order_header_in-dun_date。
ls_schedule_lines_header_dun_date。

ls_schedule_lines-req_date = ls_schedule_lines-req_date + lv_days1。

APPEND将ls_schedule_lines转换为lt_schedule_lines。

ls_schedulex-itm_number = ls_vbep-posnr。
ls_schedulex-sched_line = ls_vbep-etenr。"'0001'。
ls_schedulex-updateflag = br> ls_schedulex-load_date ='X'。
ls_schedulex-ms_date ='X'。
ls_schedulex-gi_date ='X'。
ls_schedulex-tp_date ='X'。
ls_schedulex-req_date = 'X'。
* ls_schedulex-date_type ='X'。
将ls_schedulex附加到lt_schedulex。

ENDloop。

ENDLOOP。

呼叫功能'BAPI_SALESORDER_CHANGE'
导出
SALESDOCUMENT = me-> lr_order-> vbeln
ORDER_HEADER_IN = ls_order_header_in
ORDER_HEADER_IN = ls_order_header_inx
模拟= p_simul

RETURN = lt_return
ORDER_ITEM_IN = lt_items
ORDER_ITEM_INX = lt_itemsx
SCHEDULE_LINES = lt_Schedule_lines

SCHEDU br> * ... committen
如果p_simul处于初始状态。
通话功能'BAPI_TRANSACTION_COMMIT'
导出
wait ='X'。
ENDIF。

仅当一个订单项有多个计划行时,该项目才有效。如果第二个计划行有错误,则该错误。

谢谢

Kamalakar。

打个大熊猫
2楼-- · 2020-09-03 23:06

不确定如何回答...没有共享代码,没有数据,没有屏幕截图,目前还不清楚解决此问题的方法。 如果消息显示该行不存在,则该行不存在。 ¯\ _(ツ)_/¯

Google-> BAPI_SALESORDER_CHANGE更新日程安排日期站点: sap.com -> 927个结果,可能要从那里开始。

Bunny_CDM
3楼-- · 2020-09-03 22:54

在这种情况下(我不是开发人员),我通常要做的是在SE37中以相同顺序创建测试数据,并执行BAPI_SALESORDER_CHANGE和BAPI_TRANSACTION_COMMIT的测试序列。 如果通过SE37而不是通过程序正确更新了计划行,则问题出在自定义代码,因此我将放置一个断点以找出SE37和z *中参数值之间的区别

如果在SE37和z *程序中出现相同的错误,我将在执行SE37中的测试序列之前使用BAPISDORDER_GETDETAILEDLIST来验证每个项目的计划行(实际上,我会在尝试之前进行此操作) 还要别的吗)。

我使用的另一个故障排除选项是通过VA02修改文档。 如果SE37和Z *程序无法按预期工作,但是VA02是否会寻找与屏幕逻辑,硬编码TCODE等有关的任何内容。

当然,有经验的开发人员应该能够进行故障排除 仅仅通过调试即可解决问题(这可能很耗时),但由于我不是一个人-我使用了我在向开发人员寻求帮助之前提到的技术。

野沐沐
4楼-- · 2020-09-03 22:49

检查此代码。 ..

数据:类似于BAPISDH1X的数据:BAPISDH1X.DATA:类似于BAPISDH1的BAPISDH1。参数:P_VBELN类似于VBAK-VBELN OBLIGATORY.PARAMETERS:P_LIFSK类似于VBAK-LIFSK义务。
 *标头
 BAPISDH1-DLV_BLOCK = p_lifsk。"传递块
 *标头X
 BAPISDH1X-DLV_BLOCK =" X"。"交付块
 BAPISDH1X-UPDATEFLAG ='U'.CALLFUNCTION'BAPI_SALESORDER_CHANGE'EXPORTING
 销售文件= P_VBELN
 order_header_in = BAPISDH1
 order_header_inx = BAPISDH1X
 tablereturn = T_RETURN
 .LOOPAT T_RETURN WHERETYPE ='E'ORTYPE ='A'.EXIT.ENDLOOP。
 *检查错误消息。IFSY-SUBRC= 0.WRITE:/"销售订单未更新",T_RETURN-MESSAGE.ELSE。  

*成功更新WRITE:/"销售订单已更新"。ENDIF.COMMITWORK。

更多信息: SAP ABAP认证

hongfeng1314
5楼-- · 2020-09-03 22:47

嗨,开发人员,

感谢您的输入。

您是对的,我正在尝试用相同的日期和req日期用date plus days更新所有计划行。 如果进度计划行未确认数量,则工作正常。 如果计划行中有多个订单项,而计划行中的数量有争议,则其错误为"不存在项目000010的计划行0002"。

谢谢

Kamalakar。

huskylover
6楼-- · 2020-09-03 22:41

嗨,

ls_schedule_lines-load_date = ls_order_header_in-dun_date。
ls_schedule_lines-gi_date = ls_order_header_in-dun_date。
ls_schedule_lines -tp_date = ls_order_header_in-dun_date。
ls_schedule_lines-ms_date = ls_order_header_in-dun_date。
ls_schedule_lines-req_date = ls_order_header_in-dun_date _

s + lv_days1。

我不知道您的初始要求是什么,但是您正在使用相同的信息更新所有计划行。 您难道不应该只更新订单中的最后一个计划行吗?

一周热门 更多>