单据模板公式使用
(一) 公式使用场景
用户使用产品时,往往对单据上的字段取值有各种不同的需求。为此单据模板提供
了模板公式功能,可以让实施顾问或者用户通过配置各种公式,并且不用修改代码,从
而满足用户的各种个性化需求。
(二) 单据模板三种公式
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(,,”“)在保存时根据公式条件,给出提示信息,确认是否继续。
C
o
n
f
i
r
m
−
>
i
i
f
(
,
,
”
“
)
在
保
存
时
根
据
公
式
条
件
,
给
出
提
示
信
息
,
确
认
是
否
继
续
。
Confirm->iif(nastnum>1000,”请购数量大于1000,是否保存?”,”“)
方式二:使用控制公式:
Message−>iif(,,”“)在保存时根据公式条件,给出提示信息,不影响保存。场景四:如果单据实收数量大于应收数量,不能保存。
M
e
s
s
a
g
e
−
>
i
i
f
(
,
,
”
“
)
在
保
存
时
根
据
公
式
条
件
,
给
出
提
示
信
息
,
不
影
响
保
存
。
场
景
四
:
如
果
单
据
实
收
数
量
大
于
应
收
数
量
,
不
能
保
存
。
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−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、
E
r
r
o
r
−
>
i
i
f
(
n
n
u
m
>
n
s
h
o
u
l
d
n
u
m
,
”
实
收
大
于
应
收
,
不
能
保
存
”
,
”
“
)
场
景
五
:
采
购
发
票
表
头
金
额
显
示
为
大
写
g
e
t
m
l
c
v
a
l
u
e
m
o
r
e
w
i
t
h
c
o
n
d
(
)
将
传
入
的
字
符
串
或
数
字
转
换
为
大
写
金
额
可
定
义
自
定
义
项
名
字
为
:
大
写
金
额
,
并
定
义
显
示
公
式
:
g
e
t
c
h
i
n
e
s
e
c
u
r
r
e
n
c
y
(
n
t
o
t
a
l
o
r
i
g
m
n
y
)
将
整
单
价
税
合
计
转
换
为
大
写
。
(
四
)
附
:
N
C
公
式
表
一
、
日
期
1
、
日
期
比
较
:
c
o
m
p
a
r
e
d
a
t
e
(
,
,
)
c
o
m
p
a
r
e
D
a
t
e
(
d
a
t
e
1
,
d
a
t
e
2
,
f
i
e
l
d
)
用
于
日
期
比
较
,
返
回
两
个
日
期
指
定
时
间
域
的
差
值
,
可
比
较
的
时
间
域
包
括
”
Y
”
−
比
较
年
;
”
M
”
−
比
较
月
;
”
D
”
−
比
较
日
;
”
H
”
−
比
较
小
时
;
”
m
”
−
比
较
分
钟
;
”
S
”
−
比
较
秒
.
比
如
:
c
o
m
p
a
r
e
D
a
t
e
(
“
2005
−
12
−
27
23
:
12
:
10
”
,
t
o
D
a
t
e
T
i
m
e
(
“
2005
−
12
−
27
23
:
12
:
08
”
)
,
“
S
”
)
将
返
回
两
个
日
期
相
差
的
秒
数
.
例
如
:
库
存
其
他
入
库
单
入
库
日
期
与
首
次
入
库
日
期
相
差
时
间
c
o
m
p
a
r
e
d
a
t
e
(
d
b
i
z
d
a
t
e
,
d
i
n
b
o
u
n
d
d
a
t
e
,
”
m
”
)
2
、
d
a
t
e
(
)
d
a
t
e
(
)
返
回
当
前
日
期
3
、
d
a
t
e
a
d
d
(
,
,
)
d
a
t
e
A
d
d
(
d
a
t
e
1
,
n
u
m
,
f
i
e
l
d
c
h
a
r
)
返
回
在
指
定
日
期
的
年
、
月
或
者
日
上
增
加
某
个
值
n
u
m
,
可
增
加
的
时
间
域
f
i
e
l
d
c
h
a
r
包
括
”
Y
”
−
增
加
年
;
”
M
”
−
增
加
月
;
”
D
”
−
增
加
日
;
”
H
”
−
增
加
小
时
;
”
m
”
−
增
加
分
钟
;
”
S
”
−
增
加
秒
.
比
如
d
a
t
e
A
d
d
(
“
23
:
13
:
23
”
,
1
,
“
H
”
)
表
示
对
前
面
的
时
间
增
加
一
小
时
.
4
、
d
a
t
e
f
o
r
m
a
t
(
)
d
a
t
e
F
o
r
m
a
t
(
d
a
t
e
,
p
a
t
t
e
r
n
[
,
l
a
n
g
u
a
g
e
]
)
用
于
将
时
间
格
式
化
为
期
望
的
字
符
串
,
其
中
d
a
t
e
可
以
是
时
间
字
符
串
,
也
可
以
是
D
a
t
e
对
象
,
p
a
t
t
e
r
n
为
格
式
化
参
数
,
y
y
y
y
表
示
年
,
M
M
表
示
月
,
d
d
表
示
天
数
,
H
H
表
示
小
时
,
m
m
表
示
分
钟
,
s
s
表
示
秒
.
比
如
d
a
t
e
F
o
r
m
a
t
(
“
2006
−
07
−
04
12
:
12
:
12
”
,
“
日
期
:
y
y
y
y
−
M
M
−
d
d
H
H
:
m
m
:
s
s
”
)
将
返
回
”
日
期
:
2006
−
07
−
04
12
:
12
:
12
”
.
5
、
d
a
t
e
t
i
m
e
(
)
d
a
t
e
t
i
m
e
(
)
返
回
当
前
日
期
和
时
间
6
、
d
a
y
o
f
(
)
d
a
y
O
f
(
d
a
t
e
)
求
日
期
d
a
t
e
的
天
数
7
、
f
o
r
m
a
t
a
d
d
r
e
s
s
(
)
格
式
化
地
址
,
根
据
地
址
簿
i
d
将
地
址
格
式
化
成
语
言
格
式
中
设
置
的
样
式
8
、
f
o
r
m
a
t
m
a
r
a
r
e
a
(
)
格
式
化
物
料
维
度
的
显
示
名
称
,
根
据
指
标
表
i
d
和
物
料
i
d
s
9
、
f
o
r
m
a
t
s
r
a
c
c
t
o
(
)
格
式
化
返
利
依
据
的
显
示
名
称
,
根
据
返
利
取
数
函
数
的
编
码
,
将
返
利
取
数
函
数
的
编
码
转
换
成
名
称
显
示
在
返
利
依
据
上
10
、
l
o
g
i
n
b
u
s
i
d
a
t
e
(
)
得
到
当
前
登
录
业
务
时
间
,
前
后
台
均
可
用
,
如
果
是
后
台
使
用
,
可
能
会
得
不
到
11
、
m
o
n
(
)
m
o
n
t
h
(
)
求
当
前
月
12
、
m
o
n
o
f
(
)
m
o
n
t
h
(
d
a
t
e
)
得
到
指
定
日
期
内
的
月
份
13
、
t
i
m
e
(
)
t
i
m
e
(
)
取
得
当
前
时
间
,
格
式
是
H
H
:
m
m
:
S
S
14
、
t
o
d
a
t
e
(
)
t
o
D
a
t
e
(
s
t
r
)
将
字
符
串
格
式
的
时
间
s
t
r
转
换
成
U
F
D
a
t
e
对
象
15
、
t
o
d
a
t
e
t
i
m
e
(
)
t
o
D
a
t
e
T
i
m
e
(
s
t
r
)
将
字
符
串
格
式
的
时
间
s
t
r
转
换
成
U
F
D
a
t
e
T
i
m
e
对
象
,
比
如
t
o
D
a
t
e
T
i
m
e
(
“
2006
−
10
−
15
21
:
01
:
01
”
)
.
16
、
t
o
t
i
m
e
(
)
t
o
T
i
m
e
(
s
t
r
)
将
字
符
串
格
式
的
时
间
s
t
r
转
换
成
U
F
T
i
m
e
对
象
17
、
y
e
a
r
(
)
y
e
a
r
(
)
求
当
前
年
18
、
y
e
a
r
o
f
(
)
y
e
a
r
o
f
(
d
a
t
e
)
求
日
期
d
a
t
e
的
年
二
、
数
学
1
、
a
b
s
(
)
a
b
s
(
n
u
m
)
求
数
n
u
m
的
绝
对
值
2
、
a
c
o
s
(
)
a
c
o
s
(
x
)
返
回
一
个
弧
度
x
的
反
余
弦
,
弧
度
值
在
0
到
P
i
之
间
3
、
a
c
o
s
h
(
)
a
c
o
s
h
(
z
)
=
l
o
g
(
z
+
s
q
r
t
(
z
∗
z
−
1
)
)
4
、
a
d
d
(
,
)
a
d
d
(
n
u
m
1
,
n
u
m
2
)
用
于
高
精
度
加
法
运
算
5
、
a
n
g
l
e
(
,
)
M
a
t
h
.
a
t
a
n
2
(
x
.
d
o
u
b
l
e
V
a
l
u
e
(
)
,
y
.
d
o
u
b
l
e
V
a
l
u
e
(
)
)
6
、
a
s
i
n
(
)
a
s
i
n
(
x
)
返
回
一
个
弧
度
x
的
反
正
弦
,
弧
度
值
在
−
P
i
/
2
到
P
i
/
2
之
间
7
、
a
s
i
n
h
(
)
a
s
i
n
h
(
z
)
=
l
o
g
(
z
+
s
q
r
t
(
z
∗
z
+
1
)
)
8
、
a
t
a
n
(
)
a
t
a
n
(
x
)
返
回
一
个
弧
度
x
的
反
正
切
值
,
弧
度
值
在
−
P
i
/
2
到
P
i
/
2
之
间
9
、
a
t
a
n
h
(
)
a
t
a
n
h
(
z
)
=
1
/
2
∗
l
o
g
(
(
1
+
z
)
/
(
1
−
z
)
)
10
、
c
e
i
l
(
)
c
e
i
l
(
数
字
或
者
字
符
串
)
将
变
量
转
换
为
i
n
t
类
型
11
、
c
o
s
(
)
c
o
s
(
x
)
返
回
给
定
角
度
x
的
余
弦
值
12
、
c
o
s
h
(
)
c
o
s
h
(
z
)
=
(
e
x
p
(
z
)
+
e
x
p
(
−
z
)
)
/
2
13
、
d
i
v
(
,
)
d
i
v
(
n
u
m
1
,
n
u
m
2
)
用
于
高
精
度
除
法
运
算
14
、
e
x
p
(
)
e
x
p
(
x
)
e
的
x
次
方
15
、
f
l
o
o
r
i
n
g
(
)
f
l
o
o
r
i
n
g
(
数
字
或
者
字
符
串
)
将
变
量
转
换
为
i
n
t
类
型
16
、
g
e
t
r
e
s
u
l
t
(
)
计
算
两
个
数
的
和
17
、
i
n
t
(
)
i
n
t
(
数
字
或
者
字
符
串
)
将
变
量
转
换
为
i
n
t
类
型
18
、
l
n
(
)
l
n
(
x
)
返
回
给
定
数
值
x
的
自
然
对
数
19
、
l
o
g
(
)
l
o
g
(
x
)
返
回
给
定
数
n
的
以
十
为
底
的
对
数
20
、
m
a
x
(
,
)
m
a
x
(
x
,
y
)
求
数
字
x
,
y
两
者
中
的
最
大
值
21
、
m
i
n
(
,
)
m
i
n
(
x
,
y
)
求
x
,
y
两
者
中
的
最
小
值
22
、
m
o
d
(
,
)
求
模
运
算
23
、
m
u
l
(
,
)
m
u
l
(
n
u
m
1
,
n
u
m
2
)
用
于
高
精
度
乘
法
运
算
24
、
r
a
n
d
(
)
生
成
随
机
数
25
、
r
o
u
n
d
(
,
)
r
o
u
n
d
(
d
o
u
b
l
e
n
u
m
,
i
n
t
i
n
d
e
x
)
对
n
u
m
保
留
i
n
d
e
x
位
小
数
(
四
舍
五
入
)
26
、
s
g
n
(
)
s
g
n
(
n
u
m
)
当
数
n
u
m
大
于
0
时
,
返
回
1
,
等
于
0
时
,
返
回
0
,
小
于
0
时
返
回
−
1
27
、
s
i
n
(
)
s
i
n
(
x
)
返
回
给
定
角
度
x
的
正
弦
值
28
、
s
i
n
h
(
)
s
i
n
h
(
z
)
=
(
e
x
p
(
z
)
−
e
x
p
(
−
z
)
)
/
2
29
、
s
q
r
t
(
)
s
q
r
t
(
x
)
返
回
数
值
x
的
平
方
根
30
、
s
u
b
(
,
)
s
u
b
(
n
u
m
1
,
n
u
m
2
)
用
于
高
精
度
减
法
运
算
31
、
s
u
m
(
)
计
算
两
个
数
的
和
32
、
t
a
n
(
)
t
a
n
(
x
)
返
回
给
定
角
度
x
的
正
切
值
33
、
t
a
n
h
(
)
s
i
n
h
(
z
)
/
c
o
s
h
(
z
)
34
、
t
o
n
u
m
b
e
r
(
)
t
o
N
u
m
b
e
r
(
S
t
r
i
n
g
s
t
)
将
字
符
串
s
t
转
换
为
本
解
析
器
可
识
别
的
数
字
,
比
如
t
o
N
u
m
b
e
r
(
“
45.0
”
)
将
返
回
一
个
数
字
型
45.0
,
经
过
转
化
后
可
参
与
各
种
数
值
计
算
.
35
、
z
e
r
o
i
f
n
u
l
l
(
)
z
e
r
o
i
f
n
u
l
l
(
v
a
r
)
表
示
如
果
v
a
r
为
空
将
返
回
0
三
、
字
符
串
1
、
c
h
a
r
a
t
(
,
)
c
h
a
r
a
t
(
s
t
,
i
n
d
e
x
)
得
到
字
符
串
s
t
中
第
i
n
d
e
x
个
字
符
2
、
e
n
d
s
w
i
t
h
(
,
)
e
n
d
s
w
i
t
h
(
s
t
,
e
n
d
)
判
断
字
符
串
s
t
是
否
以
字
符
串
e
n
d
结
尾
3
、
e
q
u
a
l
s
i
g
n
o
r
e
c
a
s
e
(
,
)
e
q
u
a
l
s
I
g
n
o
r
e
C
a
s
e
(
s
t
1
,
s
t
2
)
判
断
忽
略
大
小
写
字
符
串
s
t
1
是
否
与
字
符
串
s
t
2
相
等
4
、
i
n
d
e
x
o
f
(
,
)
i
n
d
e
x
O
f
(
s
t
1
,
s
t
2
)
判
断
字
符
串
s
t
1
中
第
一
个
字
符
串
s
t
2
所
在
的
位
置
,
比
如
l
a
s
t
I
n
d
e
x
O
f
(
“
H
I
,
U
A
P
2006
,
U
A
P
”
,
”
U
A
P
”
)
返
回
3.
5
、
i
s
e
m
p
t
y
(
)
i
s
E
m
p
t
y
(
变
量
)
用
于
判
断
变
量
是
否
为
空
,
包
括
空
串
(
“
”
)
及
空
值
(
n
u
l
l
)
6
、
l
a
s
t
i
n
d
e
x
o
f
(
,
)
l
a
s
t
I
n
d
e
x
O
f
(
s
t
1
,
s
t
2
)
判
断
字
符
串
s
t
1
中
最
后
一
个
字
符
串
s
t
2
所
在
的
位
置
,
比
如
l
a
s
t
I
n
d
e
x
O
f
(
“
H
I
,
U
A
P
2006
,
U
A
P
”
,
”
U
A
P
”
)
返
回
11.
7
、
l
e
f
t
(
,
)
l
e
f
t
(
s
t
,
i
n
d
e
x
)
求
字
符
串
s
t
左
边
前
i
n
d
e
x
个
字
符
组
成
的
字
符
串
8
、
l
e
f
t
s
t
r
(
,
,
)
l
e
f
t
S
t
r
(
s
t
,
l
e
n
,
d
e
f
a
u
l
t
S
t
r
)
求
字
符
串
s
t
左
边
前
l
e
n
个
字
符
组
成
的
字
符
串
,
如
果
字
符
串
长
度
小
于
l
e
n
,
则
用
d
e
f
a
u
l
t
S
t
r
补
齐
,
比
如
l
e
f
t
S
t
r
(
“
a
b
c
”
,
6
,
”
@
”
)
将
返
回
a
b
c
@
@
@
.
9
、
l
e
n
g
t
h
(
)
l
e
n
g
t
h
(
s
t
)
求
字
符
串
s
t
的
长
度
10
、
m
i
d
(
,
,
)
m
i
d
(
S
t
r
i
n
g
s
t
,
i
n
t
s
t
a
r
t
,
i
n
t
e
n
d
)
求
字
符
串
s
t
左
边
前
第
s
t
a
r
t
个
字
符
至
第
e
n
d
个
字
符
之
间
的
字
符
串
11
、
p
c
a
c
o
s
t
d
r
i
v
p
r
o
p
(
)
动
因
占
比
12
、
r
i
g
h
t
(
,
)
r
i
g
h
t
(
S
t
r
i
n
g
s
t
,
i
n
t
i
n
d
e
x
)
求
字
符
串
s
t
右
边
前
i
n
d
e
x
个
字
符
组
成
的
字
符
串
13
、
r
i
g
h
t
s
t
r
(
,
,
)
r
i
g
h
t
S
t
r
(
s
t
,
l
e
n
,
d
e
f
a
u
l
t
S
t
r
)
求
字
符
串
s
t
右
边
后
l
e
n
个
字
符
组
成
的
字
符
串
,
如
果
字
符
串
长
度
小
于
l
e
n
,
则
用
d
e
f
a
u
l
t
S
t
r
补
齐
,
比
如
r
i
g
h
t
S
t
r
(
“
a
b
c
”
,
6
,
”
@
”
)
将
返
回
a
b
c
@
@
@
.
14
、
s
t
a
r
t
s
w
i
t
h
(
,
)
s
t
a
r
t
s
W
i
t
h
(
S
t
r
i
n
g
s
t
,
S
t
r
i
n
g
s
t
a
r
t
)
判
断
字
符
串
s
t
是
否
以
字
符
串
s
t
a
r
t
开
头
15
、
t
o
d
e
c
i
m
a
l
(
)
t
o
D
e
c
i
m
a
l
(
f
r
a
c
t
i
o
n
)
:
f
r
a
c
t
i
o
n
=
n
u
m
1
/
n
u
m
2
:
\n
[
n
u
m
1
c
a
n
n
o
t
b
e
n
u
l
l
;
n
u
m
2
c
a
n
n
o
t
b
e
n
u
l
l
o
r
z
e
r
o
]
16
、
t
o
l
o
w
e
r
c
a
s
e
(
)
t
o
L
o
w
e
r
C
a
s
e
(
S
t
r
i
n
g
s
t
)
求
字
符
串
s
t
的
小
写
形
式
,
比
如
t
o
L
o
w
e
r
C
a
s
e
(
“
A
b
c
”
)
返
回
“
a
b
c
”
.
17
、
t
o
s
t
r
i
n
g
(
)
t
o
S
t
r
i
n
g
(
o
b
j
)
将
对
象
o
b
j
转
换
为
本
解
析
器
可
识
别
的
字
符
串
形
式
18
、
t
o
u
p
p
e
r
c
a
s
e
(
)
t
o
U
p
p
e
r
C
a
s
e
(
S
t
r
i
n
g
s
t
)
求
字
符
串
s
t
的
大
写
形
式
19
、
t
r
i
m
z
e
r
o
(
)
t
r
i
m
z
e
r
o
(
)
剪
除
字
符
串
或
数
字
s
t
r
的
末
尾
0
值
四
、
数
据
库
1
、
a
s
s
(
,
)
a
s
s
(
f
r
e
e
v
a
l
u
e
I
D
,
c
h
e
c
k
t
y
p
e
)
是
关
于
会
计
平
台
中
辅
助
核
算
的
函
数
,
从
g
l
f
r
e
e
v
a
l
u
e
表
中
根
据
f
r
e
e
v
a
l
u
e
I
D
及
c
h
e
c
k
t
y
p
e
返
回
c
h
e
c
k
v
a
l
u
e
2
、
c
v
n
(
,
,
,
)
c
v
n
(
t
a
b
l
e
n
a
m
e
,
f
i
e
l
d
n
a
m
e
,
p
k
f
i
e
l
d
,
p
k
v
a
l
u
e
)
根
据
主
键
从
数
据
库
查
询
特
定
字
段
的
值
,
其
返
回
的
值
将
直
接
作
为
数
字
使
用
3
、
c
v
s
(
,
,
,
)
c
v
s
(
t
a
b
l
e
n
a
m
e
,
f
i
e
l
d
n
a
m
e
,
p
k
f
i
e
l
d
,
p
k
v
a
l
u
e
)
根
据
主
键
从
数
据
库
查
询
特
定
字
段
的
值
,
其
返
回
的
值
将
直
接
作
为
字
符
串
使
用
4
、
g
e
t
c
o
l
n
m
v
(
,
,
,
)
g
e
t
C
o
l
N
m
v
(
t
a
b
l
e
n
a
m
e
,
f
i
e
l
d
n
a
m
e
,
p
k
f
i
e
l
d
,
p
k
v
a
l
u
e
)
根
据
主
键
从
数
据
库
查
询
特
定
字
段
的
值
,
其
返
回
的
值
将
直
接
作
为
数
字
使
用
,
其
功
能
类
似
S
Q
L
语
句
:
s
e
l
e
c
t
f
i
e
l
d
n
a
m
e
f
r
o
m
t
a
b
l
e
n
a
m
e
w
h
e
r
e
p
k
f
i
e
l
d
=
p
k
v
a
l
u
e
从
这
条
S
Q
L
语
句
可
以
看
出
各
个
参
数
的
含
义
.
5
、
g
e
t
c
o
l
n
m
v
2
(
,
,
,
,
,
)
g
e
t
C
o
l
N
m
v
2
(
t
a
b
l
e
n
a
m
e
,
f
i
e
l
d
n
a
m
e
,
p
k
f
i
e
l
d
1
,
p
k
v
a
l
u
e
1
,
p
k
f
i
e
l
d
2
,
p
k
v
a
l
u
e
2
)
根
据
主
键
从
数
据
库
查
询
特
定
字
段
的
值
,
其
返
回
的
值
将
直
接
作
为
数
字
使
用
,
其
功
能
类
似
S
Q
L
语
句
:
s
e
l
e
c
t
f
i
e
l
d
n
a
m
e
f
r
o
m
t
a
b
l
e
n
a
m
e
w
h
e
r
e
p
k
f
i
e
l
d
1
=
p
k
v
a
l
u
e
1
a
n
d
p
k
f
i
e
l
d
2
=
p
k
v
a
l
u
e
2.
从
这
条
S
Q
L
语
句
可
以
看
出
各
个
参
数
的
含
义
.
6
、
g
e
t
c
o
l
s
v
a
l
u
e
(
)
f
i
e
l
d
n
a
m
e
1
,
f
i
e
l
d
n
a
m
e
2
−
>
g
e
t
C
o
l
s
V
a
l
u
e
(
“
t
a
b
l
e
n
a
m
e
”
,
”
f
i
e
l
d
n
a
m
e
1
”
,
”
f
i
e
l
d
n
a
m
e
2
”
,
”
p
k
f
i
e
l
d
”
,
p
k
v
a
l
u
e
)
根
据
主
键
从
数
据
库
查
询
多
个
字
段
的
值
,
左
边
待
赋
值
的
字
段
要
用
逗
号
分
割
,
注
意
里
面
的
字
段
,
表
名
要
用
双
引
号
扩
起
来
。
7
、
g
e
t
c
o
l
v
a
l
u
e
(
,
,
,
)
g
e
t
C
o
l
V
a
l
u
e
(
t
a
b
l
e
n
a
m
e
,
f
i
e
l
d
n
a
m
e
,
p
k
f
i
e
l
d
,
p
k
v
a
l
u
e
)
根
据
主
键
从
数
据
库
查
询
特
定
字
段
的
值
,
其
功
能
类
似
S
Q
L
语
句
:
s
e
l
e
c
t
f
i
e
l
d
n
a
m
e
f
r
o
m
t
a
b
l
e
n
a
m
e
w
h
e
r
e
p
k
f
i
e
l
d
=
p
k
v
a
l
u
e
从
这
条
S
Q
L
语
句
可
以
看
出
各
个
参
数
的
含
义
.
8
、
g
e
t
c
o
l
v
a
l
u
e
2
(
,
,
,
,
,
)
g
e
t
C
o
l
V
a
l
u
e
2
(
t
a
b
l
e
n
a
m
e
,
f
i
e
l
d
n
a
m
e
,
p
k
f
i
e
l
d
1
,
p
k
v
a
l
u
e
1
,
p
k
f
i
e
l
d
2
,
p
k
v
a
l
u
e
2
)
根
据
主
键
从
数
据
库
查
询
特
定
字
段
的
值
,
其
功
能
类
似
S
Q
L
语
句
:
s
e
l
e
c
t
f
i
e
l
d
n
a
m
e
f
r
o
m
t
a
b
l
e
n
a
m
e
w
h
e
r
e
p
k
f
i
e
l
d
1
=
p
k
v
a
l
u
e
1
a
n
d
p
k
f
i
e
l
d
2
=
p
k
v
a
l
u
e
2.
从
这
条
S
Q
L
语
句
可
以
看
出
各
个
参
数
的
含
义
.
9
、
g
e
t
c
o
l
v
a
l
u
e
m
o
r
e
(
)
g
e
t
C
o
l
V
a
l
u
e
M
o
r
e
(
“
t
a
b
l
e
n
a
m
e
”
,
”
s
e
l
e
c
t
f
i
e
l
d
”
,
”
f
i
e
l
d
1
”
,
v
a
l
u
e
1
,
”
f
i
e
l
d
2
”
,
v
a
l
u
e
2
…
.
)
10
、
g
e
t
c
o
l
v
a
l
u
e
m
o
r
e
w
i
t
h
c
o
n
d
(
)
g
e
t
C
o
l
V
a
l
u
e
M
o
r
e
W
i
t
h
C
o
n
d
(
“
t
a
b
l
e
n
a
m
e
”
,
”
s
e
l
e
c
t
f
i
e
l
d
”
,
”
f
i
e
l
d
1
”
,
v
a
l
u
e
1
,
”
f
i
e
l
d
2
”
,
v
a
l
u
e
2..
.
,
”
w
h
e
r
e
C
o
n
d
i
t
i
o
n
”
)
11
、
g
e
t
m
l
c
v
a
l
u
e
(
)
g
e
t
M
L
C
V
a
l
u
e
(
“
t
a
b
l
e
n
a
m
e
”
,
”
f
i
e
l
d
n
a
m
e
”
,
”
p
k
f
i
e
l
d
”
,
p
k
v
a
l
u
e
)
根
据
主
键
从
数
据
库
查
询
特
定
当
前
登
录
语
种
对
应
名
称
字
段
的
值
12
、
g
e
t
m
l
c
v
a
l
u
e
m
o
r
e
w
i
t
h
c
o
n
d
(
)
g
e
t
M
L
C
V
a
l
u
e
M
o
r
e
W
i
t
h
C
o
n
d
(
t
a
b
l
e
n
a
m
e
,
s
e
l
e
c
t
f
i
e
l
d
,
f
i
e
l
d
1
,
v
a
l
u
e
1
,
f
i
e
l
d
2
,
v
a
l
u
e
2
…
,
w
h
e
r
e
C
o
n
d
i
t
i
o
n
)
五
、
财
务
1
、
g
e
t
m
l
c
v
a
l
u
e
m
o
r
e
w
i
t
h
c
o
n
d
(
)
g
e
t
C
h
i
n
e
s
e
C
u
r
r
e
n
c
y
(
O
b
j
e
c
t
)
将
传
入
的
字
符
串
或
数
字
转
换
为
大
写
金
额
2
、
g
e
t
e
n
g
l
i
s
h
c
u
r
r
e
n
c
y
(
,
)
g
e
t
E
n
g
l
i
s
h
C
u
r
r
e
n
c
y
(
m
a
r
k
,
n
u
m
b
e
r
)
将
数
字
金
额
转
为
英
文
文
本
描
述
3
、
s
e
t
t
h
m
a
r
k
(
)
s
e
t
T
h
M
a
r
k
(
S
t
r
i
n
g
)
将
传
入
的
字
符
串
或
数
字
转
为
金
额
后
加
入
千
分
位
标
志
,
如
果
希
望
保
留
数
字
后
面
的
0
,
则
需
要
先
将
数
字
转
为
字
符
串
,
然
后
再
用
s
e
t
T
h
M
a
r
k
(
)
函
数
,
比
如
s
e
t
T
h
M
a
r
k
(
t
o
S
t
r
i
n
g
(
56510.000
)
)
.
4
、
t
o
c
h
i
n
e
s
e
(
,
,
)
t
o
C
h
i
n
e
s
e
(
O
b
j
e
c
t
n
u
m
b
e
r
,
i
n
t
f
l
a
g
1
,
i
n
t
f
l
a
g
2
)
将
传
入
的
字
符
串
或
数
字
转
换
为
中
文
六
、
常
用
i
i
f
(
c
o
n
d
i
t
i
o
n
,
r
e
s
u
l
t
1
,
r
e
s
u
l
t
2
)
根
据
c
o
n
d
i
t
i
o
n
是
否
成
立
,
返
回
值
不
同
。
当
c
o
n
d
i
t
i
o
n
=
t
r
u
e
,
返
回
r
e
s
u
l
t
1
,
否
则
返
回
r
e
s
u
l
t
2
。
七
、
控
制
公
式
1
、
Confirm->iif(,,”“)
在保存时根据公式条件,给出提示信息,确认是否继续。
2、
Editable−>iif(,”Y”,”N”)3、
E
d
i
t
a
b
l
e
−
>
i
i
f
(
,
”
Y
”
,
”
N
”
)
3
、
Editable[itemkey]->iif(,”Y”,”N”)
如果条件为真,表中字段可编辑
4、
Enabled−>iif(,”Y”,”N”)5、
E
n
a
b
l
e
d
−
>
i
i
f
(
,
”
Y
”
,
”
N
”
)
5
、
Enabled[itemkey]->iif(,”Y”,”N”)
如果条件为真,激活表中字段
6、
Error−>iif(,,”“)在保存时根据公式条件,进行报错处理,如果出错则保存失败。可以起到业务检查的作用。7、
E
r
r
o
r
−
>
i
i
f
(
,
,
”
“
)
在
保
存
时
根
据
公
式
条
件
,
进
行
报
错
处
理
,
如
果
出
错
则
保
存
失
败
。
可
以
起
到
业
务
检
查
的
作
用
。
7
、
ForeGround->iif(,”red”,”blue”)
可根据条件值,将当前设置公式的字段颜色变换,起到醒目提示的作用。
8、
ForeGround[itemkey]−>iif(,”red”,”blue”)与上一公式的功能相同,唯一不同是指定了设置哪个字段的颜色。9、
F
o
r
e
G
r
o
u
n
d
[
i
t
e
m
k
e
y
]
−
>
i
i
f
(
,
”
r
e
d
”
,
”
b
l
u
e
”
)
与
上
一
公
式
的
功
能
相
同
,
唯
一
不
同
是
指
定
了
设
置
哪
个
字
段
的
颜
色
。
9
、
Message->iif(,,”“)
在保存时根据公式条件,给出提示信息,不影响保存。
</div>