SO相关的几个常用BAPI
创建SO:
SD_SALESDOCUMENT_CREATE
BAPI_SALESORDER_CREATEFROMDAT2
两个BAPI参数设置相同
修改SO:
SD_SALESDOCUMENT_CHANGE
BAPI_SALESORDER_CHANGE
查看SO明细:
BAPISDORDER_GETDETAILEDLIST
注意点一:创建SO
* 创建SO的参数设置如下:
CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
EXPORTING
SALES_HEADER_IN = WA_H
SALES_HEADER_INX = WA_HX
IMPORTING
SALESDOCUMENT_EX = G_VBELN
TABLES
RETURN = IT_RETURN
SALES_ITEMS_IN = IT_T
* SALES_ITEMS_INX =
SALES_PARTNERS = IT_PARTER
* SALES_SCHEDULES_IN =
* SALES_SCHEDULES_INX =
* SALES_CONDITIONS_IN =
执行后后发现一个问题,如下图所示:
我们传入的订单数量时不为0的,检查发现,此处订单数量是在TABLE参数SALES_SCHEDULES_IN中设置
设置如下:
WA_SCHDL-ITM_NUMBER = WA_T_OUT-ITM_NUMBER. "行项目
WA_SCHDL-REQ_QTY = WA_T_OUT-REQ_QTY. "数量
APPEND WA_SCHDL TO IT_SCHDL.
注意点二:删除SO
使用SD_SALESDOCUMENT_CHANGE 删除SO操作,必须设置删除标识 = 'D'
1)删除整单
SALESDOCUMENT = <doc. number>.
ORDER_HEADER_INX-UPDATEFLAG = 'D'.
2)删除行项目
SALESDOCUMENT = <doc. number>.
ORDER_ITEM_IN-ITM_NUMBER = <item number>.
ORDER_ITEM_INX-ITM_NUMBER = <item number>.
ORDER_ITEM_INX-UPDATEFLAG = 'D'.
注意点三:更新SO
使用SD_SALESDOCUMENT_CHANGE或者BAPI_SALESORDER_CHANGE 更新SO操作,必须设置更新标识 = 'U'
实例:关闭销售订单->设置行项目拒绝原因=Z3
DATA:
ls_h_inx TYPE bapisdh1x,
lt_item_in TYPE STANDARD TABLE OF bapisditm,
ls_item_in TYPE bapisditm,
lt_item_inx TYPE STANDARD TABLE OF bapisditmx,
ls_item_inx TYPE bapisditmx,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.
SELECT vbeln posnr
INTO CORRESPONDING FIELDS OF TABLE lt_vbap
FROM vbap
WHERE vbeln = ls_vbak-vbeln.
LOOP AT lt_vbap INTO ls_vbap.
ls_item_in-itm_number = ls_vbap-posnr.
ls_item_in-reason_rej = 'Z3'.
APPEND ls_item_in TO lt_item_in.
ls_item_inx-itm_number = ls_vbap-posnr.
ls_item_inx-updateflag = 'U'.
ls_item_inx-reason_rej = 'X'.
APPEND ls_item_inx TO lt_item_inx.
CLEAR: ls_item_in,
ls_item_inx.
ENDLOOP.
ls_h_inx-updateflag = 'U'.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = ls_vbak-vbeln
order_header_inx = ls_h_inx
TABLES
return = lt_return
order_item_in = lt_item_in
order_item_inx = lt_item_inx.
LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.
IF return-ifmsg = space.
return-ifmsg = ls_return-message.
ELSE.
return-ifmsg = return-ifmsg && '/' && ls_return-message.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
return-guid = ls_control-guid.
return-busno = ''.
return-if_statu = '02'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
return-guid = ls_control-guid.
return-busno = ''.
return-if_statu = '01'.
return-ifmsg = '销售订单' && ls_zdata-vbeln && '关闭成功'.
ENDIF.
注意点四:通过参考销售合同(VA43)创建销售订单
设置行项目参数ORDER_ITEM_IN如下三个字段
ORDER_ITEM_IN-VAL_CONTR "价值参考合同
ORDER_ITEM_IN-VAL_CON_I "价值参考合同行项目
ORDER_ITEM_IN-REF_DOC_CA = 'G'."参考凭证类别(固定)