SAP ECC 舊版.
部分企業使用 BDC 建立工單.隨使用時間積累.工單參數變多.調整的機會也增加.
ECC 卻不見得能使用所有的 BAPI.
下列提供一個BAPI給有需求的程序員參考.
AI 問世.大大縮短蒐尋時間.效益大為提升.真是美麗的世代.雖然還是揮汗碼程式.但較之往昔.已然輕鬆不少.
工單修改的BAPI " BAPI_NETWORK_COMP_CHANGE "
FORM PROCESS_CHARG.
"多張工單號碼
DATA:
lv_aufnr TYPE bapi_network_list-NETWORK,
lt_components_detail TYPE STANDARD TABLE OF bapi_network_comp_detail,
ls_components_detail TYPE bapi_network_comp_detail,
lt_components_change TYPE STANDARD TABLE OF bapi_network_comp_change,
ls_components_change TYPE bapi_network_comp_change,
lt_components_change_update TYPE STANDARD TABLE OF bapi_network_comp_cng_upd,
ls_components_change_update TYPE bapi_network_comp_cng_upd,
ls_return TYPE bapiret2,
lt_message TYPE STANDARD TABLE OF bapi_meth_message.
data : ct TYPE i.
ct = 1.
SORT gt_aufnr by aufnr ASCENDING.
LOOP AT gt_aufnr.
" 1. 設定您的工單號碼(必須補足前導零,共 12 碼)
lv_aufnr = gt_aufnr-aufnr.
" 前補零
CALL FUNCTION CONVERSION_EXIT_ALPHA_INPUT
EXPORTING
input = lv_aufnr
IMPORTING
output = lv_aufnr.
" 2. 先獲取該工單目前的組件明細
CALL FUNCTION BAPI_NETWORK_COMP_GETDETAIL
EXPORTING
number = lv_aufnr
TABLES
e_components_detail = lt_components_detail.
" 3. 篩選出您要修改的組件(例如依據:項目號 POSNR 與 物料號 MATNR)
LOOP AT lt_components_detail INTO ls_components_detail.
CLEAR: ls_components_change, ls_components_change_update.
" 修改數據表:傳入唯一的組件識別碼與新批號
ls_components_change-component = ls_components_detail-component.
READ TABLE temp_item index ct.
IF sy-subrc = 0.
ls_components_change-batch = temp_item-charg. " << 填入您要修改的新批號
ls_components_change-stge_loc = temp_item-lgort. " << 儲位
ls_components_change-ENTRY_QUANTITY = temp_item-labst. " 數量
APPEND ls_components_change TO lt_components_change.
ENDIF.
" 勾選更新表:宣告要更新的欄位
ls_components_change_update-component = ls_components_detail-component.
ls_components_change_update-batch = X. " 標記更新批號
ls_components_change_update-stge_loc = X. " 標記更新儲位
ls_components_change_update-ENTRY_QUANTITY = X. " 標記更新數量
APPEND ls_components_change_update TO lt_components_change_update.
ENDLOOP.
" 4. 執行變更
IF lt_components_change IS NOT INITIAL.
CALL FUNCTION BAPI_NETWORK_COMP_CHANGE
EXPORTING
number = lv_aufnr
IMPORTING
return = ls_return
TABLES
i_components_change = lt_components_change
i_components_change_update = lt_components_change_update
e_message_table = lt_message.
" 5. 檢查 BAPI 執行結果並提交
IF ls_return-type <> E AND ls_return-type <> A.
CALL FUNCTION BAPI_TRANSACTION_COMMIT
EXPORTING
wait = X.
"WRITE: / 批號修改成功!.
ELSE.
CALL FUNCTION BAPI_TRANSACTION_ROLLBACK.
"WRITE: / 修改失敗:, ls_return-message.
ENDIF.
ENDIF.
ct = ct + 1.
ENDLOOP.
ENDFORM.

