SAP工具箱 价格日期重定界

点击蓝字 关注我们

前言

价格日期定界是一个SAP中比较常见的概念: 对于一个已经存在的价格期间,导入一个新的价格期间,新价格期间对原有价格期间重新界定开始和结束日期.

本文主要介绍价格日期重定界的场景分析及封装类

重定界分析视频

无峰,公众号:ABAP 技巧与实战价格重定界分析

标准定价

通过以下方式可以呈现出标准逻辑的价格重定界的结果.

用销售的标准定价事务VK11创建两次价格

2022-02-27 -> 9999-12-31    10%

2023-02-27 -> 2024-02-27    15%

VK13展示定价的重定界结果.

如下图,原来的价格2022-02-27 -> 9999-12-31 10%折扣,添加期间 2023-02-27 -> 2024-02-27 15% 后 ,原有期间被分割成两段. 该物料变成三段定价

74adf22e3c7b65ba62e433f82c859685.png

变通处理

因为价格重定界的可能性很多. 在之前项目中总是回避整理价格重定界的逻辑.并采用标准价格条件,调用标准价格导入程序来实现重定界. 并从价格导入的结果集中获取重定界结果. 需要注意的是

看起来更规范的BAPI函数

BAPI_PRICES_CONDITIONS

并不会对价格日期重定界

RV_CONDITION_COPY 函数会重定界. 需要配合下面两个函数一起使用.

RV_CONDITION_SAVE

RV_CONDITION_RESET

最近项目中发现试图绕过重定界逻辑会产生一些新的麻烦.所以尝试分析并解决价格重定界逻辑的细节问题.

TIPS

SPRING

一个较好的办法是把这三个函数的调用封装到一个新的函数中.

ZBAPI_RV_CONDITION_COPY

58e782ae595629cd8d48f6b02c1744bb.png

定界分析

定界的可能场景比较多.为了穷尽所有的可能性. 引入如下概念

  • 固定期间: 表示不可拆分的期间(导入的期间) GD

  • 非固定期间:表示可拆分的期间(系统中原有的期间)FGD

同时列举出这两个期间根据期间长度的比较的三种可能性

  • 固定期间>非固定期间

  • 固定期间=非固定期间

  • 固定期间<非固定期间

下图给出了两个期间的比较及可能的特殊期间,其中#表示一天

ad089eabf1cc2ac6203856a2c35ab48d.png

01

追赶模型

设想两个期间为两个长节虫,每个骨节代表一天. 开始日期是长节虫尾,结束日期是长节虫头

两个期间的所有可能性就是其中一只长节虫追赶另外一只的所有过程节点(这两个过程中前三个和最后三个表述一致)

长虫追赶短虫(等长也适用)的过程

  • 结束落后开始

  • 结束追平开始

  • 结束追过开始

  • 结束追平结束

  • 结束追过结束

  • 开始追平开始

  • 开始超过开始

  • 开始超平结束

  • 开始超过结束

短虫追赶长虫的过程

  • 结束落后开始

  • 结束追平开始

  • 结束追过开始

  • 开始追平开始

  • 开始追过开始

  • 结束追平结束

  • 结束超过结束

  • 开始追平结束

  • 开始超过结束

02

追赶模型总结图 

总图给出了追赶模型中的所有可能情况,特例,逻辑表达式,重定界处理方式.

根据下图所以,所有可能的基础测试场景 = 3(期间比较) * 9(追赶过程) * 4(常规及特殊期间)

共计108个基础场景. 刚好够梁山好汉们人手一份.

474fa47df6622f577de2d7c048900162.png

定界模型封装

为了尽可能的简化对该模型的调用, 把定界逻辑封装在类ZCL_PRICE_DATE_PROC中

对外开放两个可调用的静态方法

  • CHECK_DATE_OVER 检查价格日期重叠

  • SPLIT_DATE                 价格日期重定界

调用时传递内表并指定价格相关的字段名即可

  • 识别为关键字的字段,通过逗号分割(不含日期字段)

  • 识别为日期的字段: 从

  • 识别为日期的字段: 到

  • 识别条目为固定期间的字段名

  • 识别条目为固定期间的字段值

调用价格重叠检查

cb5d7ad204c5b2d5afd53e9cf6d28e91.png

价格期间重叠检查结果

b0c9ac187694e6ee3ac034b05a9d5bec.png

调用价格日期重定界

7a43712b2d109368af6a85f0750fa402.png

重定界结果

50601c77538a65b5f1e7e27f11f8669a.png

总结

价格重定界在项目中经常出现,一般情况下通过标准定价的导入即可解决. 但特定的项目中可能没有启用标准定价的条件类型.在自定义表中增加了期间范围,此时就必须考虑使用重定界逻辑来完整此类自定义表的数据维护. 以前尝试过把期间重叠检查整合在SE16N的数据维护中.

详见链接

无峰,公众号:ABAP 技巧与实战SAP小技巧之 改造SE16N(五)

但当时仅梳理了期间不重叠的可能性.对期间重叠的可能性没有细分.

这次尝试归纳总结所有的可能性,其中难免疏漏, 欢迎指正.

封装的类调用非常简单,无需特殊的数据加工.仅需要把原有的期间及新期间整合在一个表中,通过特殊字段区分新期间. 同时把这些信息传递给类方法即可.

对重定界的数据回写到自定义表时, 需要按不含日期的关键字删除记录后,再整体写入.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值