配置SAP 采購合同審批


需求:

采購合同類型是MK,采購組織是POSC,采購組PGC,標識:估計價格是空,總價有值0.00 - 9999999999.00 RMB

滿足以上條件的時候需要審批該合同。

 

配置:

  spro->物料管理->采購->合同->合同下達的過程:

1.配置特性值:

基本數據頁簽:
狀態:已發布
格式:數據類型
字符數:
值分配:
附加數據頁簽:
表名:CEKKO 字段名:BSART 合同類型
備注:如果沒有字段,需要在結構CEKKO中增強

2.配置類:

基本數據頁簽:
狀態:
相同分類:不要檢查
特性:把設置的特性都填寫進來

3.定義合同審批過程:

3.1:批准組 第一列填寫批准組,第2列采購訂單類將被批准的對象的類別
都是2,第三列填寫設置的類名稱,第四列名稱

3.2:批准代碼設置

3.3:發布標識:備注:第二列核發勾上說明審核完,可變性是6的話變化會再次觸發審批,具體看幫助,第三列%值的更改變化范圍

3.4:審批策略:

維護審批分類的條件值可用CL20N事物代碼進去維護

審批種類是032

增強:審批有個增強點 smod 進去M06E0004

如果涉及到行項目的要計算一下賦值給增強的CEKKO.

 

備注:對於采購合同來說,SAP標准的策略是價格往高的改才會再次觸發審批,而且新加時間區間的價格條件價格是不會再次觸發審批的,但是我們可以做一個增強:

在函數:ME_REL_STRATEGIE_EKKO做一個隱士增強:

FUNCTION me_rel_strategie_ekko.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Function Module ME_REL_STRATEGIE_EKKO, Start                                                                                                      A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  ZCONTRACTOR_TRAIL_ENHANCEMENT.    "active version
   I_CHECK_ALWAYS = 'X'.
ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(I_CEKKO_NEW) LIKE  CEKKO STRUCTURE  CEKKO
*"     VALUE(I_CEKKO_OLD) LIKE  CEKKO STRUCTURE  CEKKO OPTIONAL
*"     VALUE(I_FRGGR) LIKE  EKKO-FRGGR OPTIONAL
*"     VALUE(I_FRGST) LIKE  EKKO-FRGSX OPTIONAL
*"     VALUE(I_FRGZU) LIKE  EKKO-FRGZU OPTIONAL
*"     VALUE(I_FRGKZ) LIKE  EKKO-FRGKE OPTIONAL
*"     VALUE(I_FRGRL) LIKE  EKKO-FRGRL OPTIONAL
*"     VALUE(I_OUTPUT) OPTIONAL
*"     VALUE(I_WKURS) LIKE  EKKO-WKURS OPTIONAL
*"     VALUE(I_WKURS_OLD) LIKE  EKKO-WKURS OPTIONAL
*"     VALUE(I_LPOT) OPTIONAL
*"     VALUE(I_CHECK_ALWAYS) TYPE  CHAR1 OPTIONAL
*"  EXPORTING
*"     VALUE(E_FRGGR) LIKE  EKKO-FRGGR
*"     VALUE(E_FRGST) LIKE  EKKO-FRGSX
*"     VALUE(E_FRGZU) LIKE  EKKO-FRGZU
*"     VALUE(E_FRGKZ) LIKE  EKKO-FRGKE
*"     VALUE(E_FRGRL) LIKE  EKKO-FRGRL
*"     VALUE(E_RESET)
*"  CHANGING
*"     REFERENCE(CH_RLWRT) TYPE  RLWRT OPTIONAL
*"  EXCEPTIONS
*"      ERROR_MESSAGE
*"----------------------------------------------------------------------

  MOVE i_cekko_new TO cekko.
  MOVE i_cekko_old TO *cekko.
  MOVE i_wkurs TO bwkurs.
  MOVE i_wkurs_old TO bwkurs_old.
  MOVE cekko-bedat TO bbedat.
  CLEAR s_kzfae.
*- Falls alle Positionen gelöscht sind, ist Eink.Beleg nicht relevant -*
  IF i_lpot NE space.
    e_frgrl = space.
    EXIT.
  ENDIF.
*- Prüfen Reset --------------------------------------------------------
  CLEAR xchange.
  IF NOT *cekko IS INITIAL.
    e_frgst = i_frgst.
    e_frggr = i_frggr.
    e_frgkz = i_frgkz.
    e_frgrl = i_frgrl.
    e_frgzu = i_frgzu.
    IF i_frgzu NE space.
      xchange = 'X'.
    ENDIF.
  ENDIF.

*- Prüfen, ob neue Ermittlung beim Ändern ------------------------------
  IF xchange NE space.
    IF t16fb-frgke NE i_frgkz.
      CLEAR t16fb.
      SELECT SINGLE * FROM t16fb WHERE frgke EQ i_frgkz.
    ENDIF.
    IF t16fb-kzfae EQ '2'.
      EXIT.
    ENDIF.
