NC单据模板公式使用

此文章出处于: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(,,"") 在保存时根据公式条件,给出提示信息,确认是否继续。Confirm->iif(nastnum>1000,"请购数量大于1000,是否保存?","")
方式二:使用控制公式:Message->iif(,,"") 在保存时根据公式条件,给出提示信息,不影响保存。 场景四:如果单据实收数量大于应收数量,不能保存。Error->iif(,,"")在保存时根据公式条件,进行报错处理,如果出错则保存失败。
Error->iif(nnum>nshouldnum,"实收大于应收,不能保存","") 场景五:采购发票表头金额显示为大写 getmlcvaluemorewithcond() 将传入的字符串或数字转换为大写金额 可定义自定义项名字为:大写金额,并定义显示公式: getchinesecurrency(ntotalorigmny ) 将整单价税合计转换为大写。 (四) 附:NC公式表 一、日期 1、日期比较:comparedate(, ,) compareDate(date1, date2, field)用于日期比较,返回两个日期指定时间域的差值, 可比较的时间域包括"Y"-比较年;"M"-比较月;"D"-比较日;"H"-比较小时;"m"-比较 分钟;"S"-比 较 秒 . 比 如 :compareDate("2005-12-27 23:12:10", toDateTime("2005-12-27 23: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-04 12:12:12", " 日期:yyyy-MM-dd HH:mm:ss") 将返回"日期:2006-07-04 12:12:12". 5、datetime() datetime()返回当前日期和时间 6、dayof() dayOf(date)求日期 date的天数 7、formataddress( ) 格式化地址,根据地址簿id 将地址格式化成语言格式中设置的样式 8、formatmararea( ) 格式化物料维度的显示名称,根据指标表id 和物料ids 9、formatsraccto( ) 格式化返利依据的显示名称,根据返利取数函数的编码,将返利取数函数的编码 转换成名称显示在返利依据上 10、loginbusidate() 得到当前登录业务时间,前后台均可用,如果是后台使用,可能会得不到 11、mon() month()求当前月 12、monof( ) month(date)得到指定日期内的月份 13、time() time()取得当前时间,格式是HH:mm:SS 14、todate( ) toDate(str)将字符串格式的时间 str 转换成UFDate对象 15、todatetime( ) toDateTime(str) 将 字 符 串 格式 的 时 间 str 转 换 成 UFDateTime 对 象, 比 如 toDateTime("2006-10-15 21: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) ) / 2 13、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(double num, int index) 对 num 保留index位小数(四舍五入) 26、sgn( ) sgn(num) 当数 num 大于0 时,返回 1,等于0 时,返回 0,小于0 时返回-1 27、sin( ) sin(x)返回给定角度 x的正弦值 28、sinh( ) sinh(z) = ( exp(z) - exp(-z) ) / 2 29、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(String st) 将 字符 串 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(String st, int start, int end) 求字符串st左边前第 start个字符至第 end 个字符 之间的字符串 11、pcacostdrivprop( ) 动因占比 12、right( , ) right(String st, int index) 求字符串st右边前 index个字符组成的字符串 13、rightstr( , , ) rightStr(st,len,defaultStr) 求字符串 st右边后 len 个字符组成的字符串,如果字符 串长度小于len,则用 defaultStr 补齐,比如 rightStr("abc",6,"@")将返回abc@@@. 14、startswith( , ) startsWith(String st, String start) 判断字符串 st是否以字符串start开头 15、todecimal( ) toDecimal(fraction):fraction = num1 / num2 :\n[num1 cannot be null; num2 cannot be null or zero] 16、tolowercase( ) toLowerCase(String st) 求字符串 st 的小写形式,比如 toLowerCase("Abc")返回 "abc". 17、tostring( ) toString(obj) 将对象obj 转换为本解析器可识别的字符串形式 18、touppercase( ) toUpperCase(String st) 求字符串 st的大写形式 19、trimzero() trimzero()剪除字符串或数字 str的末尾 0 值 四、数据库 1、ass( , ) ass(freevalueID,checktype)是关于会计平台中辅助核算的函数,从gl_freevalue表中 根据freevalueID及 checktype 返回checkvalue 2、cvn( , , , ) cvn(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其 返回的值将直接作为数字使用 3、cvs( , , , ) cvs(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段的值,其 返回的值将直接作为字符串使用 4、getcolnmv( , , , ) getColNmv(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段 的值,其返回的值将直接作为数字使用,其功能类似SQL语句:select fieldname from tablename where pkfield = pkvalue 从这条 SQL语句可以看出各个参数的含义. 5、getcolnmv2( , , , , , ) getColNmv2(tablename,fieldname,pkfield1,pkvalue1,pkfield2,pkvalue2)根据主键从 数据库查询特定字段的值,其返回的值将直接作为数字使用,其功能类似 SQL 语 句:select fieldname from tablename where pkfield1 = pkvalue1 and pkfield2 = pkvalue2. 从这 条SQL语句可以看出各个参数的含义. 6、getcolsvalue() fieldname1,fieldname2->getColsValue("tablename","fieldname1","fieldname2","pkfi eld",pkvalue)根据主键从数据库查询多个字段的值,左边待赋值的字段要用逗号分 割,注 意里面的字段,表名要用双引号扩起来。 7、getcolvalue( , , , ) getColValue(tablename,fieldname,pkfield,pkvalue)根据主键从数据库查询特定字段 的值,其功能类似 SQL 语句:select fieldname from tablename where pkfield = pkvalue 从 这条SQL语句可以看出各个参数的含义. 8、getcolvalue2( , , , , , ) getColValue2(tablename,fieldname,pkfield1,pkvalue1,pkfield2,pkvalue2)根据主键从 数据库查询特定字段的值,其功能类似 SQL 语句:select fieldname from tablename where pkfield1 = pkvalue1 and pkfield2 = 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...,whe reCondition) 五、财务 1、getmlcvaluemorewithcond() getChineseCurrency(Object)将传入的字符串或数字转换为大写金额 2、getenglishcurrency( , ) getEnglishCurrency(mark,number)将数字金额转为英文文本描述 3、setthmark( ) setThMark(String)将传入的字符串或数字转为金额后加入千分位标志,如果希望保 留数字后面的 0,则需要先将数字转为字符串,然后再用 setThMark()函数,比如 setThMark (toString(56510.000)). 4、tochinese( , , ) toChinese(Object number,int flag1,int flag2)将传入的字符串或数字转换为中文 六、常用 iif(condition, result1, result2) 根据condition 是否成立,返回值不同。当 condition=true,返回result1,否则返 回result2。 七、控制公式 1、Confirm->iif(,,"")
在保存时根据公式条件,给出提示信息,确认是否继续。
2、Editable->iif(,"Y","N") 3、Editable[itemkey]->iif(,"Y","N")
如果条件为真,表中字段可编辑
4、Enabled->iif(,"Y","N") 5、Enabled[itemkey]->iif(,"Y","N")
如果条件为真,激活表中字段
6、Error->iif(,,"") 在保存时根据公式条件,进行报错处理,如果出错则保存失败。可以起到业务检 查的作用。 7、ForeGround->iif(,"red","blue")
可根据条件值,将当前设置公式的字段颜色变换,起到醒目提示的作用。
8、ForeGround[itemkey]->iif(,"red","blue") 与上一公式的功能相同,唯一不同是指定了设置哪个字段的颜色。 9、Message->iif(,,"")
在保存时根据公式条件,给出提示信息,不影响保存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容