打印模板中数据行排序与单据分录排序不一致问题

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

打印模板中数据行排序与单据分录排序不一致问题

案例介绍

项目启动单据的供应商分录为例,供应商分录不是项目启动的分录,而是根据单据项目编号读取过来的另外一张表单的数据,打印的时候需要通过关联数据源进行打印。

打印结果:单据中分录顺序与打印模板中分录顺序不一致。

案例分析

供应商分录的数据不是通过界面正常录入的,而是通过插件或者其他方式生成插入的。在打印标的供应商时与单据页面顺序显示不一致。因为关联数据源会关联出多张单,标准产品对多张单的排序是按照创建时间降序来的。这种场景现在只能增加插件对其进行重新排序,以下介绍打印时如何调整排序。

适用版本

金蝶云苍穹V4.0.012及以上

模板配置

1. 模板设计

为了打印项目启动单据的标的供应商的标的名称和供应商,根据表单的关联关系,打印模板中关联上标的供应商这张表单:

2. 注册插件

创建插件类PrintDsSamplePlugin,并继承AbstractPrintPlugin打印插件基类。(基类全路径kd.bos.print.core.plugin.AbstractPrintPlugin

插件开发

在打印模板中需要在打印插件的afterLoadData事件获取关联数据源数据包,遍历每条数据,针对分录进行重新排序。

Java


public class PrintDsSamplePlugin extends AbstractPrintPlugin {

 //关联数据源标识

 private static final String DSNAME = " src_itemsupplier";

 //关联数据源分录的标识

 private static final String ENTRYENTITY= "entryentity";

 @Override

 public void afterLoadData(AfterLoadDataEvent evt) {

          //获取关联数据源

         if(DSNAME.equals(evt.getDataSource().getDsName())){

           //获取关联数据源数据包

           List<DataRowSet> dataRowSets = evt.getDataRowSets();

           //遍历数据包中每条数据,获取分录数据,重新排序并设置回去

           for(DataRowSet drs:dataRowSets){

              //获取分录数据

              List<DataRowSet> entryentity=drs.getCollectionField(ENTRYENTITY).getValue();

              //对分录数据进行重新排序,可针对某个字段进行排序,这里的场景只需要反序即可

              Collections.reverse(entryentity);

              //将排序好的数据重新设置回去

              drs.put(ENTRYENTITY,new CollectionField(entryentity));

            }

           //将每条数据里面分录已经排序完的数据包重新设置回去

           evt.setDataRowSets(dataRowSets);

        }        

    }

}



效果预览




打印模板中数据行排序与单据分录排序不一致问题

1 案例介绍项目启动单据的供应商分录为例,供应商分录不是项目启动的分录,而是根据单据项目编号读取过来的另外一张表单的数据,打印的时候...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息