参考 https://www.cnblogs.com/StephenAmell/p/16742366.html
注意点:调用前,必须 调用 CO_XT_ORDER_INITIALIZE ,否则没有效果
中间过程是 如下3个的任意组合
1、BAPI CO_XT_COMPONENT_ADD
2、CO_XT_COMPONENT_CHANGE
3、CO_XT_COMPONENTS_DELETE
调用后
CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT' “预先提交
TABLES
ET_BAPIRETURN = LT_RETURN.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.
DATA: LT_RESBKEYS TYPE COXT_T_RESBDEL,
LV_ERROR TYPE FLAG.
DATA: LS_REQU TYPE COXT_S_QUANTITY,
LS_STORAGE TYPE COXT_S_STORAGE_LOCATION,
LS_STORAGEX TYPE COXT_S_STORAGE_LOCATIONX,
LS_RETURN TYPE COXT_BAPIRETURN,
LT_RETURN TYPE COXT_T_BAPIRETURN,
LS_COMPONENT TYPE COXT_S_ORD_COMP_KEY,
LV_PO TYPE COXT_ORD_KEY,
LS_CONF TYPE COXT_S_QUANTITY,
LS_CONFX TYPE COXT_S_QUANTITYX,
LV_MATNR TYPE COXT_MATERIAL,
LV_MATNRX TYPE COXT_MATERIALX,
LS_OPER TYPE COXT_S_ORD_OPR_KEY,
LS_OPERX TYPE COXT_S_ORD_OPR_KEYX,
LS_REQUX TYPE COXT_S_QUANTITYX,
LV_CHARG TYPE COXT_BATCH,
LV_OBJ TYPE COXT_CONFIG_OBJECT,
LV_OBJX TYPE COXT_CONFIG_OBJECTX,
LV_CHARGX TYPE COXT_BATCHX,
LV_CUOBJ TYPE COXT_CONFIG_OBJECT,
LV_CUOBJX TYPE COXT_CONFIG_OBJECTX,
LV_MSG TYPE STRING.
TYPES: BEGIN OF TY_RESB_BT.
INCLUDE TYPE RESBB.
TYPES: INDOLD LIKE SY-TABIX,
NO_REQ_UPD LIKE SY-DATAR,
END OF TY_RESB_BT.
TYPES: LT_RESB_BT TYPE TABLE OF TY_RESB_BT.
FIELD-SYMBOLS: <LT_RESB_BT> TYPE LT_RESB_BT,
<LS_RESB_BT> TYPE TY_RESB_BT.
LS_REQU-QUANTITY = 6.
LS_REQU-UOM = 'EA'.
LS_STORAGE-WERKS = '1001'.
LS_STORAGE-LGORT = '2401'.
LS_STORAGEX-WERKS = 'X'.
LS_STORAGEX-LGORT = 'X'.
CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.
CALL FUNCTION 'CO_XT_COMPONENT_ADD'
EXPORTING
IS_ORDER_KEY = '001000000380' "生产订单
I_MATERIAL = '000000000960001976' "组件
IS_REQU_QUAN = LS_REQU "组件需求数量和单位
I_OPERATION = '00000001' "工艺工序节点计数器
IS_STORAGE_LOCATION = LS_STORAGE "工厂和仓库
IS_STORAGE_LOCATIONX = LS_STORAGEX
I_POSTP = 'L' "项目种类
I_POSNO = '000000' "BOM项目计数器
IMPORTING
ES_BAPIRETURN = LS_RETURN.
CALL FUNCTION 'CO_XT_COMPONENT_ADD'
EXPORTING
IS_ORDER_KEY = '001000000380' "生产订单
I_MATERIAL = '000000000960001976' "组件
IS_REQU_QUAN = LS_REQU "组件需求数量和单位
I_OPERATION = '00000001' "工艺工序节点计数器
IS_STORAGE_LOCATION = LS_STORAGE "工厂和仓库
IS_STORAGE_LOCATIONX = LS_STORAGEX
I_POSTP = 'L' "项目种类
I_POSNO = '000000' "BOM项目计数器
IMPORTING
ES_BAPIRETURN = LS_RETURN.
"生产订单
LV_PO = '001000000380'.
"预留单项次
LS_COMPONENT-RSNUM = '0000009059'.
LS_COMPONENT-RSPOS = '0002'.
"组件
LV_MATNR = '000000000960001976'.
LV_MATNRX = 'X'.
"组件领料仓库
LS_STORAGE-WERKS = '1001'.
LS_STORAGE-LGORT = '2401'.
LS_STORAGEX-WERKS = 'X'.
LS_STORAGEX-LGORT = 'X'.
CALL FUNCTION 'CO_XT_COMPONENT_CHANGE'
EXPORTING
IS_ORDER_KEY = LV_PO "生产订单
IS_ORDER_COMPONENT_KEY = LS_COMPONENT "组件
IS_REQUIREMENT_QUANTITY = LS_REQU "组件需求数量
IS_REQUIREMENT_QUANTITYX = LS_REQUX
IS_CONFIRMED_QUANTITY = LS_CONF "生产数量
IS_CONFIRMED_QUANTITYX = LS_CONFX
I_MATERIAL = LV_MATNR "组件物料
I_MATERIALX = LV_MATNRX
IS_ORDER_OPERATION_KEY = LS_OPER "组件指派工序
IS_ORDER_OPERATION_KEYX = LS_OPERX
I_BATCH = LV_CHARG "批次
I_BATCHX = LV_CHARGX
I_MI_CONFIGURATION_OBJECT = LV_OBJ
I_MI_CONFIGURATION_OBJECTX = LV_OBJX
IS_STORAGE_LOCATION = LS_STORAGE "组件领料仓库
IS_STORAGE_LOCATIONX = LS_STORAGEX
IMPORTING
ES_BAPIRETURN = LS_RETURN.
SELECT RSNUM, RSPOS,MATNR,WERKS,BDMNG,MEINS INTO TABLE @DATA(LT_RESB)
FROM RESB
WHERE AUFNR = @LV_PO and RSPOS >= '0002'. " Previously created order
IF SY-SUBRC EQ 0.
LT_RESBKEYS = CORRESPONDING #( LT_RESB ).
ENDIF.
CALL FUNCTION 'CO_XT_COMPONENTS_DELETE'
EXPORTING
IT_RESBKEYS_TO_DELETE = LT_RESBKEYS
IMPORTING
E_ERROR_OCCURRED = LV_ERROR
TABLES
CT_BAPIRETURN = LT_RETURN
EXCEPTIONS
DELETE_FAILED = 1
OTHERS = 2.
IF LS_RETURN-TYPE NE 'E'.
ASSIGN ('(SAPLCOBC)RESB_BT[]') TO <LT_RESB_BT>.
LOOP AT <LT_RESB_BT> ASSIGNING <LS_RESB_BT> WHERE POSNR IS INITIAL.
<LS_RESB_BT>-POSNR = '0020'. "组件项目编号
<LS_RESB_BT>-NOMNG = 6. "输入数量
<LS_RESB_BT>-POSNR = '0020'. "组件项目编号
<LS_RESB_BT>-NOMNG = 9. "输入数量
ENDLOOP.
CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
TABLES
ET_BAPIRETURN = LT_RETURN.
IF SY-SUBRC = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.
ENDIF.
ENDIF.