问题:现状
希望实现的效果
实体服务规则常见报错
常见错误1:
实体服务规则[发票号码取值]发生异常:
异常信息如下:[表达式计算出错: F_RDYY_Text = "+".join(map(lambda x:x.FRecInv.FIVNUMBER,FRecInvInfo)) ( BOSDynamicRow is not iterable )
BOSDynamicRow is not iterable
服务:[计算定义公式的值并填写到指定列] ] 前往金蝶云社区获取更多帮助
常见错误2:
解决方案
实体服务规则的配置位置:
单据体的实体服务规则,是一行一行计算的,汇总整个实体,需要写在实体父项上,如果是汇总单据体的话,对应的就是单据头
前置条件
FRecInv <> null AND FRecInvInfo <> null
实体服务规则公式配置
F_RDYY_Text = "+".join(map(lambda x:x.FRecInv.FIVNUMBER,filter(lambda x:x.FRecInv<>null,FRecInvInfo))
相关操作说明
拼接遍历
FCausa = '\n'.join(o for o in (set(map(lambda x:(format(x.FRemark)), FEntity))))
①FCausa :单据头事由字段的标识;②‘\n’:自动换行符;③.join:拼接;④ o for o in 固定写法;⑤ set:去重; ⑥map:映射;⑦lambda:遍历;⑧format:格式化字符串;⑨FRemark :单据体备注字段的标识;⑩ FEntity:费用报销单的明细单据体的标识
语句大意:先使用format函数对先对FRemark做格式化操作,得到纯文本。再使用lambda函数对FEntity单据体做遍历操作,再使用map函数,将格式化后的字符串从明细行映射挑选出来,组成一个新的集合;再使用set函数,对集合里的元素做去重操作,去重后按照原有的顺序组成新的集合。最后使用join函数对集合里面的元素,使用自动换行符'\n'做拼接操作,得到的字符串赋值给FCausa字段。
遍历语句注意事项
适用范围
1.支持单据头实体服务规则
2.支持表单服务策略与校验规则
3.不支持单据体实体服务规则
4.不支持字段值更新事件
推荐阅读