修改组件物料有2种方法,一种是BDC,一种是通过BAPI ‘CO_XT_COMPONENT_CHANGE’
下面说一下‘CO_XT_COMPONENT_CHANGE’的用法,例子里只修改组件里面的物料
DATA: lv_po TYPE coxt_ord_key,
ls_component TYPE coxt_s_ord_comp_key,
ls_requ TYPE coxt_s_quantity,
ls_requx TYPE coxt_s_quantityx,
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_storage TYPE coxt_s_storage_location,
ls_storagex TYPE coxt_s_storage_locationx,
lv_charg TYPE coxt_batch,
lv_chargx TYPE coxt_batchx,
lv_cuobj TYPE coxt_config_object,
lv_cuobjx TYPE coxt_config_objectx,
ls_return TYPE coxt_bapireturn.
lv_po = <lfs_comp>-aufnr."生产订单号
"预留单项次
ls_component-rsnum = <lfs_comp>-rsnum.
ls_component-rspos = <lfs_comp>-rspos.
ls_component-rsart = <lfs_comp>-rsart.
"组件
lv_matnr = gs_zjth-matnr_zj_new.”修改后的物料
lv_matnrx = 'X'.
"数量
*ls_conf-quantity = '5'.
*ls_conf-uom = <lfs_comp>-MEINS.
*ls_confX-quantity = 'X'.
*ls_confX-uom = 'X'.
*"组件领料仓库
ls_storage-werks = <lfs_comp>-werks.“当修改物料的时候,这里的工厂必填,要不然会报错
ls_storagex-werks = 'X'.
*ls_storage-lgort = <lfs_comp>-LGORT.
*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
is_storage_location = ls_storage "组件领料仓库
is_storage_locationx = ls_storagex
i_batch = lv_charg "批次
i_batchx = lv_chargx
i_mi_configuration_object = lv_cuobj "内置对象号码
i_mi_configuration_objectx = lv_cuobjx
IMPORTING
es_bapireturn = ls_return.
IF ls_return-type CA 'EAX'.
ROLLBACK WORK.
lv_zmsg = '替换生产订单组件失败'.
ELSE.
CALL FUNCTION 'CO_ZV_ORDER_POST'
EXPORTING
commit_flag = space
ext_flg = 'X'
trans_typ = 'V'
no_dialog = 'X'
iv_commit_work_and_wait = 'X'
EXCEPTIONS
no_change = 01
update_reject = 02
error_message = 03.
* CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
* IMPORTING
* es_bapireturn = ls_return.
COMMIT WORK AND WAIT.
lv_zmsg = '修改成功'.
CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'."这个一定要写,要不然再次处理的时候,会报错
ENDIF.
CO_XT_ORDER_PREPARE_COMMIT 和 CO_ZV_ORDER_POST 作用一样,但是前者会有弹窗,所以程序里面用了后者,设置 no_dialog = ‘X’,就不会弹窗了