原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
采购订单或销售订单等存在定价的单据, 在抬头或行项目重要字段修改后.
比如商品/地点/数量等修改后. 会触发重新获取定价.以确保获取准确的定价.
但是也有例外.
** 本文介绍了怎么让字段的修改触发重新定价 **
二
需求描述
并非所有的抬头或行项目字段的修改都会触发重新获取定价.
比如批次字段. 如果定价中启用了批次定价. 标准逻辑在批次修改后无法触发重新获取定价. 这样就会导致单据定价与实际定价不一致.
再比如, 行项目使用了增强字段档期, 不同档期的商品定价不一样. 标准逻辑在增强的档期字段修改后, 也无法触发重新获取定价.
三
解决方式一
对采购订单的重定价可以使用BADI 增强.
ME_DEFINE_CALCTYPE
在增强中判断特定字段的变化,修改ch_x_lf_calctype 的内容为'B'或'C' ,强制系统重新获取定价.
四
解决方式二
销售订单没有找到类似的增强点. 只能在 函数 PRICING 开头添加隐式增强实现
**PRICING 中添加增强对所有定价都有效.**
所以可以把所有单据的刷新定价的逻辑都放在这里.
如下图,实现了通过配置单据类型及重定价方式来实现该单据的任意字段修改是否触发重定价及重定价方式
五
方式二的补充
但是因为在函数PRICING 中没有单据的信息. 只有KOMK/KOMP的字段可以使用.
所以如果要执行特定字段内容变化的判断. 还需要通过其它增强把单据增强字段内容传递到KOMK/KOMP的增强字段中. 再读取单据的旧值与传入的值比较.
此类增强在不同的单据中实现方式不同.
**采购订单**
通过 BADI ME_PO_PRICING_CUST 实现
或SMOD 增强 LMEKO002实现
**销售订单**
通过 MV45AFZZ 中的FORM 实现.
FORM USEREXIT_PRICING_PREPARE_TKOMKFORM USEREXIT_PRICING_PREPARE_TKOMP**发票**
通过RV60AFZZ 中的FORM 实现
FORM USEREXIT_PRICING_PREPARE_TKOMKFORM USEREXIT_PRICING_PREPARE_TKOMP其它涉及定价的单据也有类似的增强点. 可以传递内容到KOMK/KOMP的增强字段中.
六
关于批量重新定价
有了上述增强, 批量重新定价可以用两种方式实现
1\. 事务代码 MASS 批量修改单据的特定增强字段,可以实现批量重定价.
2\. 通过开发程序调用BAPI函数修改单据的特定增强字段,可以实现批量重定价.
七
总结
标准定价都是通过函数PRICING 实现的.
重定价只需控制这个函数的传入参数 CALCULATION_TYPE 即可.
标准PO的重定价增强就是在调用函数PRICING 之前允许用户修改这个传入值实现的.
一般情况下, 使用 B 或 C 执行定价刷新.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**