本文描述了在苍穹系统中,采购申请单根据采购单价范围下推生成多个采购订单的需求及实现方案。需求为单价大于10000的采购分录下推至同一采购订单。实现方案通过添加一个单价分组预置字段,在单据保存时根据单价设置分组值,利用现有分单策略实现分单。实现过程中,通过代码插件设置单价分组值,并配置分单策略依据该字段进行分单。最终,根据单价分组值生成不同的采购订单。
关键词:下推、分单合并、值范围、条件
一、需求背景
采购申请单下推生成采购订单的时候,需要根据采购单价的值的范围下推生成多个单据,要求采购单价大于10000的采购分录行下推生成同一个采购订单的订单分录。
二、实现方案
在苍穹的botp转换规则中的分单策略中,只能根据同一个字段的进行分单。也就是如下分单策略的分单依据字段中,添加了上游单据(本篇文章的采购申请单单)某个字段(例如单价)之后,只能根据这个字段的值是否相同进行分单,即分单依据字段值相同的分录会被下推成同一个下游单据(本篇文章的采购订单)的分录(订单分录)。
对于需求,有两种实现方案:
第一种方案:通过转换插件,自己实现业务拆单的逻辑,该方案相对比较复杂,不建议。https://club.kdcloud.com/article/253166127671170816
第二种方案:通过添加一个单价分组的预置字段(整型类型字段),在单据保存的时候,代码实现把采购单价在同一个范围的分录行,设置他的单价分组的值为一样,那么就可以利用我们已有的botp转换规则的分单策略进行实现。
下面是方案二的实现过程。
三、实现过程
1、预置分单时分组合并的依据字段和数据。
(1)添加预置字段-单价分组
(2)预置数据。
保存时,单据操作插件把采购单价小于10000的分录行,设置该行的单价分组值为0;采购单价大于10000的分录行,设置该行的单价分组值为1;
public class ReqBillDemoOpPlugIn extends AbstractOperationServicePlugIn { @Override public void beginOperationTransaction(BeginOperationTransactionArgs e) { DynamicObject[] dataEntities2 = e.getDataEntities(); for (DynamicObject dynamicObject : dataEntities2) { DynamicObjectCollection col = dynamicObject.getDynamicObjectCollection("sunp_reqentryentity"); //遍历单据体设置单价分组值 for (DynamicObject entry : col) { BigDecimal price = entry.getBigDecimal("sunp_pricefield"); BigDecimal tempPrice = new BigDecimal(10000); if (price.compareTo(tempPrice) == 1) { //大于10000的单价,设置单价分组值为1 entry.set("sunp_pricegroup", 1); } else { //小于10000的单价,设置单价分组值为0 entry.set("sunp_pricegroup", 0); } } } super.beginOperationTransaction(e); } }
注册保存的操作插件
2、配置分单策略,设置分单依据字段为单价分组
四、实现效果
保存之后,单价分组中就会写入分组值,提交审核,下推
可以看到下推按照单价分组生成了两个采购订单
五、开发环境版本
COSMICV4.0.010.0
六、参考资料
下推分单时按字段值范围分组合并.zip(6.50KB)
推荐阅读