二开案例.差旅费报销单打印
【场景】
差旅费报销单,有行程信息和对应的明细信息。打印的时候希望是可以按照行程信息以及对应的差旅费类型进行合计。
同一条行程只打印一次。
实现效果类似于:
【数据准备】
我们需要先了解下这个单据:
它的行程信息和明细并不是两个单据体,行程信息其实就是明细信息的字段,通过插件的方式汇总展示在行程信息的页签中,数据本身还是存储在明细信息中的。明细信息中有一个字段——关联行程(FTravelSeq),这个是区别明细属于哪一条行程的依据,也是我们套打实现按照行程信息分组的依据。
【模板设计】
首先我们需要搭建模板的雏形,通过数据表格绑定明细信息的方式,打印需要的字段。模板设计和效果如下图,可以看到是把明细信息所有行的数据都正常打印出来了。
我们要根据行程对这个数据进行合并。有两个方案。
方案一:使用汇总管理实现。按照关联行程字段汇总差旅费金额。
方案二:使用分组管理实现。按照关联行程字段进行分组,打印分组行。
方案二的适用场景更多(针对于既需要打印行程信息又需要打印明细信息的情况,只能用方案二实现),但是方案一更简单,可以根据实际场景选择方案实现。
【方案一】
①设置汇总管理。
②实现效果。
③聚合动态字段汇总不同差旅费类型的字段。
a、分组表达式为关联行程字段FTravelSeq
b、表达式实现过滤出差旅费类型为CLLX005的分录行,并汇总差旅费金额字段FTravelAmount的值。
sum(map(lambda x: x.FTravelAmount ,filter(lambda x: x.FTravelType != null and x.FTravelType.FNumber=='CLLX005', ActiveObject)))
c、套打模板都是按需取数的,模板里没有加入的字段是不会取数的。复杂表达式的话,模板没办法识别到对应字段,所有需要在动态字段里将聚合动态字段中用到的字段都取一下。
④数据行绑定聚合动态字段。
⑤设置单元格格式。
⑥实现效果。
【方案二】
①设置分组管理。
②设置数据行和其中的一个分组行不打印。
③设置聚合动态字段汇总不同的差旅费类型的字段。(与方案一中的聚合动态字段一样的设置方式。)
a、分组表达式为关联行程字段FTravelSeq
b、表达式实现过滤出差旅费类型为CLLX005的分录行,并汇总差旅费金额字段FTravelAmount的值。
sum(map(lambda x: x.FTravelAmount ,filter(lambda x: x.FTravelType != null and x.FTravelType.FNumber=='CLLX005', ActiveObject)))
c、套打模板都是按需取数的,模板里没有加入的字段是不会取数的。复杂表达式的话,模板没办法识别到对应字段,所有需要在动态字段里将聚合动态字段中用到的字段都取一下。
④分组行绑定动态字段。
⑤设置单元格格式化。
⑥设置差旅费金额分组小计。
⑦实现效果。
【进阶】
关于方案一和方案二,强调下前边的说到的:方案二的适用场景更多(针对于既需要打印行程信息又需要打印明细信息的情况,只能用方案二实现),但是方案一更简单,可以根据实际场景选择方案实现。
如果模板只有一个数据表格,那用哪个方案都可以。但是如果模板有两个或者更多的数据表格绑定的都是明细信息的话,上边的表格想汇总,下边的表格不想汇总,那么就只能用方案二实现了。因为平台对于同一批数据源做了汇总的话,就没办法再拆开了,做分组不一样,分组只是会排序,将数据排在一起,所以可以利用打印分组行的方式实现上边汇总、下边不汇总的效果。
使用方案二实现两个数据表格分别打印汇总值和明细值的效果如图。
模板设计:
实现效果:
二开案例.差旅费报销单打印
本文2024-09-23 04:12:20发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163800.html