*- altes Änderungskennzeichen sichern falls neues ermittelt wird ------*
    s_kzfae = t16fb-kzfae.
  ENDIF.

*- Klasse ermitteln ----------------------------------------------------
  xclass = 'X'.
  CLEAR t16fg.                               "1025079
  SELECT * FROM t16fg WHERE frgot EQ '2'.
    EXIT.
  ENDSELECT.
  IF sy-subrc NE 0 OR
     t16fg-frgkl EQ space.
    EXIT.
  ENDIF.
*- Hauswährung ermitteln -----------------------------------------------
  fwaers = cekko-waers.
  IF cekko-bukrs NE t001-bukrs.
    SELECT SINGLE * FROM t001  WHERE bukrs EQ cekko-bukrs.
  ENDIF.
  hwaers = t001-waers.

*- Prüfen Änderung ----------------------------------------------------*
  IF cekko EQ *cekko AND
     bwkurs EQ bwkurs_old AND i_check_always EQ space.
    EXIT.
  ENDIF.

  comm = 'CEKKO'.
  PERFORM strategie_neu USING e_frggr e_frgst.


*- Änderung bei laufender Freigabe prüfen ------------------------------
  IF xchange NE space.
*- Strategie geändert --------------------------------------------------
    IF e_frgst NE i_frgst OR
       e_frggr NE i_frggr.
      PERFORM reset
         USING e_frgst e_frggr
               e_frgzu e_frgkz e_frgrl.
      e_reset = 'X'.
*- Wertänderung prüfen -------------------------------------------------
    ELSE.
      IF t16fb-kzfae EQ '4' OR
         t16fb-kzfae EQ '6' .
         PERFORM currency_conversion USING *cekko-waers
                                          bwkurs_old
                                          hwaers
                                          fwaers
                                          bwkurs
                                    CHANGING *cekko-gnetw.
        f1 = *cekko-gnetw * t16fb-tlfae / 1000.
        f1 = f1 + *cekko-gnetw.
        IF cekko-gnetw GT f1.
          PERFORM reset
            USING e_frgst e_frggr
                  e_frgzu e_frgkz e_frgrl.
          e_reset = 'X'.
        ENDIF.
      ENDIF.
    ENDIF.
  ELSE.
    PERFORM reset
       USING e_frgst e_frggr
             e_frgzu e_frgkz e_frgrl.
  ENDIF.
*- Prüfen, ob Beleg bereits ausgegeben wurde ---------------------------
  IF i_output NE space AND xchange NE space.
*- Neue Freigabestrategie trotz erfolgter Ausgabe erlaubt -------------*
    IF NOT ( s_kzfae EQ '5' OR
       s_kzfae EQ '6' OR i_frgst EQ space ).
*---- keine neue Freigabestrategie bei erfolgter Ausgabe --------------*
      SELECT SINGLE * FROM t16fb WHERE frgke EQ e_frgkz.
      IF t16fb-kzfre EQ space.
        e_frgst = i_frgst.
        e_frggr = i_frggr.
        e_frgkz = i_frgkz.
        e_frgrl = i_frgrl.
        e_frgzu = i_frgzu.
        e_reset = 'Y'.
      ENDIF.
    ENDIF.
  ENDIF.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Function Module ME_REL_STRATEGIE_EKKO, End                                                                                                        A
*$*$-Start: (2)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 2  ZCONTRACTOR_TRAIL_ENHANCEMENT.    "active version

  IF xchange NE space.
    IF e_frgst NE i_frgst OR
       e_frggr NE i_frggr.
      EXIT.
    ELSE.
          PERFORM reset
            USING e_frgst e_frggr
                  e_frgzu e_frgkz e_frgrl.
          e_reset = 'X'.
          EXIT.
      IF t16fb-kzfae EQ '4' OR t16fb-kzfae EQ '6'.
         PERFORM currency_conversion USING *cekko-waers
                                          bwkurs_old
                                          hwaers
                                          fwaers
                                          bwkurs
                                    CHANGING *cekko-gnetw.
        f1 = *cekko-gnetw * t16fb-tlfae / 1000.
        f1 = f1 + *cekko-gnetw.
        IF cekko-gnetw <> f1.
          PERFORM reset
            USING e_frgst e_frggr
                  e_frgzu e_frgkz e_frgrl.
          e_reset = 'X'.
        ENDIF.
      ENDIF.
    ENDIF.
  ELSE.
    EXIT.
  ENDIF.

ENDENHANCEMENT.
*$*$-End:   (2)---------------------------------------------------------------------------------$*$*
ENDFUNCTION.

 


免責聲明!

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



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