如何判断采购订单是否有下推-lambda表达式应用原创
金蝶云社区-刘凯SCM
刘凯SCM
12人赞赏了该文章 1,065次浏览 未经作者许可,禁止转载编辑于2022年03月28日 14:54:53

有些业务场景中需要判断采购订单是否有任何行下推,比如,如果采购订单已经下推,则不允许修改,如何判断?

可以通过lambda表达式判断,行累计收料数量大于0的行数大于0,则表示采购订单已经下推,

关于lambda表达式的说明如下:

例7:单据体字段 单据体中的字段,公式取到的是一个集合,不能直接跟常量进行比较。 需要lambda表达式,对单据体行,进行循环,逐行取基础资料字段值进行比较: len(filter(lambda x : (x.F_JD_Base.FProperty['Name'].ToString = '采购员'), FEntity)) > 0 

 说明: FEntity是单据体标识,公式中取到的是 BOSDynamicRow

 集合 x 代表单据体当前行,类型为BOSDynamicRow,允许直接使用"."取字段值 F_JD_Base.FProperty['Name'] 返回的是多语言文本对象,需要使用ToString()函数,转换成纯文本 

 例8:基础资料单据体属性值 如需对基础资料字段,单据体中属性进行比较,也需要使用lambda进行循环: len(filter(lambda x: ( x['Post']['Name'].ToString() = '璧山分公司总经理' ), FStaffId.PostEntity)) > 0 

 说明: FStaffId.PostEntity中,PostEntity 是基础资料单据体的Orm实体名 

FStaffId.PostEntity 返回值,是DynamicObject集合,需要通过x['PropName']的方式,取各属性值


此业务场景中的表达式如下处理呢

已变更中使用采购订单新变更单为例:

采购订单新变更单是通过修改变更按钮执行生成采购订单新变更单的,在此按钮的操作中新增校验规则,具体可以参考下图

Image_20220328144325.png

image.png

表达式:len(filter(lambda x : (x.FReceiveQty>0), FPOOrderEntry))  ==  0


具体结果:

image.png

赞 12