效果:
代碼:
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( ).