添加生產訂單組件——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