如何在下推分单时按字段值范围分组合并原创
3人赞赏了该文章
1,397次浏览
编辑于2022年04月14日 18:05:05
关键词:下推、分单合并、值范围、条件
一、需求背景
采购申请单下推生成采购订单的时候,需要根据采购单价的值的范围下推生成多个单据,要求采购单价大于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)
推荐阅读