SAP软件MM模块项目实施中常用增强之一:采订单收货后不能修改价格

标签:
ficoliumengsap增强abap |
分类: 增强 |

业务需求:
在SAP项目实施中采购管理模块最常遇到业务需求之一:采购订单收货后不能在修改价格,如果要修改价格必须冲销收货或拆行(已收货的不能修改价格,未收货的数量通过插上一行项目来修改价格)。
需求的业务背景:
这业务需求一般是财务部门要求,为何财务部门要求这样的业务控制,主要有2个方面原因,第一个原因是如果收货后再对订单价格进行修改的话,会影响到一些与采购相关的财务对帐报表,因为这些报表是取采购订单当前实时价格进行对账的,第二个原因和公司财务的一些结算规则和要求相关,要理解这需要先了解下SAP定价策略和发票校验之间的关系,SAP的标准功能中采购定价可以按凭证日期定价也可以按收货日期定价,具体设置在采购信息记录中设置(如下图)。
如果按凭证日期定价,那么在用MIR7/MIRO做发票预制/正式发票时候,自动带出默认金额是按采购订单上的最新价格计算的,如果是收货日期定价,自动带出默认金额是按收货时计算的金额(具体见如下说明)。
1.按采购订单凭证日期定价
对这采购订单分2批次进行收货,第一次收货,数量250,采购净价18,然后将采购订单净价修改36,第二次收货,数量250,净价36 ,然后做发票校验。
2.按采购订单收货日期定价
对这采购订单分2批次进行收货,第一次收货,数量250,采购净价15,然后将采购订单净价修改30,第二次收货,数量250,净价30 ,然后做发票校验。
不同公司财务结算要求不同,在很多项目中财务会要求发票金额必须按收货金额结算,但采购部门定价的业务要求是按凭证日期定价,不能按收货日期定价。
基于以上两点业务要求的情况下,就无法通过配置实现既满足财务又满足采购的业务要求,这时候就需要通过增强来满足这业务需求。
解决上面业务需求的增强实施方案:针对上面业务需求,下面详细介绍通过实施二代增强方的式来满足这样业务需求的实施步骤。
增强名:MM06E005出口:EXIT_SAPMM06E_012
具体操作步骤如下




IF SY-TCODE <> 'ME22N' AND SY-TCODE <> 'ME22' AND SY-TCODE <> 'ME23N' AND SY-TCODE <> 'ME23'.
EXIT.
ENDIF.
DATA T_NETPR TYPE EKPO-NETPR.
DATA TT_SUM TYPE EKBE-BPMNG.
DATA T_SUM TYPE EKBE-BPMNG.
DATA T_SHKZG TYPE EKBE-SHKZG.
LOOP
AT TEKPO. SELECT SINGLE NETPR INTO T_NETPR FROM EKPO WHERE EBELN = TEKPO-EBELN
AND EBELP = TEKPO-EBELP.
IF TEKPO-NETPR <> T_NETPR.
SELECT BPMNG SHKZG INTO (T_SUM,T_SHKZG) FROM EKBE WHERE EBELN = TEKPO-EBELN
AND EBELP = TEKPO-EBELP
AND BEWTP = 'E'.
IF T_SHKZG = 'S'.
TT_SUM = TT_SUM + T_SUM.
ELSE.
TT_SUM = TT_SUM - T_SUM.
ENDIF. ENDSELECT.
IF TT_SUM <> 0.
MESSAGE E899(MM) WITH TEKPO-EBELN TEKPO-EBELP '由于已收货,不允许修改价格'.
ENDIF.
ENDIF. CLEAR T_NETPR.
CLEAR TT_SUM.
CLEAR T_SUM.
ENDLOOP.


上图采购订单已收货,上面增强激活后如果这时去修改采购订单价格,系统报错,不允许修改采购订单价格,提示不能更改价格。