添加生产订单组件——CO_XT_COMPONENT_ADD


效果:

代码:

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,
      l_msg(100) TYPE c.

TYPES: BEGIN OF ts_resb_bt.
  INCLUDE TYPE resbb.
TYPES: indold LIKE sy-tabix,
no_req_upd LIKE sy-datar,
END OF ts_resb_bt.

TYPES: tt_resb_bt TYPE TABLE OF ts_resb_bt.
FIELD-SYMBOLS: <lt_resb_bt> TYPE tt_resb_bt,
               <ls_resb_bt> TYPE ts_resb_bt.

ls_requ-quantity = 228.
ls_requ-uom = 'PCS'.

ls_storage-werks = '2000'.
ls_storage-lgort = '2101'.

ls_storagex-werks = 'X'.
ls_storagex-lgort = 'X'.

CALL FUNCTION 'CO_XT_COMPONENT_ADD'
  EXPORTING
    is_order_key               = '000020030749'  "生产订单
    i_material                 = 'CTXB0056-S2V-1' "子件
    is_requ_quan               = ls_requ  "子件需求数量和单位
    i_operation                = '00000007' "工艺工序节点计数器
    is_storage_location        = ls_storage "工厂和仓库
    is_storage_locationx       = ls_storagex
    i_postp                    = 'L'  "项目种类
    i_posno                    = '000000' "BOM项目计数器
 IMPORTING
   es_bapireturn              = ls_return.

ASSIGN ('(SAPLCOBC)RESB_BT[]') TO <lt_resb_bt>.
LOOP AT <lt_resb_bt> ASSIGNING <ls_resb_bt>.
  <ls_resb_bt>-posnr = '0020'.  "组件项目编号
ENDLOOP.

IF ls_return-type NE 'E'.
  CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
    TABLES
       et_bapireturn          = lt_return.
  IF sy-subrc = 0.
    COMMIT WORK AND WAIT.
    l_msg = '添加成功'.
    cl_demo_output=>write( l_msg ).
  ELSE.
    cl_demo_output=>write( lt_return ).
  ENDIF.
ELSE.
  cl_demo_output=>write( ls_return ).
ENDIF.
cl_demo_output=>display(  ).

部分组件要给的工序可能不一样,以下代码解决组件项目号不连号问题

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,
      l_msg(100) TYPE c.

TYPES: BEGIN OF ts_resb_bt.
  INCLUDE TYPE resbb.
TYPES: indold LIKE sy-tabix,
no_req_upd LIKE sy-datar,
END OF ts_resb_bt.

TYPES: tt_resb_bt TYPE TABLE OF ts_resb_bt.
FIELD-SYMBOLS: <lt_resb_bt> TYPE tt_resb_bt,
               <ls_resb_bt> TYPE ts_resb_bt.

ls_requ-quantity = 2.
ls_requ-uom = 'PCS'.

ls_storage-werks = '2000'.
ls_storage-lgort = '2102'.

ls_storagex-werks = 'X'.
ls_storagex-lgort = 'X'.

CALL FUNCTION 'CO_XT_COMPONENT_ADD'
  EXPORTING
    is_order_key               = '000021063941'  "生产订单
    i_material                 = 'CTYB0734-XX' "子件
    is_requ_quan               = ls_requ  "子件需求数量和单位
    i_operation                = '00000003' "工艺工序节点计数器
    is_storage_location        = ls_storage "工厂和仓库
    is_storage_locationx       = ls_storagex
    i_postp                    = 'L'  "项目种类
    i_posno                    = '000000' "BOM项目计数器
 IMPORTING
   es_bapireturn              = ls_return.

ls_requ-quantity = 186 / 1000 * -1.
ls_requ-uom = 'KG'.

ls_storage-werks = '2000'.
ls_storage-lgort = '211A'.

ls_storagex-werks = 'X'.
ls_storagex-lgort = 'X'.

CALL FUNCTION 'CO_XT_COMPONENT_ADD'
  EXPORTING
    is_order_key               = '000021063941'  "生产订单
    i_material                 = 'MTBB-PGX008' "子件
    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.

ASSIGN ('(SAPLCOBC)RESB_BT[]') TO <lt_resb_bt>.

"按工序节点排序完再给组件项目号
SORT <lt_resb_bt> BY aplzl.

LOOP AT <lt_resb_bt> ASSIGNING <ls_resb_bt>.
  "组件项目编号
  <ls_resb_bt>-posnr = 10 * sy-tabix.
  <ls_resb_bt>-posnr = |{ <ls_resb_bt>-posnr ALPHA = IN }|.
ENDLOOP.

IF ls_return-type NE 'E'.
  CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
    TABLES
       et_bapireturn          = lt_return.
  IF sy-subrc = 0.
    COMMIT WORK AND WAIT.
    l_msg = '添加成功'.
    cl_demo_output=>write( l_msg ).
  ELSE.
    cl_demo_output=>write( lt_return ).
  ENDIF.
ELSE.
  cl_demo_output=>write( ls_return ).
ENDIF.
cl_demo_output=>display(  ).

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM