【亚伟-苍穹系列】之手工报表如何添加合计行原创
金蝶云社区-王亚伟
王亚伟
6人赞赏了该文章 2,249次浏览 未经作者许可,禁止转载编辑于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中查询出最终的结果集返回给前端;


添加前:

image.png

添加后:

image.png

主要示例代码:

      

 //按照客户、物料汇总 总发货数量、未发货数量 
 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;


详细代码示例参考附件

赞 6