电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

子数据表格合并汇总

来源:金蝶云社区作者:金蝶2024-09-2314

子数据表格合并汇总

1. 案例介绍

    在打印差旅报销单时,我们希望依据“差旅项目名称”字段对子单据体数据进行合并汇总差旅项目名称相同的数据行合并为一行“报销金额”字段进行合并汇总“备注”字段合并结果为各行备注信息使用分号拼接后的文本

2. 适用版本

金蝶云苍穹 V4.0.0012及以上版本

3. 模板设计

3.1 模板配置

   添加数据表格绑定“行程信息”单据体字段,添加横向子数据表格绑定“差旅项目”子单据体字段

3.2 注册插件

    创建插件类MergeSubEntryPlugin并继承AbstractPrintPlugin打印插件基类。(基类全路径kd.bos.print.core.plugin.AbstractPrintPlugin),随后在打印模板中注册该插件。

4. 插件开发

Java

 

//代码块

public class MergeSubEntryPlugin extends AbstractPrintPlugin {


   //单据体(行程信息)

   private static final String ENTRY_ENTITY = "entryentity";


   //子单据体(费用项目)

   private static final String SUB_ENTRY_ENTITY = "subentryentity";


   //差旅项目

   private static final String EXPENSE_ITEM = "expenseitem.name";


   //报销金额

   private static final String TRIP_AMOUNT = "tripamount";


   //备注

   private static final String REMARK = "remark";


   //序号

   private static final String SEQ = "seq";


   @Override

   public void afterLoadData(AfterLoadDataEvent evt) {

       for (DataRowSet rowSet : evt.getDataRowSets()) {

           //获取单据体数据

           List<DataRowSet> entryRows = rowSet.getCollectionField(ENTRY_ENTITY).getValue();

           for (DataRowSet entryRow : entryRows) {

               List<DataRowSet> subEntryRows = entryRow.getCollectionField(SUB_ENTRY_ENTITY).getValue();

               //子单据体数据分组

               Map<String, List<DataRowSet>> groupMap = subEntryRows

                       .stream()

                       .filter(f -> f.getField(EXPENSE_ITEM) != null)

                       .collect(Collectors.groupingBy(m -> m.getField(EXPENSE_ITEM).getValue().toString()));

               List<DataRowSet> resultRows = new ArrayList<>(groupMap.size());

               groupMap.forEach((key, values) -> {

                   if (!CollectionUtils.isEmpty(values)) {

                       //报销金额累计求和

                       double sum = values.stream()

                               .filter(f -> f.getField(TRIP_AMOUNT) != null)

                               .mapToDouble(m -> ((DecimalField) m.getField(TRIP_AMOUNT)).getValue().longValue())

                               .sum();

                       //备注字段通过分号拼接

                       String remarks = values.stream()

                               .filter(f -> f.getField(REMARK) != null)

                               .map(m -> m.getField(REMARK).toString())

   

子数据表格合并汇总

1. 案例介绍 在打印差旅报销单时,我们希望依据“差旅项目名称”字段对子单据体数据进行合并汇总。差旅项目名称相同的数据行合并为一行...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信