单据下推的时候提示,表达式计算出错/条件表达式结果转换失败!!!原创
9人赞赏了该文章
769次浏览
未经作者许可,禁止转载编辑于2023年11月24日 09:40:29
场景:单据下推的时候提示,表达式计算出错
错误信息如下:表达式计算出错/条件表达式结果转换失败
【原因】22年9月后,列表下推做了取数优化;
<1>单据界面使用的是当前加载的数据包做条件判断,数据包是完整的不会出现此问题;
<2>历史版本,列表下推时需要把整个单据都加载出来,每次点击都会加载,非常浪费数据库资源和服务器内存;
<3>修改之后,列表下推的选单条件策略计算,会根据条件中需要用到的字段进行解析,加载使用的字段
<4>表达式解析不支持复杂计算(如lambda),因此lambda中的字段没有读取,导致选单条件策略计算时报错
【处理方案】
由于python不支持复杂表达式的引用字段解析,建议后续使用单据体字段或者其他复杂表达式时做以下处理
<0>原表达式:举例说明
( FBillTypeID.FNumber == 'CGDD21_SYS' or FBillTypeID.FNumber == 'CGDD22_SYS' ) and ( len(filter(lambda x:x. FENTRYSELFP0263.FNumber <> '002',FPOOrderEntry))>0 ) ( name 'FPOOrderEntry' is not defined )
<1>修改后表达式:举例说明
FENTRYSELFP0263 !=null and FPOOrderEntry !=null ( FBillTypeID.FNumber == 'CGDD21_SYS' or FBillTypeID.FNumber == 'CGDD22_SYS' ) and ( len(filter(lambda x:x. FENTRYSELFP0263.FNumber <> '002',FPOOrderEntry))>0 ) ( name 'FPOOrderEntry' is not defined )
<2>逻辑说明:把复杂表达式的字段,单独写一个 field != null,用作引用解析
差异点:在原表达式前面新增(lambda条件相关字段)不等于null,用作引用解析
红线部分代表复杂表达式没有解析成功,因此需要增加 FMaterialId != null