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