Contents ...
udn網路城邦
SAP_修改PP工單_批次參數_BAPI
2026/08/17 14:33
瀏覽20
迴響0
推薦0
引用0

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.

全站分類:知識學習 隨堂筆記
自訂分類:SAP
下一則: sap_KOB2_匯率讀取哪裡
發表迴響

會員登入