SAP PPORDER 订单组件修改BAPI CO_XT_COMPONENT_ADD CO_XT_COMPONENT_CHANGE CO_XT_COMPONENTS_DELETE是可以放在一起的

110 篇文章 14 订阅
30 篇文章 2 订阅

参考 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值