1/7用友股份-LE支持服务业务本部产品方案--《单据模版字段的动态必输方案》建立日期:2013-08-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-CP-2013-05812/7文档控制创建记录适用范围审阅人日期审阅签字所属部门发布范围内部员工伙伴客户发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-08-01刘嘉亮产品支持部V1.0版本领域模块备注3/7目录单据模版字段的动态必输方案................................................................................4一、问题背景:........................................................................................................4二、需求描述:........................................................................................................4三、解决方案:........................................................................................................44/7单据模版字段的动态必输方案一、问题背景:有一些业务单据或业务场景,可能需要对某个字段做动态必输,即根据某种条件将字段确认为是否必输。单据模版上提供了字段必输的选项,但是一旦对模版勾选了必输,则所有使用这个模版的用户或者角色,无论做什么业务,都需要输入这个字段。无法做到某些业务场景必输,其他业务场景不必输。针对这种需求,可以通过模版公式变相实现动态必输,不必出补丁解决。下面以销售订单的一个实例来说明方案,其他单据上也可以做类似公式,实现同样的目的。二、需求描述:销售订单,如果选择了批次管理的存货,需要表体批次号字段必输,不维护批次号不允许保存。使用模版勾选批次号字段必输项的方法,会造成不是批次管理的存货不能保存单据的问题。三、解决方案:可以考虑通过模版的控制公式$Error函数来实现此需求。56通版产品需要打一个补丁,支持销售订单节点$Error函数可以控制不允许保存单据。5/71、打通版补丁NC_SCM_SO-NC5.6-Patch-20111230-203587916(可以查询NCZX问题号201112291053418155后面的补丁),解决销售订单验证公式中使用$Error函数,提示后仍然能够保存的bug。2、配置单据模版在存货编码字段的验证公式里维护公式:a->getColValue(bd_invmandoc,wholemanaflag,pk_invmandoc,cinventoryid);$Error->iif(a=="Y"&&zeroifnull(cbatchid)==0.00000000,"批次管理存货批次号必输!","")公式含义为:先判断一下存货是否是批次管理的,然后再判断一下批次号字段是否为空,当两个条件都满足时,给出报错提示,不允许保存单据;否则正常保存。公式中的zeroifnull(cbatchid)==0.00000000判断条件使用了zeroifnull函数,当函数括号中的变量内容为空时,返回0.00000000,否则返回其他值。使用这个条件可以知道cbatchid(批次号)字段是否有内容。配合$Error函数给出相应提示即可。6/73、单据效果没有维护批次号不允许保存,给出提示。打了补丁后,一旦给出提示是不允许保存的。维护了批次号可以保存7/7