此文章出处于:https://blog.csdn.net/kingrycn/article/details/56431828
单据模板公式使用
(一) 公式使用场景
用户使用产品时,往往对单据上的字段取值有各种不同的需求。为此单据模板提供
了模板公式功能,可以让实施顾问或者用户通过配置各种公式,并且不用修改代码,从
而满足用户的各种个性化需求。
(二) 单据模板三种公式
1、编辑公式
可实现单据编辑中字段自动带值的功能。只在编辑状态起作用,在某字段上设置好
编辑公式,当此字段编辑后,公式会被执行,并将结果填充到目的字段上。
例如:单据上编辑业务员,自动带入部门
2、显示公式
可实现单据显示时加载非持久信息的功能。只在非编辑状态起作用,例如查询后加
载或保存后刷新界面等,模板上的显示公式均会执行,运算结算会显示到相应字段上。
例如:采购入库单取采购订单的预计到货日期。
3、控制公式
可实现单据保存的检查功能。只在编辑状态起作用,一般在单据保存时执行所有字
段上的控制公式,根据公式类型的不同做不同的响应,可能弹出错误信息,也可能弹出
确认信息等。可以起到控制及提示作用,项目上应用广泛。
控制公式又分为:提示公式、检查公式、界面控制公式三种。
a、提示公式:如单据金额超过某一数值时,进行提示或弹出界面,用户以此判断
是否继续保存单据。
b、检查公式:例如:单据金额超过某一数值时,报出错误,不能保存单据。
c、界面控制公式:根据条件判断,单据上的字段颜色显示、或者能否编辑、或者
是否激活。
(三) 常用公式的应用场景
在产品中,开发人员一般情况下直接在后台通过 sql语句实现用户所需功能。实际
上我们定义的公式在执行时也是转化为 sql语句,本质是一样的。
场景一:采购订单表体行中取来源请购单行的需求日期,客户需要
分析计划到货日期与需求日期的差距, 相差较大的话需要对供应商催
货或者提醒下游用料单位做好材料短缺准备。
实现此功能,可使用三个表体自定义项,分别起名为:需求日期、相差天数、是否
严重延迟。
a、需求日期显字段示公式定义为:
getcolvalue(po_praybill_b ,dreqdate ,pk_praybill_b ,csourcebid )
意思是:从请购单表体(po_praybill_b)中取需求日期(dreqdate)的值,条件是
请购单表体行 ID(pk_praybill_b)等于采购订单的表体字段来源单据明细值(csourcebid) 。
类似于 sql语句:select dreqdate from po_praybill_b where pk_praybill_b= csourcebid
b、相差天数定义显示公式为:
comparedate(dplanarrvdate ,vbdef1 ,"D" )
意思是:比较采购订单表体计划到货日期(dplanarrvdate)与自定义项一(需求日
期)的差值,用天数(D)来体现。
c、在是否严重延迟定义显示公式为:iif(vbdef2>5,"是","否")
意思是:如果自定义项二的值大于 5,则为:是,否则为:否
场景二:单据中编辑业务员,给部门字段带出人员的任职部
门。
此时可以在人员字段中定义编辑公式:
rowcount->getrowcount("bd_psnjob","pk_psndoc",cemployeeid,"pk_org",pk_org);
pk_dept->iif(rowcount==1,getcolvalue2(bd_psnjob,pk_dept,pk_psndoc,cemployeeid,pk
_org,pk_org),pk_dept);
pk_dept_v->iif(rowcount==1,getcolvalue(org_dept ,pk_vid , pk_dept ,
pk_dept),pk_dept_v);
场景三:如果请购单的请购数量超过 1000,给出用户提示,
让用户自己判断是否保存。
方式一:使用控制公式:Confirm->iif(nastnum>1000,"请购数量大于1000,是否保存?","")
方式二:使用控制公式:Error->iif(,,"")在保存时根据公式条件,进行报错处理,如果出错则保存失败。
Confirm->iif(,,"")
在保存时根据公式条件,给出提示信息,确认是否继续。
2、Editable[itemkey]->iif(,"Y","N")
如果条件为真,表中字段可编辑
4、Enabled[itemkey]->iif(,"Y","N")
如果条件为真,激活表中字段
6、ForeGround->iif(,"red","blue")
可根据条件值,将当前设置公式的字段颜色变换,起到醒目提示的作用。
8、Message->iif(,,"")
在保存时根据公式条件,给出提示信息,不影响保存。