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

打印模板实现动态列的介绍(以差旅报销场景为例)

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

打印模板实现动态列的介绍(以差旅报销场景为例)

1. 案例介绍

    在打印差旅报销单时,因为“差旅项目名称”的数据是不确定的,根据出差行程不同差旅项目也不同,如飞机、住宿费市内交通费在内的费用项目我们希望“差旅项目名称”分录行的数据转为新的列,新增的列展示对应项目的报销金额,从而我们可以直观的看到各类差旅项目对应的报销金额

2. 适用版本

金蝶云苍穹 V5.0.002及以上版本

3. 模板配置

3.模板设计

    添加数据表格绑定“行程信息”单据体字段,“差旅项目名称”一列宽度设置为30mm且数据表格右边为新增列预留一定宽度

3.注册插件

    创建插件类Row2ColPlugin并继承AbstractPrintPlugin打印插件基类。(基类全路径kd.bos.print.core.plugin.AbstractPrintPlugin),随后在打印模板中注册该插件。

4. 插件开发

Java

 

public class Row2ColPlugin extends AbstractPrintPlugin {


   //需动态添加的列的标题

   private List<String> addCols = new ArrayList<>(10);


   //单据体(行程信息)

   private static final String ENTRY_ENTITY = "entryentity";


   //子单据体(费用项目)

   private static final String SUB_ENTRY_ENTITY = "subentryentity";


   //差旅项目名称

   private static final String EXPENSE_ITEM_NAME = "expenseitem.name";


   //报销金额

   private static final String TRIP_AMOUNT = "tripamount";


   //子单据体数据源标识

   private static final String DS_SUB_ENTRY = "er_tripreimbursebill2.subentryentity";


   //字段拼接符

   private static final String FIELD_JOIN_MARK = "_";


   //被转换的行所在列的列下标

   private static final int deleteColIndex = 3;


   //被转换的行所在列的宽度 300 = 30mm

   private static final int deletedColWidth = 300;



   @Override

   public void afterLoadData(AfterLoadDataEvent evt) {

       //获取子单据体记录

       List<DataRowSet> subRows = evt.getDataRowSets().stream()

               .flatMap(fMap -> fMap.getCollectionField(ENTRY_ENTITY).getValue().stream())

               .flatMap(fMap -> fMap.getCollectionField(SUB_ENTRY_ENTITY).getValue().stream())

               .collect(Collectors.toList());

       //获取需动态添加的列的标题

       addCols = subRows.stream()

               .map(m -> m.getField(EXPENSE_ITEM_NAME).getValue().toString())

               .distinct()

               .collect(Collectors.toList());

       for (DataRowSet subRow : subRows) {

           //为新加入的列添加字段绑定

           Field tripAmount = subRow.getField(TRIP_AMOUNT);

           for (String col : addCols) {

               if (col.equals(subRow.getField(EXPENSE_ITEM_NAME).getValue().toString())) {

                   subRow.put(EXPENSE_ITEM_NAME + FIELD_JOIN_MARK + col, tripAmount);

               } else {

         

打印模板实现动态列的介绍(以差旅报销场景为例)

1. 案例介绍 在打印差旅报销单时,因为“差旅项目名称”的数据是不确定的,根据出差行程不同差旅项目也不同,如飞机、住宿费和市内交通...
点击下载文档文档为doc格式

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

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