配置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.

 

posted @ 2016-12-19 15:31  学习笔记NO.1  阅读(3650)  评论(0编辑  收藏  举报