打印模板中数据行排序与单据分录排序不一致问题
1 案例介绍
项目启动单据的供应商分录为例,供应商分录不是项目启动的分录,而是根据单据项目编号读取过来的另外一张表单的数据,打印的时候需要通过关联数据源进行打印。
打印结果:单据中分录顺序与打印模板中分录顺序不一致。
案例分析:
供应商分录的数据不是通过界面正常录入的,而是通过插件或者其他方式生成插入的。在打印标的供应商时与单据页面顺序显示不一致。因为关联数据源会关联出多张单,标准产品对多张单的排序是按照创建时间降序来的。这种场景现在只能增加插件对其进行重新排序,以下介绍打印时如何调整排序。
2 适用版本
金蝶云苍穹V4.0.012及以上
3 模板配置
1. 模板设计
为了打印项目启动单据的标的供应商的标的名称和供应商,根据表单的关联关系,打印模板中关联上标的供应商这张表单:
2. 注册插件
创建插件类PrintDsSamplePlugin,并继承AbstractPrintPlugin打印插件基类。(基类全路径kd.bos.print.core.plugin.AbstractPrintPlugin)
4 插件开发
在打印模板中需要在打印插件的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); } } } | |
5 效果预览
打印模板中数据行排序与单据分录排序不一致问题
本文2024-09-23 00:39:23发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140880.html