ABAP修改生產訂單組件BAPI 'BAPI_ALM_ORDER_MAINTAIN'


BAPI_ALM_ORDER_MAINTAIN

場景一:當發現BOM不准確,且已經生成了生產訂單后需要批量修改BOM后 修改生產訂單組件數量大。故開發程序批量修改。

場景二:BOM基於既定條件下是准確的,但是由於備料或者庫存缺料以及需要消耗呆滯料等問題,需要臨時修改改生產訂單組件(不修改BOM信息)。CO02這個權限很大且對於多數據修改比較麻煩,所以需開發一個只能修改生產訂單組件的功能。

基於開發角度的分析:

1) 使用BDC錄屏的方式。

2) 使用BAPI_ALM_ORDER_MAINTAIN(修改生產訂單組件)

TYPES:BEGIN OF ty_data ,
        zsel   TYPE char10,
        status TYPE char40,            "狀態
        zmseg  TYPE char255,           "返回消息
        werks  TYPE mapl-werks,        "工廠
        aufnr  TYPE aufk-aufnr,        "生產訂單
        aposn  TYPE aposn,
        idnrk1 TYPE stpo-idnrk,
        zwlms1 TYPE string,
        idnrk2 TYPE stpo-idnrk,
        zwlms2 TYPE string,
      END OF ty_data .

DATA:gt_item2 TYPE TABLE OF ty_data,
     gs_item2 TYPE ty_data.

DATA:is_methods LIKE bapi_alm_order_method,
     it_methods      LIKE STANDARD TABLE OF  bapi_alm_order_method,
     is_component    LIKE    bapi_alm_order_component,      "組件信息
     it_component    LIKE STANDARD TABLE OF  bapi_alm_order_component,      "組件信息
     is_component_up LIKE    bapi_alm_order_component_up,
     it_component_up LIKE STANDARD TABLE OF  bapi_alm_order_component_up,
     return          LIKE TABLE OF  bapiret2,                      "返回消息
     et_numbers      LIKE    bapi_alm_numbers.              "返回訂單編碼信息
LOOP AT gt_item2 ASSIGNING FIELD-SYMBOL(<gs_item>).

      PERFORM frm_read_text USING <gs_item>-idnrk1 CHANGING <gs_item>-zwlms1 .
      PERFORM frm_read_text USING <gs_item>-idnrk2 CHANGING <gs_item>-zwlms2 .
      CLEAR :it_methods[],it_component[],it_component_up[],return,lv_msg,lv_index.
      "組件信息
      SELECT * FROM resb INTO TABLE @DATA(lt_resb) WHERE aufnr = @<gs_item>-aufnr AND posnr = @<gs_item>-aposn .
      IF lt_resb IS NOT INITIAL.
        READ TABLE lt_resb ASSIGNING FIELD-SYMBOL(<ls_resb>) INDEX 1 .
        lv_index = '1' .
        IF sy-subrc = 0 .

          APPEND INITIAL LINE TO it_methods ASSIGNING FIELD-SYMBOL(<fs_methods>).
          <fs_methods>-refnumber        = lv_index.
          <fs_methods>-objecttype       = 'COMPONENT'.
          <fs_methods>-method           = 'CHANGE'.
          <fs_methods>-objectkey(12)    =  <gs_item>-aufnr.
          <fs_methods>-objectkey+12(4)  =  <ls_resb>-rspos.

          APPEND INITIAL LINE TO it_component ASSIGNING FIELD-SYMBOL(<fs_component>).
          <fs_component>-reserv_no          = <ls_resb>-rsnum.
          <fs_component>-res_item           = <ls_resb>-rspos.
          <fs_component>-activity           = <GS_ITEM>-aposn.
          <fs_component>-material           = <gs_item>-idnrk2.

          APPEND INITIAL LINE TO it_component_up ASSIGNING FIELD-SYMBOL(<fs_component_up>).
          <fs_component_up>-material                 = 'X'.

          APPEND INITIAL LINE TO it_methods ASSIGNING FIELD-SYMBOL(<fs_zmethods>).
          <fs_zmethods>-refnumber  = lv_index.
          <fs_zmethods>-method     = 'SAVE'.
          <fs_zmethods>-objectkey  = <gs_item>-aufnr.

        ENDIF.

        CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
          TABLES
            it_methods      = it_methods
            it_component    = it_component
            it_component_up = it_component_up
            return          = return.

        LOOP AT return ASSIGNING FIELD-SYMBOL(<fs_return>) WHERE type CA 'EA'.
          lv_msg = lv_msg && condense( <fs_return>-message ).
        ENDLOOP.
        <gs_item>-aufnr = |{ <gs_item>-aufnr ALPHA = OUT }| .
        IF lv_msg IS NOT INITIAL.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          <gs_item>-status  = icon_red_light.
          <gs_item>-zmseg   = '生產訂單:' && <gs_item>-aufnr && '組件調整錯誤' && lv_msg.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          <gs_item>-status = icon_green_light.
          <gs_item>-zmseg  = '生產訂單:' && <gs_item>-aufnr && '組件調整完畢!' .
        ENDIF.

      ELSE .
        <gs_item>-status = icon_red_light .
        <gs_item>-zmseg  = '找不到生產訂單信息!' .
      ENDIF.

    ENDLOOP.

根據生產訂單組件對應的預留和BOM項目確定修改哪一行組件,系統中的數據可以通過COOIS導出來 。

此時賦值完后還是不能成功。那是因為系統提供的BAPI只能修改PM生產訂單。

需要修改源代碼跳過檢查即可 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM