1. 程式人生 > 其它 >ME21N增強-採購訂單不能重複採購同一個資產號

ME21N增強-採購訂單不能重複採購同一個資產號

  原本都是從採購申請轉採購訂單,現在上了BPM後,有直接建立採購訂單的情況,採購訂單也增加增強,不能重複採購同一個資產號

SE19->使用ME_PROCESS_PO_CUST實施,這裡以前有實施了的,直接用

 IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT,跟其它為刪除的採購訂單做比對,這裡ZMMT001是以前建立的,在採購申請的增強中用來臨時跳過檢查重複採購資產號的。PS:本來這個表應該加上次級資產編號和公司程式碼的,因為其它原因,這裡就只用資產號了。

METHOD if_ex_me_process_po_cust~process_account.
* IF ls_head-bsart EQ 'Z002'. * BREAK it0003. DATA:lc_account TYPE REF TO if_purchase_order_account_mm, lc_item TYPE REF TO if_purchase_order_item_mm, ls_poitem TYPE mepoitem, "po item datas ls_account TYPE mepoaccounting, "科目分配欄位結構 lv_sakto TYPE saknr. "總帳科目編號 CALL
METHOD im_account->get_item RECEIVING re_item = lc_item. CALL METHOD lc_item->get_data RECEIVING re_data = ls_poitem. IF ls_poitem-loekz EQ ''. CALL METHOD im_account->get_data RECEIVING re_data = ls_account. IF ls_account-anln1 IS NOT INITIAL
. SELECT COUNT(*) FROM zmmt001 WHERE anln1 EQ ls_account-anln1. IF sy-subrc NE 0. * READ TABLE Gt_ekkn INTO DATA(Gs_ekkn) INDEX 1. * IF sy-subrc EQ 0. SELECT COUNT(*) FROM ekkn JOIN ekpo ON ekkn~ebeln EQ ekpo~ebeln AND ekkn~ebelp EQ ekpo~ebelp WHERE ekkn~anln1 EQ @ls_account-anln1 AND ekkn~anln2 EQ @ls_account-anln2 AND ekkn~kokrs EQ @ls_account-kokrs AND ekkn~ebeln NE @ls_account-ebeln AND ekpo~loekz EQ ''. IF sy-subrc EQ 0. MESSAGE e009(zhele). ENDIF. * ENDIF. * ENDIF. ENDIF. ENDIF. ENDIF. ENDMETHOD.
View Code

IF_EX_ME_PROCESS_PO_CUST~CHECK,同一個採購訂單也不能同時存在相同的資產號

DATA: lt_data TYPE purchase_order_items,
        ls_data TYPE purchase_order_item.
  DATA: ls_item TYPE mepoitem.
  DATA: lt_item TYPE mepoitem.

  DATA: ls_head TYPE mepoheader.
  DATA: lv_class TYPE REF TO if_purchase_order_item_mm.
  DATA: lv_account TYPE REF TO if_purchase_order_account_mm,
        lt_account TYPE purchase_order_accountings,
        ls_account TYPE purchase_order_accounting,
        ls_anln1   TYPE mepoaccounting,
        lt_anln1   TYPE TABLE OF mepoaccounting,
        lv_tabix1  TYPE sy-tabix,
        lv_tabix2  TYPE sy-tabix.

LOOP AT lt_data INTO ls_data.
    lv_class = ls_data-item.
    CALL METHOD lv_class->get_accountings
      RECEIVING
        re_accountings = lt_account.
    LOOP AT lt_account INTO ls_account.
      lv_account = ls_account-accounting.
      CALL METHOD lv_account->get_data
        RECEIVING
          re_data = ls_anln1.
      SELECT COUNT(*)
      FROM zmmt001
     WHERE anln1 EQ ls_anln1-anln1.
      IF sy-subrc NE 0.
        APPEND ls_anln1 TO lt_anln1[].
      ENDIF.
    ENDLOOP.

  ENDLOOP.
*    BREAK-POINT.
  DELETE lt_anln1 WHERE anln1 EQ ''.
  lv_tabix1 = lines( lt_anln1[] ).
  SORT lt_anln1 BY kokrs anln1 anln2.
  DELETE ADJACENT DUPLICATES FROM lt_anln1 COMPARING kokrs anln1 anln2.
  lv_tabix2 = lines( lt_anln1[] ).
  IF lv_tabix1 NE lv_tabix2.
    MESSAGE e009(zhele).
  ENDIF.
View Code