聚合字段实现汇总打印时拼接不同分录文本数据
需求说明:
发货通知单套打时,按物料编码分组打印,合计发货数量,不同分录行的不同出货仓位,打印时拼接到同一个单元格;
解决方案:
使用套打模板中的聚合字段功能,金蝶云星空2021年11月后版本支持此功能;
实现方法:
在套打数据界面右侧选择“数据源”→“发货通知”→“明细信息”,然后右击,选择“增加实体动态字段”,进入对应界面:
上图中:
分组字段标识:
自由指定,数据绑定到文本框或单元格时,动态字段取该标识;
分组表达式:
str(FMaterialID.FNumber)
按物料编码分组时指定物料编码;如果有多个分组字段,需要使用连接字符串的方式,连接多个字段;
聚合表达式:
" ".join(sorted(set(map(lambda x: x.F_UNW_Text_CW,ActiveObject)),key=lambda x:x))
上式中:
" ".join:用空格符连接队列中的不同行数据
sorted:将队列按key关键字指定的字段排序;如果队列元素是一个集合,可以用x[0]或x[1]的方式指定集合中的对应元素;
set:去掉队列中的重复元素;
map:获取数据队列
lambda:指定队列元数据的获取方法
ActiveObject:当前数据表;固定值;
key=lambda x:x:指定sorted方法的排序依据字段
参考链接:
https://vip.kingdee.com/article/312998466987182080
打印效果:
补充说明:
1、集合表达式目前无法直接获取仓位名称,所以使用了自定义文本字段F_UNW_Text_CW来记录仓位名称,以方便集合表达式调用;
以下方法均不能用于集合表达式:GETFLEXDETAILVALUE (FStockLocID ,"FF100001",2)、FStockLocID.ActiveObject['F100001']['Name'])、FlexFormat('FAuxPropId.FF100001','Name','')
2、动态字段
字段F_UNW_Text_CW是聚合字段表达式中需要用到的数据,但是套打模板里面没有直接打印该字段,所有需要通过动态字段标识来引用该字段;
如果不用动态字段,又不想打印被引用的字段,可以将该字段绑定到某一列表进行正常打印,然后将列宽设置为0,这样打印时就不会显示该字段了;
推荐阅读