如何在报表中按组织生成多个合计行原创
7人赞赏了该文章
1,620次浏览
编辑于2023年05月10日 09:17:49
关键词:报表,合计,组织
一、需求
二开库存报表,按组织进行分组,合计每一组的物料数量。
二、思路与方案
使用报表取数插件,自定义取数,查询出DataSet之后,用algo的groupBy、sum计算每个组织的数量,然后用union将合计的结果集与原DataSet进行合并,最后用groupBy进行第二次分组。
三、实现过程
1.创建报表
拖入一些字段
2.编写报表取数插件并注册
重新报表取数插件,取数方法
@Override public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable { // 查询“初始库存表”,查询4字段,分别是 组织名称,单据体的物料,单据体的期初数量,单据体的计量单位 DataSet dataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "im_initbill", "org.name as kdec_org_name, billentry.material as kdec_material, billentry.qty as kdec_qty, billentry.unit as kdec_unit" , null, null); // dataSet使用groupBy对组织名称进行分组, 生成一个GroupbyDataSet对象 GroupbyDataSet groupbyDataSet = dataSet.groupBy(new String[]{"kdec_org_name"}); // 合计期初数量,生成合计行 DataSet dataSetSum = groupbyDataSet.sum("kdec_qty").finish(); // 由于groupBy仅指定了一个“组织名称”字段,此时dataSetSum里面没有其他剩余2个,因此,还要添加2个Field dataSetSum = dataSetSum.addField("0L","kdec_material").addField("0L","kdec_unit"); // 修改合计行的值,拼接上'的合计' dataSetSum = dataSetSum.select("concat(kdec_org_name+'的合计') as kdec_org_name,kdec_material,kdec_qty,kdec_unit"); // 将原dataSet与合计之后的dataSet用union进行合并 DataSet dataSetUnion = dataSet.union(dataSetSum); // 再次使用groupBy对合并之后的数据进行分组 dataSetUnion = dataSetUnion.groupBy(new String[]{"kdec_org_name", "kdec_material", "kdec_qty","kdec_unit"}).finish(); return dataSetUnion; }
四、效果图
如图,按组织对数据进行了统计
五、开发环境版本
不限
六、参考资料
report_mult_sum.zip(8.29KB)
推荐阅读