一
前言
SAP的定价体系的大致设计思路
-
通过配置生成条件表
-
通过存取顺序关联条件表
-
通过定价方案把相关条件类型关联起来
-
条件类型按顺序读取条件表,找到为止
-
定价方案中允许通过备选计算类型增强条件的金额
-
备选计算类型最终确定条件的金额.
项目中对定价的增强一般在备选计算类型使用的例程中写相应的代码
本文主要介绍在定价值的例程中使用通用定价/加点率配置表获取定价或加点率
为了行文方便, 后文把定价/加点率统称加点率.
二
定价相关界面
-
图一是事务代码VOFM 进入定价值例程的路径
-
图二是定价值例程维护界面
-
图三是例程的代码内容示例(因为例程主程序没有设置固定点计算,带有小数的数字乘除会放大金额,最佳解决方法是调用固定点计算的函数,在函数中写增强代码.)
-
图四是定价方案中备选计算类型中应用定价值例程
-
图五是程序(/函数组)属性中的固定点计算, 这个标记会影响程序中小数的乘除结果.
图一
图二
图三
图四
图五
三
业务需求
业务人员可能对定价提示如下的需求.
-
基本需求
-
进阶需求
01
基本需求
比如用户可能会提如下定价需求: 在成本价的基础上加3个百分点作为销售订单的价格
这个需求相对简单, 通过标准配置就能实现:
-
定义加点率条件表(百分比条件).
-
定义加点率条件类型(可以理解为正向折扣)
-
定价方案中加入成本价与加点率条件类型 ,
-
定价方案中累计成本价金额与加点率金额作为销售金额
02
进阶需求
进(变)阶(态)需求
从最近10天的平均采购价与成本价(加税加3个点)中二者取其高,再加6个百分点.
这个定价需求几乎无法通过标准配置实现了. 只能考虑使用定价增强实现(使用定价值例程)
这个需求中的加点率的获取有多种方式
四
加点率获取的方式
-
代码中写死加点率: 弊端毋庸置疑,业务如果相调整加点率,必须找开发修改代码.
-
按业务需求定义配置表
-
使用通用加点率配置表
01
按业务需求定义配置表
一般情况下,业务需求不同,加点率的配置表也会不同
比如业务需要按地点设置加点率
可以定义一个配置表 地点作为主键 加点率作为属性. 在定价例程中读取该配置表,获取加点率
弊端:
如果业务需求在不同的定价中使用不同的维度定义加点率. 则需要为每个维度定义一个加点率配置表.
如果业务需求调整,从地点调整为地点+类目 .则需要调整配置表,同时调整代码.
03
使用通用加点率配置表
那么有没有可能设计一个通用配置表,一劳永逸的解决这个问题呢?
回答是肯定的.
五
通用加点率配置
通用加点率配置表的思路来源于灵活的业务加点率需求(业务需求不断的改变加点率逻辑),尝试通过一个配置表解决所有定价中获取加点率或定价的需求.
01
配置路径
配置路径如下图所示.配置帮助中详细解释了配置的注意点及配置实例,同时字段帮助中进一步解释了每个字段的用法.
02
配置表
ZTCOND_JDLID/ ZTCOND_JDLIDT 维护加点率ID/文本
ZTCOND_JDL 条件表通用加点率(在条件计算类中获取加点率使用)
03
字段介绍
JDLID
加点率ID:用于识别加点率的使用场景
TABNAME
表名(限制条件字段来源表). 目前支持来自条件中的常用结构KOMK/KOMP/XKOMV及常用主数据表 MARA/T001W/LFA1/KNA1
如果需要其它字段
-
可以扩展配置表范围
-
可以增强KOMP字段
FNAME
字段名(获取加点率限制的字段名)
FVALUE
字段值限制.
通过特定字段的值和配置的值限制是否匹配,确定该行是否通过.
支持四种值限制方式
1. 单值 示例 A
2. 多个单值: 多个单值通过逗号分隔 示例 A,B,C
3. 通配符: A*,B,CD*
解析成
解析成 SIGN = 'I' OPTION = 'EQ' LOW = 'A' HIGH = ''
SIGN = 'I' OPTION = 'CP' LOW = 'B*' HIGH = ''
SIGN = 'I' OPTION = 'CP' LOW = 'CD*' HIGH = ''
4. 复杂设置:
示例 I/EQ/A,I/CP/B*,E/BT/C/D
解析成 SIGN = 'I' OPTION = 'EQ' LOW = 'A' HIGH = ''
SIGN = 'I' OPTION = 'CP' LOW = 'B*' HIGH = ''
SIGN = 'E' OPTION = 'BT' LOW = 'C' HIGH = 'D'
JDLGP
限制条件分组
CONDJDL
加点率(%)
DATAB开始生效日期
维护条件的生效开始日期, 如果没有维护,视同为不限制
DATBI有效截至日期
维护条件的有效截至日期, 如果没有维护,视同为不限制日期
04
获取加点率的类
ZCL_COND
六
通用加点率使用
配置前最好查看一下配置帮助文档,及每个字段的帮助文档,了解一下配置的注意事项.
01
加点率ID
为一个业务场景定义一个加点率ID,可以把加点率ID理解成系统中的条件类型.
02
配置加点率
为加点率ID配置特定命中条件,值,有效日期.
命中条件由 表名/字段名/字段值限制构成, 字段值限制维护方式详见FVALUE 的帮助文档
注意事项:
-
同一个分组的加点率,有效日期最好维护成一致(优先使用第一行的加点率,每行的日期联合命中条件字段生效)
-
有层级的加点率获取通过分组编号的顺序实现,尽量给高优先级的条件组合定义小的分组编号
-
分组编号最好采用10或100进制. 以便后续插入高优先级命中条件
03
获取加点率
在代码中调用类获取加点率
传入加点率ID ,和定价例程中允许访问的工作区( KOMK,KOMP, XKOMV ). 即可获取加点率
DATA(lv_jdl) = zcl_cond=>get_jdl( iv_jdlid = 'J0002' is_komk = komk is_komp = komp is_xkomv = xkomv ).
七
总结
通用加点率配置尝试通过一个配置表实现所有的加点率/定价的获取逻辑.
局限于配置中允许的表
-
KOMK 定价通讯抬头
-
KOMP 定价通讯项目
-
XKOMV 定价通讯-条件记录
-
MARA 商品主数据
-
T001W 地点主数据
-
LFA1 供应商主数据
-
KNA1 客户主数据
可以使用这些表中的任意字段组合配置加点率的获取,一劳永逸的解决了加点率(/定价)的配置及获取逻辑.
这个配置表也可以作为一个通用条件表来使用. 但是考虑通用条件表可能会基于商品编码等属性维护,数据量较大, 还是应用标准方案创建特定条件表合理一些.
对于较低数据量的条件,可以使用这个配置表实现.
THE
END
网友评论