SAP 采购订单审批策略的出口设置(任何修改都触发重新审批)
业务应用场景:
业务单位要求部分采购订单,不管做任何修改(不管金额改大改小)都触发重新审批订单。
解决思路:
首先在SAP的配置中只能实现订单改大重新触发审批策略。
这部分配置有很多的配置资料可以查阅:
主要的配置路径为: SPRO--物料管理--采购--采购订单--采购订单的下达过程--定义采购订单的审批过程--发布标识
主要配置内容
可变性:1--6有不同的控制属性,一般情况下为6.
%值更改:控制多少的变化值(变大),会重新触发审批,如果为空则任何变化都会触发审批。
SAP标准的配置是无法控制订单金额改小的策略变化,当订单变小的时候后台配置是无法重新触发审批策略的。
这时候需要出口来进行控制:
出口程序为:ZXM06U22
出口代码如下:
E_CEKKO = I_CEKKO . '
DATA : C_FLAG TYPE C .
DATA : WA_BEKPO TYPE BEKPO,
WA_CEKKO TYPE CEKKO,
W_RESET(1) TYPE C VALUE ' '.
DATA EXCH_RATE LIKE BAPI1093_0 .
DATA V_VALUE LIKE WA_CEKKO-GNETW . '用来获取审批策略中的临界金额
CLEAR W_RESET .
CASE E_CEKKO-EKGRP .
WHEN 'A01'. '根据采购组判断需要执行出口的采购订单
CLEAR C_FLAG .
C_FLAG = 'X' .
ENDIF.
IF C_FLAG = 'X' .
CLEAR WA_CEKKO .
IF SY-TCODE EQ 'ME22N' OR SY-TCODE EQ 'ME22'.
WA_CEKKO = I_CEKKO .
IMPORT WA_CEKKO = WA_CEKKO FROM MEMORY ID 'ZREL_COST'.
IF SY-SUBRC NE 0 .
EXPORT WA_CEKKO = WA_CEKKO TO MEMORY ID 'ZREL_COST'.
ENDIF .
ENDIF .
IF ( SY-TCODE EQ 'ME22N' OR SY-TCODE EQ 'ME22' )
AND SY-UCOMM EQ 'MESAVE' OR SY-UCOMM EQ 'MECHECKDOC'.
*Import/Export the origninal values.
*Check if the limit is passed .
CLEAR W_RESET .
IF I_CEKKO-GNETW NE WA_CEKKO-GNETW . '只要金额发生变化,则设置变化标识
W_RESET = 'X' .
ENDIF.
*IF limit passed - reset the value to high limit beyond tolerance.
IF W_RESET = 'X'.
CLEAR EXCH_RATE .
CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' '获取汇率
EXPORTING
RATE_TYPE = 'M'
FROM_CURR = 'USD'
TO_CURRNCY = 'RMB'
DATE = SY-DATUM
IMPORTING
EXCH_RATE = EXCH_RATE
* RETURN =
.
CLEAR V_VALUE .
IF WA_CEKKO-WAERS = 'USD'. '设置审批策略临界值(超过临界值系统的审批策略不一样)
IF EXCH_RATE-EXCH_RATE NE 0 .
V_VALUE = 500000 / EXCH_RATE-EXCH_RATE .
ELSE .
V_VALUE = 0 .
ENDIF .
ELSE .
V_VALUE = 500000 .
ENDIF .
IF I_CEKKO-GNETW GE 0 AND I_CEKKO-GNETW LT V_VALUE . ' 根据不同的审批策略,有不同的变化量,小于临界值时,只要判断金额小于临界值一点点就一定可以出发重新审批策略
E_CEKKO-GNETW = V_VALUE - 1.
ELSEIF WA_CEKKO-GNETW GE V_VALUE . ' 大于50万
* E_CEKKO-GNETW = V_VALUE + 100000 .
E_CEKKO-GNETW = E_CEKKO-GNETW * '2' + 100000. ' 如果订单金额比较大,需要较大的差异才能满足策略变化的变化量
ENDIF .
ENDIF .
ENDIF .
ENDIF .
* when ''.
WHEN OTHERS.
ENDCASE.