如何在下推分单时按字段值范围分组合并原创
金蝶云社区-陈来珍
陈来珍
3人赞赏了该文章 1288次浏览 未经作者许可,禁止转载编辑于2022年04月14日 18:05:05

关键词:下推、分单合并、值范围、条件

一、需求背景

         采购申请单下推生成采购订单的时候,需要根据采购单价的值的范围下推生成多个单据,要求采购单价大于10000的采购分录行下推生成同一个采购订单的订单分录。

61.png

62.png

二、实现方案

         在苍穹的botp转换规则中的分单策略中,只能根据同一个字段的进行分单。也就是如下分单策略的分单依据字段中,添加了上游单据(本篇文章的采购申请单单)某个字段(例如单价)之后,只能根据这个字段的值是否相同进行分单,即分单依据字段值相同的分录会被下推成同一个下游单据(本篇文章的采购订单)的分录(订单分录)。

63.png

对于需求,有两种实现方案:

第一种方案:通过转换插件,自己实现业务拆单的逻辑,该方案相对比较复杂,不建议。https://club.kdcloud.com/article/253166127671170816

第二种方案:通过添加一个单价分组的预置字段(整型类型字段),在单据保存的时候,代码实现把采购单价在同一个范围的分录行,设置他的单价分组的值为一样,那么就可以利用我们已有的botp转换规则的分单策略进行实现。

下面是方案二的实现过程。

三、实现过程

1、预置分单时分组合并的依据字段和数据。

(1)添加预置字段-单价分组

64.png

(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);
    }
}

注册保存的操作插件

65.png

2、配置分单策略,设置分单依据字段为单价分组

66.png

四、实现效果

保存之后,单价分组中就会写入分组值,提交审核,下推

67.png

可以看到下推按照单价分组生成了两个采购订单

68.png69.png

五、开发环境版本

COSMICV4.0.010.0

六、参考资料

【开发平台】指导手册

学习成长中心


赞 3