首页 > SAP > ABAP > 触发单据重定价
2021
04-28

触发单据重定价

采购订单或销售订单等存在定价的单据,在抬头或行项目重要字段修改后.

比如商品/地点/数量等修改后. 会触发重新获取定价.以确保获取准确的定价.

但是也有例外. 

本文介绍了怎么让字段的修改触发重新定价

1.需求描述

并非所有的抬头或行项目字段的修改都会触发重新获取定价.

比如批次字段. 如果定价中启用了批次定价. 标准逻辑在批次修改后无法触发重新获取定价. 这样就会导致单据定价与实际定价不一致.

再比如, 行项目使用了增强字段档期, 不同档期的商品定价不一样. 标准逻辑在增强的档期字段修改后,  也无法触发重新获取定价.

2.解决方式一

对采购订单的重定价可以使用BADI 增强.

ME_DEFINE_CALCTYPE 

在增强中判断特定字段的变化,修改ch_x_lf_calctype 的内容为’B’或’C’ ,强制系统重新获取定价.

触发单据重定价 - 第1张  | 优通SAP

3.解决方式二

销售订单没有找到类似的增强点. 只能在 函数 PRICING 开头添加隐式增强实现

PRICING 中添加增强对所有定价都有效.

所以可以把所有单据的刷新定价的逻辑都放在这里.

如下图,实现了通过配置单据类型及重定价方式来实现该单据的任意字段修改是否触发重定价及重定价方式

触发单据重定价 - 第2张  | 优通SAP
触发单据重定价 - 第3张  | 优通SAP

4.方式二的补充

但是因为在函数PRICING 中没有单据的信息. 只有KOMK/KOMP的字段可以使用.

所以如果要执行特定字段内容变化的判断. 还需要通过其它增强把单据增强字段内容传递到KOMK/KOMP的增强字段中. 再读取单据的旧值与传入的值比较.

此类增强在不同的单据中实现方式不同.

采购订单 

通过 BADI ME_PO_PRICING_CUST 实现 

或SMOD 增强 LMEKO002实现

销售订单 

通过 MV45AFZZ 中的FORM 实现.

FORM USEREXIT_PRICING_PREPARE_TKOMK

FORM USEREXIT_PRICING_PREPARE_TKOMP

发票 

通过RV60AFZZ 中的FORM 实现

FORM USEREXIT_PRICING_PREPARE_TKOMK

FORM USEREXIT_PRICING_PREPARE_TKOMP

其它涉及定价的单据也有类似的增强点. 可以传递内容到KOMK/KOMP的增强字段中.

5.关于批量重新定价

有了上述增强, 批量重新定价可以用两种方式实现

1. 事务代码 MASS 批量修改单据的特定增强字段,可以实现批量重定价.

2. 通过开发程序调用BAPI函数修改单据的特定增强字段,可以实现批量重定价.

6.总结

标准定价都是通过函数PRICING 实现的.

重定价只需控制这个函数的传入参数 CALCULATION_TYPE 即可.

标准PO的重定价增强就是在调用函数PRICING 之前允许用户修改这个传入值实现的. 

一般情况下, 使用 B 或 C 执行定价刷新.

触发单据重定价 - 第4张  | 优通SAP

本文摘录入公众号:syjf1976_abap

触发单据重定价 - 第5张  | 优通SAP
最后编辑:
作者:yangsen
本站为个人博客网站,全由我个人维护,我从事SAP开发13年,其它ERP开发7年,基本都是零售行业。本站记录工作学习的过程, 有SAP相关询问专、兼职工作可随时联系我。 有网站相关的问题可直接在文章下方留言,或者联系我。 邮件:yan252@163.com给我。 QQ:415402519

留下一个回复

你的email不会被公开。