电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

通过套打模板打印列表数据

来源:金蝶云社区作者:金蝶2024-09-234

通过套打模板打印列表数据

1 场景介绍

套打模板一般用于对单据数据打印,但部分场景中用户希望列表的数据可以按自定义模板进行套打。 目前列表打印的功能是根据列表所见即所得的,无法自定义设计模板样式,本篇文档介绍如何利用打印二开插件,完成列表数据根据自定义模板进行套打。

模板设计

打印效果

2 适用版本

金蝶云苍穹 V5.0.01以上

3 解决方案

3.1 整体思路

    首先我们可以考虑通过自定义数据源来实现该业务场景,收集我们列表上需要打印的所有字段,按照单据字段标识,在自定义数据源下原封不动的添加这些字段,并通过插件给这些字段赋值,这样就能通过数据表格绑定自定义数据源,从而实现打印列表的数据。

3.2 关键步骤

  1. 创建打印模板,根据列表字段添加自定义数据源

    2. 创建打印插件,通过插件给自定义数据源赋值

package kd.bos.print.service;

/**
 * @description:
 * @author: Dech
 * @create: 2021-05-26 17:31
 **/
public class PrintDsSamplePlugin extends AbstractPrintSeniorPlugin {
    //记录主数据源
    private MainDataSource mainDataSource;
    //定义需要打印的查询字段
    private String queryFields = "billstatus,org.name,pxhe_supplier.name,pxhe_createdate,pxhe_paytype,billno,entryentity.pxhe_materiel.name,entryentity.pxhe_applyqty,entryentity.pxhe_price,entryentity.pxhe_amount,entryentity.pxhe_requiredate";

    /**
     * 数据访问器初始化事件
     * @param event
     */
    @Override
    public void beforeInitDataVisitor(DataVisitorEvent event) {
        //在初始化数据访问器中设置一个合理的查询大小。打印引擎默认500一批分批查询,如果分批后会把勾选的数据拆分,这样会导致数据没办法打印到一个表格。
        event.setMaxQuerySize(1000);
    }

    /**
     * 数据加载前方法
     * @param evt
     */
    @Override
    public void beforeLoadData(BeforeLoadDataEvent evt) {
        PrtDataSource dataSource = evt.getDataSource();
        if(!(dataSource instanceof MainDataSource)){
            return;//非主数据源,立即返回
        }
        //记录主数据源,用于自定义数据源查询时,获取需要的信息
        mainDataSource = (MainDataSource) dataSource;
        /**
         * 取消系统加载主数据源信息,并设置其查询结果为一个DataRowSet
         * 目的:引擎会根据主数据源结果集进行分页。一个DataRowSet就会对应至少一页,按列表打印时,不需要根据单据进行分页,只需要根据内容进行分页即可
         */
        evt.setCancleLoadData(true);//取消系统加载数据,
        List<DataRowSet> returnDataSet = new ArrayList<>(1);
        returnDataSet.add(new DataRowSet());
        evt.setDataRowSets(returnDataSet);
    }

    /**
     * 加载自定义数据源方法
     * @param evt
     */
    @Override
    public void loadCustomData(CustomDataLoadEvent evt) {
        //自己查询数据,获取打平的数据,符合列表展示效果
        DynamicObjectCollection collection = QueryServiceHelper.query(mainDataSource.getFormId(), queryFields, new QFilter[]{mainDataSource.getQFilter()});
        //将主数据源的信息,组装到自定义数据源中
        for(DynamicObject ds : collection){
            DataRowSet dataRowSet = new DataRowSet();
            String[] splits = queryFields.split("

通过套打模板打印列表数据

1 场景介绍套打模板一般用于对单据数据打印,但部分场景中用户希望列表的数据可以按自定义模板进行套打。 目前列表打印的功能是根据列表...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信