苍穹-打印-套打/分组/合并原创
金蝶云社区-肖钞文
肖钞文
3人赞赏了该文章 1,345次浏览 未经作者许可,禁止转载编辑于2022年06月07日 22:26:59
  1. 首先弄打印 要先弄明白打印的数据源是自定义数据源还是已有的单据数据源

    因为,不同的数据源其结构是不同的。



  2. 单据数据源合并

private static final String CHANNEL = "entryreceivechannelid.name";
private static final String ENTRYENTITY = "itementry";
@Override
public void afterLoadData(AfterLoadDataEvent evt) {
    super.afterLoadData(evt);
    /*
     * 这里每一个DataRowSet对应每一张单据同时对应一页,
     * 分页是按照每一个DataRowSet进行分页。
     * 所以将渠道相同的DataRowSet进行合并为一个新的DataRowSet
     * ,即将当前DataRowSet单据体数据添加至已有DataRowSet单据体上,
     * 合并至一起
     *
     * */
    List<DataRowSet> dataRowSets = evt.getDataRowSets();
    List<DataRowSet> newDataRowSets = new ArrayList<>();
    Map<String,DataRowSet> temp = new HashMap<>();
    for (DataRowSet dataRow : dataRowSets) {
        //拿单据体
        List<DataRowSet> dataRowSetList = dataRow.getCollectionField(ENTRYENTITY).getValue();
        //拿我要合并的条件
        String key = (String) dataRowSetList.get(0).getField(CHANNEL).getValue();
        if(temp.containsKey(key)){//存在相同的,就将单据体加入到里面
            DataRowSet dataRowSetsHave =  temp.get(key);
            dataRowSetsHave.getCollectionField(ENTRYENTITY).addAll(dataRowSetList);
        }else{
            temp.put(key,dataRow);
        }
    }
    //最后将map转list
    for(Map.Entry entry:temp.entrySet()){
        newDataRowSets.add((DataRowSet) entry.getValue());
    }
    evt.setDataRowSets(newDataRowSets);
}

我这里是根据渠道合并,合并条件随意修改,只为给初学苍穹的伙伴一点参考


    3. 自定义报表数据源

    首先得知道  要打印报表的自定义数据源,报表是没有单据体的这个概念的这也是和前面单据数据源的区别所在,一行就是单纯的一行,你可以发现在打印模板设计器那里,自定义数据源的时候,你只能增加一些基础字段在数据源里面,而不能增加层级。所以这就要使用设计器自带的功能,分组打印。双击数据表格,然后在左键选中标题行然后右键显示浮窗可添加"插入分组行"。然后绑定分组行就好%YU{C(O4269)}~]IZEE}211.png

右上角有个按钮按分组分页打印,可以根据需求来,或者自己测。

目前就先写这么多,后续遇到什么再加上。hhh


赞 3