判断销售订单是否存在非系统定价的分录:
如下表达式用来判断是否存在非系统定价(销售价目表中没有对应单价的)的分录:
len(filter(lambda x: (x.FMaterialID !=null and x.FPriceUnitQty>0 and x.FSysPrice=0),FSaleOrderEntry)) > 0
上式中:
FSaleOrderEntry 为销售订单表体的标识
FMaterialID 为物料编码
FPriceUnitQty 为销售定价数量
FSysPrice 为系统定价(销售价目表价格自动写入)
Lambda 用来循环判断销售订单明细各字段是否符合条件
Filter 返回符合条件的值列表
Len 判断filter返回列表的值个数
流程判断条件界面如下:
如下表达式成立时,表示没有非系统定价的分录:
len(filter(lambda x: (x.FMaterialID !=null and x.FPriceUnitQty>0 and x.FSysPrice=0),FSaleOrderEntry)) = 0,以此作为审批流另一个分支的判断条件;
注意,所有的明细表字段判断条件,都必须写在lambda函数里面才能正确识别, 写成这样是不行的:FMaterialID !=null and len(filter(lambda x: (x.FPriceUnitQty>0 and x.FSysPrice=0),FSaleOrderEntry)) = 0
同上原理,可以实现如下流程判断:
判断销售订单是否存在没有bom的分录:
如下表达式,可以判断销售订单分录上BOM版本是否为空:
len(filter(lambda x: (x.FMaterialID !=null and x.FMaterialID.FErpClsID in ('2','3','9') and x.FBomID=null),FSaleOrderEntry)) > 0
上式中:
FErpClsID是字符型枚举字段,用来确定物料是否为自制、委外或配置属性
FBomID 是BOM版本字段,只能判空,不能判断是否为0
判断物料清单中子项BOM版本是否为空:
len(filter(lambda x: (x.FMATERIALIDCHILD !=null and x.FMATERIALIDCHILD.FErpClsID in ('2','3','9') and x.FBomID=null),FTreeEntity)) > 0
上式中:
FMATERIALIDCHILD是指物料清单子项物料
推荐阅读