单据体的基础资料去重汇总到表头字段Python试例原创
金蝶云社区-文安根
文安根
7人赞赏了该文章 505次浏览 未经作者许可,禁止转载编辑于2023年01月12日 15:47:41

    销售出库单其它页签中有个'物流单号'字段,它是多行文本类型的字段,默认是隐藏的,可从销售出库单列表中查看值。当物流跟踪页签输入了'物流公司'和'物流单号'后,保存时就会在表单插件的BeforeSave方法中汇总'物流跟踪'页签中的'物流单号'到表头的'物流单号'字段中(多行时按逗号分隔),如下图1-1和图1-2所示:

image.png

图1-1


image.png

图1-2


    上面的功能是通版的标准功能,主要是为了让客户能在销售出库单列表中既显示主单据体的物料数据,也能显示物流跟踪页签中的物流数据,BOS平台是不能同时在列表过滤框中勾选两个单据体来显示数据的,所以加了此汇总功能,但通版只包含'物流单号'字段的汇总功能,不含'物流公司'字段的汇总。如果想将销售出库单'物流跟踪'页签中的'物流公司'字段汇总到表头二开字段,该如何处理?本文将演示通过Python去重汇总'物流跟踪'页签中的'物流公司'字段到单据头上。首先在销售出库单上二开一个文本字段,用于保存物流公司名称,如下图2-1所示:

image.png

图2-1


    在销售出单基本信息中的实体服务规则集合中追加一个名为'物流公司不为空时去重汇总公司'的记录,前置条件和表达式分别如下图2-2和图2-3所示:

image.png

图2-2


image.png

图2-3


    图2-3中的表达式为:

F_ora_Text = ', '.join(list(map(str, set(map(lambda x : x.FLogComId, (filter(lambda x: x.FLogComId != null and x.FLogComId.Id != 0, FOutStockTrace)))))))

上面的Python表达式大致说明下:filter方法通过lambda表达式从物流跟踪页签中过滤物流公司不为空的记录,然后在map方法中通过lambda表达式选择(投影)物流公司字段,再通过set方法变成集合(集合会去重数据),再通过map方法(此map方法不依赖lambda表达式)将前面的集合中的每个元素应用str方法(即将物流公司变成字符串),再通过list方法转成list列表,最后通过 ', '.join方法将list列表按逗号分隔并拼接成字符串。上面操作保存后,只要在物流跟踪页签中追加了一行并输入了 物流公司,就会立即重新计算'物流公司汇总'字段,当单据保存后,就可以在单据或列表中查看更新后的值,如下图2-4和图2-5所示:

image.png 图2-4


image.png

图2-5

赞 7