nc 单据模板公式

单据模板公式使用
(一) 公式使用场景
用户使用产品时,往往对单据上的字段取值有各种不同的需求。为此单据模板提供
了模板公式功能,可以让实施顾问或者用户通过配置各种公式,并且不用修改代码,从
而满足用户的各种个性化需求。
(二) 单据模板三种公式
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(,,)Confirm−>iif(,,”“)在保存时根据公式条件,给出提示信息,确认是否继续。Confirm->iif(nastnum>1000,”请购数量大于1000,是否保存?”,”“)
方式二:使用控制公式:Message>iif(,,)Message−>iif(,,”“)在保存时根据公式条件,给出提示信息,不影响保存。场景四:如果单据实收数量大于应收数量,不能保存。Error->iif(,,”“)在保存时根据公式条件,进行报错处理,如果出错则保存失败。
Error>iif(nnum>nshouldnum,,)getmlcvaluemorewithcond()getchinesecurrency(ntotalorigmny)()NC1comparedate(,,)compareDate(date1,date2,field),,Y;M;D;H;m;S.:compareDate(2005122723:12:10,toDateTime(2005122723:12:08),S).comparedate(dbizdate,dinbounddate,m)2date()date()3dateadd(,,)dateAdd(date1,num,fieldchar)num,fieldcharY;M;D;H;m;S.dateAdd(23:13:23,1,H).4dateformat()dateFormat(date,pattern[,language]),date,Date,pattern,yyyy,MM,dd,HH,mm,ss.dateFormat(2006070412:12:12,:yyyyMMddHH:mm:ss):2006070412:12:12.5datetime()datetime()6dayof()dayOf(date)date7formataddress()簿id8formatmararea()idids9formatsraccto()10loginbusidate()使11mon()month()12monof()month(date)13time()time(),HH:mm:SS14todate()toDate(str)strUFDate15todatetime()toDateTime(str)strUFDateTime,toDateTime(2006101521:01:01).16totime()toTime(str)strUFTime17year()year()18yearof()yearof(date)date1abs()abs(num)num2acos()acos(x)x,0Pi3acosh()acosh(z)=log(z+sqrt(zz1))4add(,)add(num1,num2)5angle(,)Math.atan2(x.doubleValue(),y.doubleValue())6asin()asin(x)x,Pi/2Pi/27asinh()asinh(z)=log(z+sqrt(zz+1))8atan()atan(x)x,Pi/2Pi/29atanh()atanh(z)=1/2log((1+z)/(1z))10ceil()ceil()int11cos()cos(x)x12cosh()cosh(z)=(exp(z)+exp(z))/213div(,)div(num1,num2)14exp()exp(x)ex15flooring()flooring()int16getresult()17int()int()int18ln()ln(x)x19log()log(x)n20max(,)max(x,y)x,y21min(,)min(x,y)x,y22mod(,)23mul(,)mul(num1,num2)24rand()25round(,)round(doublenum,intindex)numindex()26sgn()sgn(num)num0,1,0,0,0127sin()sin(x)x28sinh()sinh(z)=(exp(z)exp(z))/229sqrt()sqrt(x)x30sub(,)sub(num1,num2)31sum()32tan()tan(x)x33tanh()sinh(z)/cosh(z)34tonumber()toNumber(Stringst)st,toNumber(45.0)45.0,.35zeroifnull()zeroifnull(var)var01charat(,)charat(st,index)stindex2endswith(,)endswith(st,end)stend3equalsignorecase(,)equalsIgnoreCase(st1,st2)st1st24indexof(,)indexOf(st1,st2)st1st2,lastIndexOf(HI,UAP2006,UAP,UAP)3.5isempty()isEmpty(),()(null)6lastindexof(,)lastIndexOf(st1,st2)st1st2,lastIndexOf(HI,UAP2006,UAP,UAP)11.7left(,)left(st,index)stindex8leftstr(,,)leftStr(st,len,defaultStr)stlenlendefaultStr,leftStr(abc,6,@)abc@@@.9length()length(st)st10mid(,,)mid(Stringst,intstart,intend)ststartend11pcacostdrivprop()12right(,)right(Stringst,intindex)stindex13rightstr(,,)rightStr(st,len,defaultStr)stlenlendefaultStr,rightStr(abc,6,@)abc@@@.14startswith(,)startsWith(Stringst,Stringstart)ststart15todecimal()toDecimal(fraction):fraction=num1/num2:\n[num1cannotbenull;num2cannotbenullorzero]16tolowercase()toLowerCase(Stringst)st,toLowerCase(Abc)abc.17tostring()toString(obj)obj18touppercase()toUpperCase(Stringst)st19trimzero()trimzero()str01ass(,)ass(freevalueID,checktype),glfreevaluefreevalueIDchecktypecheckvalue2cvn(,,,)cvn(tablename,fieldname,pkfield,pkvalue),使3cvs(,,,)cvs(tablename,fieldname,pkfield,pkvalue),使4getcolnmv(,,,)getColNmv(tablename,fieldname,pkfield,pkvalue),使,SQL:selectfieldnamefromtablenamewherepkfield=pkvalueSQL.5getcolnmv2(,,,,,)getColNmv2(tablename,fieldname,pkfield1,pkvalue1,pkfield2,pkvalue2),使,SQL:selectfieldnamefromtablenamewherepkfield1=pkvalue1andpkfield2=pkvalue2.SQL.6getcolsvalue()fieldname1,fieldname2>getColsValue(tablename,fieldname1,fieldname2,pkfield,pkvalue),,7getcolvalue(,,,)getColValue(tablename,fieldname,pkfield,pkvalue),SQL:selectfieldnamefromtablenamewherepkfield=pkvalueSQL.8getcolvalue2(,,,,,)getColValue2(tablename,fieldname,pkfield1,pkvalue1,pkfield2,pkvalue2),SQL:selectfieldnamefromtablenamewherepkfield1=pkvalue1andpkfield2=pkvalue2.SQL.9getcolvaluemore()getColValueMore(tablename,selectfield,field1,value1,field2,value2.)10getcolvaluemorewithcond()getColValueMoreWithCond(tablename,selectfield,field1,value1,field2,value2...,whereCondition)11getmlcvalue()getMLCValue(tablename,fieldname,pkfield,pkvalue)12getmlcvaluemorewithcond()getMLCValueMoreWithCond(tablename,selectfield,field1,value1,field2,value2,whereCondition)1getmlcvaluemorewithcond()getChineseCurrency(Object)2getenglishcurrency(,)getEnglishCurrency(mark,number)3setthmark()setThMark(String),0,,setThMark(),setThMark(toString(56510.000)).4tochinese(,,)toChinese(Objectnumber,intflag1,intflag2)iif(condition,result1,result2)conditioncondition=trueresult1result21Error−>iif(nnum>nshouldnum,”实收大于应收,不能保存”,”“)场景五:采购发票表头金额显示为大写getmlcvaluemorewithcond()将传入的字符串或数字转换为大写金额可定义自定义项名字为:大写金额,并定义显示公式:getchinesecurrency(ntotalorigmny)将整单价税合计转换为大写。(四)附:NC公式表一、日期1、日期比较:comparedate(,,)compareDate(date1,date2,field)用于日期比较,返回两个日期指定时间域的差值,可比较的时间域包括”Y”−比较年;”M”−比较月;”D”−比较日;”H”−比较小时;”m”−比较分钟;”S”−比较秒.比如:compareDate(“2005−12−2723:12:10”,toDateTime(“2005−12−2723:12:08”),“S”)将返回两个日期相差的秒数.例如:库存其他入库单入库日期与首次入库日期相差时间comparedate(dbizdate,dinbounddate,”m”)2、date()date()返回当前日期3、dateadd(,,)dateAdd(date1,num,fieldchar)返回在指定日期的年、月或者日上增加某个值num,可增加的时间域fieldchar包括”Y”−增加年;”M”−增加月;”D”−增加日;”H”−增加小时;”m”−增加分钟;”S”−增加秒.比如dateAdd(“23:13:23”,1,“H”)表示对前面的时间增加一小时.4、dateformat()dateFormat(date,pattern[,language])用于将时间格式化为期望的字符串,其中date可以是时间字符串,也可以是Date对象,pattern为格式化参数,yyyy表示年,MM表示月,dd表示天数,HH表示小时,mm表示分钟,ss表示秒.比如dateFormat(“2006−07−0412:12:12”,“日期:yyyy−MM−ddHH:mm:ss”)将返回”日期:2006−07−0412:12:12”.5、datetime()datetime()返回当前日期和时间6、dayof()dayOf(date)求日期date的天数7、formataddress()格式化地址,根据地址簿id将地址格式化成语言格式中设置的样式8、formatmararea()格式化物料维度的显示名称,根据指标表id和物料ids9、formatsraccto()格式化返利依据的显示名称,根据返利取数函数的编码,将返利取数函数的编码转换成名称显示在返利依据上10、loginbusidate()得到当前登录业务时间,前后台均可用,如果是后台使用,可能会得不到11、mon()month()求当前月12、monof()month(date)得到指定日期内的月份13、time()time()取得当前时间,格式是HH:mm:SS14、todate()toDate(str)将字符串格式的时间str转换成UFDate对象15、todatetime()toDateTime(str)将字符串格式的时间str转换成UFDateTime对象,比如toDateTime(“2006−10−1521:01:01”).16、totime()toTime(str)将字符串格式的时间str转换成UFTime对象17、year()year()求当前年18、yearof()yearof(date)求日期date的年二、数学1、abs()abs(num)求数num的绝对值2、acos()acos(x)返回一个弧度x的反余弦,弧度值在0到Pi之间3、acosh()acosh(z)=log(z+sqrt(z∗z−1))4、add(,)add(num1,num2)用于高精度加法运算5、angle(,)Math.atan2(x.doubleValue(),y.doubleValue())6、asin()asin(x)返回一个弧度x的反正弦,弧度值在−Pi/2到Pi/2之间7、asinh()asinh(z)=log(z+sqrt(z∗z+1))8、atan()atan(x)返回一个弧度x的反正切值,弧度值在−Pi/2到Pi/2之间9、atanh()atanh(z)=1/2∗log((1+z)/(1−z))10、ceil()ceil(数字或者字符串)将变量转换为int类型11、cos()cos(x)返回给定角度x的余弦值12、cosh()cosh(z)=(exp(z)+exp(−z))/213、div(,)div(num1,num2)用于高精度除法运算14、exp()exp(x)e的x次方15、flooring()flooring(数字或者字符串)将变量转换为int类型16、getresult()计算两个数的和17、int()int(数字或者字符串)将变量转换为int类型18、ln()ln(x)返回给定数值x的自然对数19、log()log(x)返回给定数n的以十为底的对数20、max(,)max(x,y)求数字x,y两者中的最大值21、min(,)min(x,y)求x,y两者中的最小值22、mod(,)求模运算23、mul(,)mul(num1,num2)用于高精度乘法运算24、rand()生成随机数25、round(,)round(doublenum,intindex)对num保留index位小数(四舍五入)26、sgn()sgn(num)当数num大于0时,返回1,等于0时,返回0,小于0时返回−127、sin()sin(x)返回给定角度x的正弦值28、sinh()sinh(z)=(exp(z)−exp(−z))/229、sqrt()sqrt(x)返回数值x的平方根30、sub(,)sub(num1,num2)用于高精度减法运算31、sum()计算两个数的和32、tan()tan(x)返回给定角度x的正切值33、tanh()sinh(z)/cosh(z)34、tonumber()toNumber(Stringst)将字符串st转换为本解析器可识别的数字,比如toNumber(“45.0”)将返回一个数字型45.0,经过转化后可参与各种数值计算.35、zeroifnull()zeroifnull(var)表示如果var为空将返回0三、字符串1、charat(,)charat(st,index)得到字符串st中第index个字符2、endswith(,)endswith(st,end)判断字符串st是否以字符串end结尾3、equalsignorecase(,)equalsIgnoreCase(st1,st2)判断忽略大小写字符串st1是否与字符串st2相等4、indexof(,)indexOf(st1,st2)判断字符串st1中第一个字符串st2所在的位置,比如lastIndexOf(“HI,UAP2006,UAP”,”UAP”)返回3.5、isempty()isEmpty(变量)用于判断变量是否为空,包括空串(“”)及空值(null)6、lastindexof(,)lastIndexOf(st1,st2)判断字符串st1中最后一个字符串st2所在的位置,比如lastIndexOf(“HI,UAP2006,UAP”,”UAP”)返回11.7、left(,)left(st,index)求字符串st左边前index个字符组成的字符串8、leftstr(,,)leftStr(st,len,defaultStr)求字符串st左边前len个字符组成的字符串,如果字符串长度小于len,则用defaultStr补齐,比如leftStr(“abc”,6,”@”)将返回abc@@@.9、length()length(st)求字符串st的长度10、mid(,,)mid(Stringst,intstart,intend)求字符串st左边前第start个字符至第end个字符之间的字符串11、pcacostdrivprop()动因占比12、right(,)right(Stringst,intindex)求字符串st右边前index个字符组成的字符串13、rightstr(,,)rightStr(st,len,defaultStr)求字符串st右边后len个字符组成的字符串,如果字符串长度小于len,则用defaultStr补齐,比如rightStr(“abc”,6,”@”)将返回abc@@@.14、startswith(,)startsWith(Stringst,Stringstart)判断字符串st是否以字符串start开头15、todecimal()toDecimal(fraction):fraction=num1/num2:\n[num1cannotbenull;num2cannotbenullorzero]16、tolowercase()toLowerCase(Stringst)求字符串st的小写形式,比如toLowerCase(“Abc”)返回“abc”.17、tostring()toString(obj)将对象obj转换为本解析器可识别的字符串形式18、touppercase()toUpperCase(Stringst)求字符串st的大写形式19、trimzero()trimzero()剪除字符串或数字str的末尾0值四、数据库1、ass(,)ass(freevalueID,checktype)是关于会计平台中辅助核算的函数,从glfreevalue表中根据freevalueID及checktype返回checkvalue2、cvn(,,,)cvn(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其返回的值将直接作为数字使用3、cvs(,,,)cvs(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其返回的值将直接作为字符串使用4、getcolnmv(,,,)getColNmv(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其返回的值将直接作为数字使用,其功能类似SQL语句:selectfieldnamefromtablenamewherepkfield=pkvalue从这条SQL语句可以看出各个参数的含义.5、getcolnmv2(,,,,,)getColNmv2(tablename,fieldname,pkfield1,pkvalue1,pkfield2,pkvalue2)根据主键从数据库查询特定字段的值,其返回的值将直接作为数字使用,其功能类似SQL语句:selectfieldnamefromtablenamewherepkfield1=pkvalue1andpkfield2=pkvalue2.从这条SQL语句可以看出各个参数的含义.6、getcolsvalue()fieldname1,fieldname2−>getColsValue(“tablename”,”fieldname1”,”fieldname2”,”pkfield”,pkvalue)根据主键从数据库查询多个字段的值,左边待赋值的字段要用逗号分割,注意里面的字段,表名要用双引号扩起来。7、getcolvalue(,,,)getColValue(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其功能类似SQL语句:selectfieldnamefromtablenamewherepkfield=pkvalue从这条SQL语句可以看出各个参数的含义.8、getcolvalue2(,,,,,)getColValue2(tablename,fieldname,pkfield1,pkvalue1,pkfield2,pkvalue2)根据主键从数据库查询特定字段的值,其功能类似SQL语句:selectfieldnamefromtablenamewherepkfield1=pkvalue1andpkfield2=pkvalue2.从这条SQL语句可以看出各个参数的含义.9、getcolvaluemore()getColValueMore(“tablename”,”selectfield”,”field1”,value1,”field2”,value2….)10、getcolvaluemorewithcond()getColValueMoreWithCond(“tablename”,”selectfield”,”field1”,value1,”field2”,value2...,”whereCondition”)11、getmlcvalue()getMLCValue(“tablename”,”fieldname”,”pkfield”,pkvalue)根据主键从数据库查询特定当前登录语种对应名称字段的值12、getmlcvaluemorewithcond()getMLCValueMoreWithCond(tablename,selectfield,field1,value1,field2,value2…,whereCondition)五、财务1、getmlcvaluemorewithcond()getChineseCurrency(Object)将传入的字符串或数字转换为大写金额2、getenglishcurrency(,)getEnglishCurrency(mark,number)将数字金额转为英文文本描述3、setthmark()setThMark(String)将传入的字符串或数字转为金额后加入千分位标志,如果希望保留数字后面的0,则需要先将数字转为字符串,然后再用setThMark()函数,比如setThMark(toString(56510.000)).4、tochinese(,,)toChinese(Objectnumber,intflag1,intflag2)将传入的字符串或数字转换为中文六、常用iif(condition,result1,result2)根据condition是否成立,返回值不同。当condition=true,返回result1,否则返回result2。七、控制公式1、Confirm->iif(,,”“)
在保存时根据公式条件,给出提示信息,确认是否继续。
2、Editable>iif(,Y,N)3Editable−>iif(,”Y”,”N”)3、Editable[itemkey]->iif(,”Y”,”N”)
如果条件为真,表中字段可编辑
4、Enabled>iif(,Y,N)5Enabled−>iif(,”Y”,”N”)5、Enabled[itemkey]->iif(,”Y”,”N”)
如果条件为真,激活表中字段
6、Error>iif(,,)7Error−>iif(,,”“)在保存时根据公式条件,进行报错处理,如果出错则保存失败。可以起到业务检查的作用。7、ForeGround->iif(,”red”,”blue”)
可根据条件值,将当前设置公式的字段颜色变换,起到醒目提示的作用。
8、ForeGround[itemkey]>iif(,red,blue)9ForeGround[itemkey]−>iif(,”red”,”blue”)与上一公式的功能相同,唯一不同是指定了设置哪个字段的颜色。9、Message->iif(,,”“)
在保存时根据公式条件,给出提示信息,不影响保存。








            </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值