用友网络科技股份有限公司验证公式之档案级次校验-费用报销单控制费用承担部门只能添加一级部门文档作者:王珑悦建立日期:202207071引言新增费用报销单,需要在添加费用承担部门时要求必须使用一级部门,如果使用二级部门,则不允许保存。2应用场景和问题描述一级编码是两位数,我们只能通过设置验证公式,判定部门编码的长度是否为2位,如果表头录入的部门编码不是两位数,则系统可以弹出提示信息或者不给保存,目的是控制只能选择一级部门,那么如何实现编码不为2位数,就报错呢?3解决方案3.1总结(1)验证公式和iff条件公式结合使用,公式为:$Error->iif(length(head.fydeptid_v)!=2,"费用承担部门需为1级部门","")(2)验证公式发现失败,查找原因:业务上需要验证费用承担部门的编码是不是两位数,现在取出的不是编码信息,而是主键信息,所以不生效。(3)需要一个转换公式getcolvalue,将主键信息转换为编码,所以需要将公式:$Error->iif(length(head.fydeptid_v)!=2,"费用承担部门需为1级部门","")重新修改公式为:$Error->iif(length(getcolvalue("org_dept_v","code","pk_vid",head.fydeptid_v))!=2,"费用承担部门需为1级部门","")3.2详细步骤3.2.1第一步想实现此功能,需要验证公式和iff条件公式结合使用。模板中费用承担部门字段是head.fydeptid_v,所以使用控制公式。解决方案:$Error->iif(length(head.fydeptid_v)!=2,"费用承担部门需为1级部门","")$Error->iif(a>b,"A","")是带有条件的控制公式,代表的含义是如果a>b满足条件报出错误,不能保存单据。length(st)代表求字符串st的长度。length(head.fydeptid_v)是取head.fydeptid_v值的长度。所以公式的意思就是取head.fydeptid_v的字符长度,如果不等于2就不允许保存。验证公式:验证失败!3.2.2第二步看公式写法没有问题,那么肯定是公式取数出现了问题。存在取数的公式只有一个length(head.fydeptid_v)。下面我们来验证取的数值对不对。在费用承担部门设置了编辑公式,自定义项7取费用承担部门的值。查看截图中自定义项7出现的数据是主键信息,所以没有生效。3.2.3第三步业务上需要验证编码是不是两位数,现在取出的是主键信息,怎么通过主键信息获得编码呢,需要一个转换公式getcolvalue。所以需要将公式:$Error->iif(length(head.fydeptid_v)!=2,"费用承担部门需为1级部门","")重新修改公式为:$Error->iif(length(getcolvalue("org_dept_v","code","pk_vid",head.fydeptid_v))!=2,"费用承担部门需为1级部门","")在这里使用了一个getcolvalue公式:getcolvalue("org_dept_v","code","pk_vid",head.fydeptid_v)org_dept_v代表组织_部门版本的数据库表;code代表部门的编码;pk_vid代表部门版本的主键;验证公式是否生效:验证成功!