注意这个错误是因为手工加入的价格条件一定要设置成手工处理,这个在BAPI的入参处可以体现。
另外ITEM和COND的updateflag 要给'I',包括计划行的schdlx-updateflag都要给I,header的updateflag给U就行了,其他
的字段该怎么传就怎么传。
DATA:l_flag TYPE c.
CLEAR l_flag.
DATA:logic_switch TYPE bapisdls.
logic_switch-cond_handl = 'X'.
logic_switch-pricing = 'C'. "注意手工的价格条件一定要给C,否则会出现定价失败
CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
EXPORTING
salesdocument = gs_head-vbeln
order_header_in = gs_header_in
order_header_inx = gs_header_inx
call_from_bapi = abap_true
logic_switch = logic_switch
TABLES
return = gt_return
item_in = gt_items_in
item_inx = gt_items_inx
conditions_in = gt_bapicond
conditions_inx = gt_bapicondx
partnerchanges = gt_partnerchanges
schedule_in = gt_schdl
schedule_inx = gt_schdlx
sales_text = gt_text.
CALL FUNCTION 'DIALOG_SET_WITH_DIALOG'.
LOOP AT gt_return WHERE type CA 'AEX'.
IF sy-subrc EQ 0.
l_flag = 'X'.
ENDIF.
ENDLOOP.
.
IF l_flag IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
CLEAR:gt_items_in[],
gt_items_inx[],
gt_partnerchanges[],
gt_schdl[],
gt_schdlx[],
gt_bapicond[],
gt_bapicondx[].
在使用SD_SALESDOCUMENT_CHANGE BAPI时遇到VH_BAPI 050错误。解决方法是确保手动添加的价格条件设置为手工处理,并在BAPI参数中正确设置。同时,ITEM和COND的updateflag应设为'I',计划行的schdlx-updateflag也需设为'I',头部updateflag设为'U',其他字段按常规传递。

2236

被折叠的 条评论
为什么被折叠?



