需求:
采購合同類型是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.