zoukankan      html  css  js  c++  java
  • 配置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.
  • 相关阅读:
    Legacy(点对线段有路走,线段向点有路走,线段树走dij)
    G. Death DBMS(查询每个主串和n个模板串匹配后val最大值,支持单点更新)
    2020 CCPC Wannafly Winter Camp Day5 J Xor on Figures(矩阵转01串,统计01串异或种类)
    zoj3988(自己集合和自己集合匹配)
    2020 CCPC Wannafly Winter Camp Day7 A(求任何子序列中相邻范围内数的个数的总和)
    hdu6241(给定树中向上向下限制求最小可能个数)
    hdu6230(求限制条件的回文个数,利用manacher+BIT求解)
    NOIP 2020 游记
    分散层叠算法学习笔记
    代理模式
  • 原文地址:https://www.cnblogs.com/caizjian/p/6197693.html
Copyright © 2011-2022 走看看