20
2024
03
19:02:28

金蝶云星空 遍历单据体,lambda函数的应用

常见场景:

  1. 校验规则里判断单据体中某一列至少包含一个数据。

  2. 单据头实体服务规则,计算单据体里物料编码为1.01.001的物料的采购数量,并赋值给单据头字段。





场景一:校验规则里,判断单据体的国家下拉列表中至少有一行是中国。

(1)在单据体中拖一个下拉列表,枚举类型绑定国家,可以看到中国的枚举项值是1

(2)在操作列表里选择保存,在校验规则里新增一条单据合法性校验

(3)配置如下:

ce6ea33a3c6d0dcee4157add56d612ed_010993337ed5d7fd4d37b35b50e2a998980d.png


len(filter(lambda x: x.F_TPQJ_Combo1<>"" and x.F_TPQJ_Combo1="1", F_TPQJ_Entity))>0

表达式分解介绍:

①lambda x: x.F_TPQJ_Combo1<>"" and x.F_TPQJ_Combo1="1", F_TPQJ_Entity,遍历单据体,取满足条件的值,不满足则为空。

②filter(①),在遍历出来的单据体数据中,过滤出来满足条件值为中国的数据,去掉了①的空值。

③len(②),计算出满足值为中国的数据的个数。





场景二:计算单据体里物料编码为1.01.001的物料的申请数量,并赋值给单据头字段。

1.采购申请单,在单据头加一个数量字段。

2.在单据头新增一条实体服务规则,前置条件虽然选不到单据体字段,但是可以手动输入,物料<>null and 申请数量<>0。规则内容,新增一条如下:



8e2ceb7995a5087e8bd6045cfa731951_010938a74b6cf8664536bdbe8262a3f72260.png

 F_TPQJ_Qty  =sum(map(lambda x:(x.FReqQty if (x.FMaterialId<>null and x.FMaterialId.FNumber == "1.01.001")else 0 ),FEntity))

表达式分解介绍:

①x.FReqQty if (x.FMaterialId<>null and x.FMaterialId.FNumber == "1.01.001")else 0,物料编码为1.01.001的时候,取申请数量,否则取0

②lambda x:①,FEntity,遍历单据体,取满足条件的数据,不满足的置为空

③map(②),将②映射成一个数量的集合

④sum(③),汇总求和。






推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/5498.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: