用友网络科技股份有限公司页面模板-验证公式应用详解文档作者:王珑悦建立日期:202207071引言在热线问题中,时常有客户因填写单据出现错误而后期需要进行修改单据,所以希望在保存单据的时候让系统自动检查单据的填写是否有误;也有客户希望能够对填写的单据实现系统的自动校验,对金额或者字段的联动实施控制。单据模板提供了模板公式的功能,为满足用户的各种个性化需求,可以通过对字段配置各种公式,不用修改代码。单据模板公式分为编辑公式、显示公式、验证公式。为实现单据在保存时能够自动检查,可以通过设置验证公式。2应用场景和问题描述通过设置验证公式可以实现的单据效果:1)档案级次校验:填写单据时要求只能选择某个级次(比如一级)的档案。可以通过验证公式,校验选择项目的级次正确性。2)档案同一性校验:新增借款单时,需要确保借款人和收款人为同一人,如果不同,系统自动识别不通过。可以对收款人字段添加验证公式进行校验。3)必输项控制:录入资产卡片时,时常会忘记填写进项税金额。我们可以通过对资产增加模板中的购买价款字段设置验证公式,提醒用户输入进项税额。又或者是在填报费用报销单时,可以设置当收款对象类型的不同时,决定银行账户是否必输;还有费用报销根据发票类型决定进项税是否必须的,都是可以通过配置验证公式实现的。4)金额控制:控制报销单中报销的金额。可以给报销单模板中合计金额字段设置验证公式控制金额。3解决方案3.1档案级次校验客户需求:客户能够依据部门这一影响因素在生成凭证时顺利地取到对应的会计科目,在新增费用报销单的时候,添加费用承担部门时要求限定使用一级部门。经沟通了解,客户所有子公司添加的一级部门均为两位数的编码产品分析:系统的费用报销单标准模板没有对费用承担部门的级次做限定要求,但是可以通过对费用承担部门字段配置验证公式,实现部门级次的控制。解决方案:验证公式Error和iff条件公式结合使用,公式为:$Error->iif(length(getcolvalue("org_dept_v","code","pk_vid",head.fydeptid_v))!=2,"费用承担部门需为1级部门","")档案级次校验案例的延伸:1)部门编码级次不是两位怎么办?方案一:可以考虑在新增部门时控制编码长度。方案二:在模板设置节点处,对部门的编码设置验证公式,思考关键点:如果上级部门为空时,部门编码长度为2位数,如果不是,不允许添加。单据模板不是控制一级部门,而是要求填写末级部门也是设置验证公式吗?2)单据模板不是控制一级部门,而是要求填写末级部门也是设置验证公式吗?可以在模板设置中对需要控制的部门字段高级属性中进行类型设置,“将是否可以选择非叶子节”取消勾选。3)单据模板要求填写的部门是指定范围内的部门档案怎么办?方案一:可以考虑设置验证公式,如果部门不等于指定范围内的就提示错误;方案二:可以考虑设置数据权限,按照角色或者用户设置能够选择的部门档案。3.2档案同一性校验客户需求:客户一般在做借款单据时,需要确保借款和收款人为同一人,但是系统标准模板中并不会对此进行校验,借款人和收款人不同时,也能保存单据。产品分析:在做借款单据时,需要确保借款和收款人为同一人,但是系统标准模板中并不会对此进行校验,借款人和收款人不同时,也能保存单据。如何设置验证公式,保证借款人和收款人的统一呢?解决方案:在动态建模平台-客户化配置-模板设置(业务单元)中借款单据模板中找到“收支项目”字段,对“收支项目”的高级属性中添加效验公式:$Error->iif(head.jkbxr!=head.receiver,"收款人不等于借款人!","")档案同一性校验案例的延伸:1)如果档案1是A,那么要求档案2必须是B,如果不是B单据发出提示,让用户确认是否保存?对档案2设置验证公式:$Confirm->iif(档案1==“A”&&档案2<>”B”,”报错提示!”,“”)2)如果档案1是A,那么要求档案2必须不是B,如果是B,发出提示信息。对档案2设置验证公式:$Message->iif(档案1==“A”&&档案2==”B”,”报错提示!”,“”)3)如果档案1是A,那么要求档案2必须在B、C范围内怎么办,如果不是的话,发出报错提示不能保存。对档案2设置验证公式:$Error->iif(档案1==“A”&&(档案2<>“B”||档案2<>“C”),“报错提示!”,“”)3.3必输项控制客户需求:在日常业务中,费用报销人会提供获得的发票进行费用报销,发票是能够进行费用报销以及企业依法进行费用列支的重要依据。发票分为普通发票和增值税专用发票和专业发票。系统能否实现根据选择的发票类型,决定进项税是否输入。当发票类型选择的是“增值税普通发票”的时候,税额必须为空;当发票类型选择的是“增值税专用发票”的时候,税额必须不为空。产品分析:在系统预制的费用单模板中,没有对发票的类型作区分,但是实际业务中,费用报销人获得的发票类型不一样,能够税前列支的费用以及进项税能否税前抵扣都是有区分的。如何适应市场需求,满足单据能够根据发票类型的不一样,决定进项税是否输入,再根据进项税的金额,并以此生成正确的费用报销总账凭证。可以通过费用报销单单据模板的设置以及验证公式的设置,实现客户需求。解决方案:在用户定义属性设置中对报销单表体,将自定义项3定义为自定义项档案:发票类型,并将这个字段在卡片中显示出来。在单据模板自定义3放出来,并设置验证公式:$Error->iif(arap_bxbusitem.defitem3=="1001Z31000000000BOKR"&&arap_bxbusitem.tax_amount==0,"进项税不能为空",iif(arap_bxbusitem.defitem3=="1001Z31000000000BOKQ"&&arap_bxbusitem.tax_amount<>0,"进项税必须为空",""))必输项控制案例的延伸:1)如果档案1是A,要求档案2必输怎么办?对档案2设置验证公式:$Error->iif(档案1==“A”&&isempty(档案2),“报错提示!","")2)如果档案1是A,那么要求档案2必须为空怎么办?对档案2设置验证公式:$Error->iif(档案1==“A”&&length(档案2)==0,“”,“报错提示!”)3)单据模板中有的字段取出来是名称,有的取出来却是是主键,如何判定?Getcolvalue公式可以将主键转化为名称,又如何通过名称取主键值?可以通过使用一个编辑公式取出来数据判断是主键还是名称。取主键信息只需要在字段后加一个_ID,通过名称取主键值不建议写getcolvalue公式,因为getcolvalue公式连接条件必须保证唯一性,如果不唯一是取不出来数值的。3.3金额控制客户需求:客户因管理需要,想要控制部分用户提交的费用报销单金额不得大于2000元,如果大于2000,不能保存提交。产品分析:系统的报销单单据模板中,没有对费用报销的金额进行限制,但是可以通过对单据模板中的“合计金额”字段配置验证公式,实现报销金额的控制。解决方案:对费用单单据模板中的合计金额字段设置验证公式:$Error->iif(head.total>2000,"费用报销单超过2000需要参照申请单",""),费用报销单中报销金额大于2000,出现报错,不予保存。金额控制案例延伸:1)如果要求字段A的控制范围应该大于零并且小于2000,如何设置?对字段A设置验证公式:$Error->iif(A>2000,“A不得大于2000!","")$Error->iif(A<0,“A不得小于零","")也可对字段A设置:$Error->iif(A>2000||A<0,“A不得小于零或者大于2000!","")2)如果控制字段C的值,必须等于A*B?对档案2设置验证公式:$Error->iif(C<>A*B,“C必须等于A*B”,“”)3)如果控制字段C的值,必须等于A+B?对档案2设置验证公式:$Error->iif(C=A+B,“”,“C必须等于A+B”)4总结:验证公式的应用价值1)减少单据出错率,避免后续查错及纠错,缩减单据审核环节,提高流转效率。2)提高产品应用性,不用修改代码,便可让单据轻松满足客户的个性化需求。3)可实现单据保存的检查功能,结合Error、Message、Confirm、IIF、Length等函数配合使用,根据公式类型的不同做不同的响应,可能弹出错误信息,也可能弹出确认信息等。4)实现客户需求可以通过单据模板配置、数据权限、单据交叉校验规则等多种运用途径5注意事项5.1Confirm、Error、Message函数的区别Confirm函数是提示让用户确认是否保存;Error函数是不满足条件会报错严格控制不允许保存;Message函数是发出提示让用户看到提示信息,无是否确认的对话框给用户选择可以直接保存单据。5.2如需查看验证公式相关案例的详细步骤及介绍,可在IKM上搜索:1)验证公式之必输项控制功能案例专题;2)验证公式之档案级次校验功能-费用报销单控制费用承担部门只能添加一级部门方案;3)验证公式之档案同一性校验功能-借款单借款人与收款人校验配置;4)验证公式之金额控制功能-费用报销超过2000需要参照申请单控制实现方案。