如何在报表上展示多选基础资料数据?原创
金蝶云社区-吴锐雄
吴锐雄
3人赞赏了该文章 838次浏览 未经作者许可,禁止转载编辑于2023年07月18日 17:51:42

关键词:报表,多选基础资料,Algo,groupConcat


一、需求

在报表上展示多选基础资料,并且以特殊字符将每个多选基础资料分隔开。


二、思路与方案

在报表取数插件中,需要查询2次,1次是单据上的多选基础资料的id,另1次是查询多选基础资料数据。将2个DataSet用join进行连接,然后使用groupBy和groupConcat,对数据进行分组合并。


三、实现过程

1.准备数据源。

开发名为“建材1”的单据。

image.png

image.png


“地区”树形基础资料

image.png

image.png


2.开发报表

拖入几个字段,注册报表取数插件。

image.png


3.开发插件

import kd.bos.algo.DataSet;
import kd.bos.algo.GroupbyDataSet;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.servicehelper.QueryServiceHelper;

public class BM1ReportListDataPlugin extends AbstractReportListDataPlugin {


    @Override
    public DataSet query(ReportQueryParam queryParam, Object o) throws Throwable {
        // 查询建材
        DataSet bm1DataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "kdec_build_materials1",
                "number as kdec_billno, name as kdec_name, kdec_mul_pro.fbasedataid as kdec_mulproid, kdec_count, kdec_count2", null, null);
        // 查询地区
        DataSet regionDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "kdec_region_base",
                "id, name as kdec_mulpro", null, null);
        // join连接2个数据
        DataSet resultDataSet = bm1DataSet.join(regionDataSet).on("kdec_mulproid", "id")
                .select(new String[]{"kdec_billno", "kdec_name", "kdec_count", "kdec_count2"}, new String[]{"kdec_mulpro"}).finish();
        // 将建材名称分组,其余字段也加上
        GroupbyDataSet groupbyDataSet = resultDataSet.groupBy(new String[]{"kdec_billno","kdec_name","kdec_count","kdec_count2"});
        // 将产地名称做分组合并,然后以中文顿号隔开
        resultDataSet = groupbyDataSet.groupConcat("kdec_mulpro",null,"、").finish();

        return resultDataSet;
    }

}


四、效果图

image.png


五、开发环境版本

不限


六、参考资料

algo入门

algo高级接口




赞 3