单据模板公式使用

(一) 公式使用场景

用户使用产品时,往往对单据上的字段取值有各种不同的需求。为此单据模板提供

了模板公式功能,可以让实施顾问或者用户通过配置各种公式,并且不用修改代码,从

而满足用户的各种个性化需求。

(二) 单据模板三种公式

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(,,"")

在保存时根据公式条件,给出提示信息,不影响保存。

NC65单据模板公式使用的更多相关文章

  1. 计算器类(C++&JAVA——表达式转换、运算、模板公式)

    运行: (a+b)*c 后缀表达式:ab+c* 赋值: Enter the a : 10 Enter the b : 3 Enter the c : 5 结果为:65 代码是我从的逻辑判断系统改过来的 ...

  2. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  3. NC57,NC63-NC二开经验总结

    版主2010级市场营销专业本科生 2013年8月入达内培训Java相关技术 12月入职,做用友NC的二次开发工作 2015年4月离职,4中下旬入职一家互联网金融企业 下面是做NC二开期间积累的一些常用 ...

  4. NC6开发配置流程

    1.功能注册 2.菜单注册 3.单据类型管理 4.单据模板初始化 5.查询模板初始化 6.功能节点默认模板设置 7.编码对象注册.编码规则定义

  5. C#.NET 大型信息化系统集成快速开发平台 - 手机短信开发接口 4.0

    可以批量发信息给手机,相同的信息发给多个手机号码的效果图 已发送手机短信列表 可以批量发手机的功能,可以把先有的待发信息列表,直接通过批量发送功能发出 这个是设置发送模板公式的功能展示,可以设置发送的 ...

  6. NC保存报dirty解决方法

    在NC UI端测试保存的时候报  " The data whose initcode is 6033 is dirty! " 错误,其解决方式是 在IHrPf接口中添加你的单据模板编号 和 参数模板 ...

  7. 咏南CS多层插件式开发框架支持最新的DELPHI XE7

    DATASNAP中间件: 中间件已经在好几个实际项目中应用,长时间运行异常稳定,可无人值守: 可编译环境:DELPHI XE5~DELPHI XE7,无需变动代码: 支持传统TCP/IP方式也支持RE ...

  8. 12、ERP设计之 系统基础管理(BS)- 模块与菜单的关联

    ShareERP2013-10-03 模块:具有功能设计.权限绑定,链接用户菜单与系统的重要桥梁. 菜单:是用于显示与用户交互的重要入口,更是导航系统的舵手,所以它的设计直接影响到用户体验. 菜单可能 ...

  9. 用友U8.70安装说明

    用友U8.70安装说明 U8.70安装说明一.安装前注意事项:1.       在安装U870之前,我们推荐您确保当前计算机操作系统是“干净”的,即计算机在安装过操作系统和更新过必要的系统补丁后没有安 ...

  10. 10、ERP设计之系统基础管理(BS)- 平台化设计

    ShareERP 2013-09-03 ERP业务平台化是每个软件提供商必须要进行的趋势,传统定制化路线已死,不能走定制化的老路了.以往最大问的题是不能累积和沉淀技术及提升项目业务管理能力,其次是管理 ...

随机推荐

  1. 当开源项目 Issue 遇到了 DevChat

    目录 1. 概述 2. Bug 分析与复现 3. Bug 定位与修复 4. 代码测试 5. 文档更新 6. 提交 Commit 7. 总结 1. 概述 没错,又有人给 GoPool 项目提 issue ...

  2. JUC并发编程(1)—CompletableFuture详解

    @ 目录 CompletableFuture介绍 1.创建异步任务 2.CompletableFuture API ①. 获得结果和触发计算(get.getNow.join.complete) ②. ...

  3. fepk文件格式说明

    1  卫星影像金字塔分块原理说明 通常我们在工作中使用的卫星影像数据,轻则几百M,重则几百个G甚至上TB级.影像数据太大,是大家经常会遇到的一个问题,尤其是想下载一个省以上数据的时候该问题尤为突出.那 ...

  4. Qt信号槽与事件循环学习笔记

    事件与事件循环 信号槽机制 事件与事件循环 在Qt中,事件(event)被封装为QEvent类/子类对象,用来表示应用内部或外部发生的各种事情.事件可以被任何QObject子类的对象接收并处理. 根据 ...

  5. CDQ分治和三维偏序

    专题:CDQ 分治 本页面将完整介绍 CDQ 分治. 简介 CDQ 分治是一种思想而不是具体的算法,与动态规划类似.目前这个思想的拓展十分广泛,依原理与写法的不同,大致分为三类: 解决和点对有关的问题 ...

  6. 21.8 Python 使用BeautifulSoup库

    BeautifulSoup库用于从HTML或XML文件中提取数据.它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容.广泛 ...

  7. LooklessControl

    Lookless controls vs User Controls. Lookless controls usage patterns(LooklessControl与UserControl的比较. ...

  8. HTML5的重要内容-1

    HTML学习笔记-1 (一):first-child和:first-of-type :first-child第一个元素 :first-of-type第一个某种类型元素 (二):only-child和: ...

  9. 全网最详细4W字Flink全面解析与实践(下)

    本文已收录至GitHub,推荐阅读 Java随想录 微信公众号:Java随想录 原创不易,注重版权.转载请注明原作者和原文链接 承接上篇未完待续的话题,我们一起继续Flink的深入探讨 Flink S ...

  10. 完蛋!我被 Out of Memory 包围了!

    是极致魅惑.洒脱自由的Java heap space? 是知性柔情.温婉大气的GC overhead limit exceeded? 是纯真无邪.活泼可爱的Metaspace? 如果以上不是你的菜,那 ...