【亚伟-苍穹系列】之手工报表如何添加合计行原创
7人赞赏了该文章
2,377次浏览
编辑于2022年05月05日 15:05:34
需求描述:
用户需要一张【销售发货汇总表】,汇总销售发货的信息,并要求对于总发货数量、已发货数量和未发货数量增加合计行,方便数据查看;
实现方案:
小明按照需求开发了一张【销售发货汇总表】,数据源采用JAVA插件的方式实现,小明已经按照报表需求将数据查询出来,在处理合计行的时候发现系统不支持设置字段属性,于是小明采用代码处理的方式实现,大概实现思路如下:
1、分析那些字段需要做合计(本案例中总发货数量、未发货数量需要做合计,已发货数量由计算得出),“合计”字段放在报表的那个字段中(“合计”字段需要放在String类型的字段中);
2、从已查询出来的dataset中按照合计金额字段、“合计”字段,报表其他字段等字段顺序查询新的dataset出来;
3、从新的dataset中汇总需要增加合计行的字段,获得结果dataSetSum;
4、给dataSetSum添加“合计”字段和其他字段的空值列,获得新的结果ds;
5、将新的dataset与ds进行union获得结果dsFinally;
6、按照报表的字段顺序从dsFinally中查询出最终的结果集返回给前端;
添加前:
添加后:
主要示例代码:
//按照客户、物料汇总 总发货数量、未发货数量 billSelectDataSet = billSelectDataSet.copy().groupBy( new String [] {FIELDS[1],FIELDS[0],FIELDS[2],FIELDS[3],FIELDS[4],FIELDS[5],FIELDS[6]}).sum(FIELDS[7])//汇总 总发货数量 .sum(FIELDS[9])//汇总 未发货数量.finish(); logger.info("销售发货汇总表-分组汇总返回数据1: " + billSelectDataSet.toString()); billSelectDataSet.print(true); //将查询结果按照union的顺序查询出来 billSelectDataSet = billSelectDataSet.select(FIELDS[7],FIELDS[9],FIELDS[1],FIELDS[0],FIELDS[2],FIELDS[3],FIELDS[4],FIELDS[5],FIELDS[6]); logger.info("销售发货汇总表-分组汇总返回数据2: " + billSelectDataSet.toString()); billSelectDataSet.print(true); //将需要汇总的字段进行查询汇总,并添加【合计行】 DataSet dataSetSum = billSelectDataSet.groupBy(null).sum(FIELDS[7]).sum(FIELDS[9]).finish(); dataSetSum.print(true); DataSet ds = dataSetSum.addField("'合计'",FIELDS[1]);//‘合计’字段需要添加到字段类型为string的字段中 ds = ds.addNullField(FIELDS[0],FIELDS[2],FIELDS[3],FIELDS[4],FIELDS[5],FIELDS[6]);//将其他字段按照union的顺序添加到查询结果中 logger.info("销售发货汇总表-分组合计行数据: " + ds.toString()); ds.print(true); //将合计行结果与之前的查询结果union DataSet dsFinally = billSelectDataSet.union(ds); dsFinally = dsFinally.select(FIELDS[0],FIELDS[1],FIELDS[2],FIELDS[3],FIELDS[4],FIELDS[5],FIELDS[6],FIELDS[7],FIELDS[9]); logger.info("销售发货汇总表-分组汇总合计行返回数据: " + billSelectDataSet.toString()); dsFinally.print(true); return dsFinally;
详细代码示例参考附件
代码示例.rar(4.61KB)
赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
1人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读