计算公式基本使用
计算公式使用手册:点我访问
逻辑函数
1、IF
说明: 根据判断条件返回不同的值
IF(判断条件, 条件成立时返回的值, 条件不成立时返回的值)
示例
// 假设一个有个控件叫【运费】,开关控件【是否包邮】时为0不包邮时为10,计算公式如下
IF(是否包邮, 0, 10)
// 假设一个有个控件叫【运费】,开关控件【是否包邮】时为0不包邮时为10,
// 如果有运费红包,最终的运费为10 - 红包金额
// 计算公式如下
IF(是否包邮, 0, 10 - 运费红包)
2、AND
说明:判断多个条件是否都成立
条件1 AND 条件2 AND 条件3 AND ...
示例
// 假设一个有个控件叫【运费】
// 数字输入框【金额】大于80且小于等于 100 时【运费】打 9 折,计算公式如下
IF(金额 > 80 AND 金额 <= 100, 9, 10)
3、OR
说明:判断多个条件是否 其中一个 成立
条件1 OR 条件2 OR 条件3 OR ...
示例
// 假设一个有个控件叫【运费】
// 开关【是否认识老板娘】开关【是否认识老板】如果认识随便一个,都包邮,计算公式如下
IF(是否认识老板娘 OR 是否认识老板, 0, 10)
4、ISNULL
说明:判断一个控件是否无值,一般作为 IF OR AND CASE 的条件使用
ISNULL(控件)
示例
// 假设我们需要【提交校验】某单据【合同类型】为 商务合同 则必须上传附件,否则不允许提交
// 以上 【合同类型】为单选框
IF(ISNULL(附件) AND 合同类型 == "商务合同", true, false)
5、CASE
CASE(条件表达式1,条件表达式1成立时返回该值,条件表达式2,条件表达式1成立时返回该值,...)
示例: 场景【成绩】60 以下,为不及格;60-79,为中;80-89,为良;90 以上,为优
// 以上 【成绩】为数字输入框
CASE(成绩<60,"不及格",60<=成绩 AND 成绩<80,"中",80<=成绩 AND 成绩<90,"良",90<=成绩,"优")
数学函数
1、SUM
说明:求和
SUM(数字输入框1,数字输入框2,数字输入框3,...)
示例 计算总分
// 计算主表单
SUM(数学分数,语文分数,英语分数)
示例 计算明细中的报销总额
// 假设有个 【报销汇总】明细,其中有个数字输入框为【报销金额】
// 要计算【报销汇总】中的【报销金额】的总和
SUM(报销汇总.报销金额)
// Ps. 其实以上的场景可以直接使用 报销汇总.报销金额合计,无需使用公式
2、SUMIF
说明:对符合条件的记录进行求和,返回求和的结果
// 数字输入框【优等数量】=
SUMIF(质量汇总.控件自身, 质量汇总.质量等级 == "优", 质量汇总.数量)
// 数字输入框【良好数量】=
SUMIF(质量汇总.控件自身, 质量汇总.质量等级 == "良", 质量汇总.数量)
3、AVERAGE
说明:对传入的数值进行求平均,返回平均值
AVERAGE(数字输入框1,金额2,数字输入框3,金额4)
示例
// 数字输入框【白骨精颜值得分】=
AVERAGE(唐僧打的分,孙悟空打的分,猪八戒打的分,沙僧打的分)
4、MAX
说明:对传入的数值进行求最大值,返回最大值
MAX(数字输入框1,金额2,数字输入框3,金额4)
示例
// 数字输入框【白骨精颜值最高得分】=
MAX(唐僧打的分,孙悟空打的分,猪八戒打的分,沙僧打的分)
4、MIN
说明:对传入的数值进行求最小值,返回最小值
MIN(数字输入框1,金额2,数字输入框3,金额4)
示例
// 数字输入框【白骨精颜值最低得分】=
MIN(唐僧打的分,孙悟空打的分,猪八戒打的分,沙僧打的分)
5、COUNT
说明:对传入的控件或者值求一下数量
COUNT(明细)
示例
// 补卡明细
// 如果补卡明细大于1条,则不允许提交
COUNT(补卡明细) > 1 // "不允许提交"
计算公式Q&A
Q&A
1、单选框框的值可以用等于吗?
可如下使用
// 正确用法
主表单.单选框 == "已转正"
// 错误用法
主表单.多选框 == "已转正"
2、日期怎么比较
// 错误用法
主表单.申请日期 < 2023-07-31
//正确用法
主表单.申请日期 < ADDDAY("2023-07-31", 0)
3、公式中的标点符号可以是中文的吗?
不可以,计算公式表达式中的符号均为英文符号
// 错误用法
IF(主表单.单选框 == “已转正”,true,false)
// 正确用法
IF(主表单.单选框 == "已转正",true,false)
以上表达式是中文的引号和中文的",",计算时会无法运算,故表达式不生效,所以若计算公式无法正常运算,推荐先检查公式中是否有中文的引号或逗号或其他的非英文字符
4、数字类判断时应该怎么写?
比如校验请假时长是否>=8小时,8小时或以上的话就不能提交,公式应该是:主表单.请假时长 >= 8 而不是 主表单.请假时长 >= 8小时 ,只有数字才能和数字才可以正常比较
// 错误用法
主表单.请假时长 >= 8小时
//正确用法
主表单.请假时长 >= 8
5、VALUE 函数的参数里面可以有非数字吗?
不能有哦~,如果VALUE函数中出现非数字,函数将无法返回正确的数字
VALUE是将文本字符串转换为数字,如VALUE("233") 返回 233
// 错误用法
// [市场收费]控件的值为 "800元"
VALUE(主表单.市场收费) > 500
//正确用法
// [市场收费]控件的值为 = "800"
VALUE(主表单.市场收费) > 500
6、表单控件校验和提交校验的主要区别?
- 1、表单控件校验只要是表单处于编辑状态下(非5s暂存,这种情况会忽略校验)牵扯到流程流转都会校验
- 2、提交校验在提交时、同意时、流程修改时、都会触发
- 3、控件校验:适合做明细内控件的校验和主表单控件的校验
- 4、提交校验:适合做主表单控件和明细的合计类字段的校验(如)
- 1 报销场景:主表单的【报销金额】必须小于【发票明细】中的【发票总金额】
- 2 限制合同提交:如果主表单的【合同类型】== "销售合同",则提示用户"销售合同请使用销售合同申请单"
- 3 限制请假天数:如果请假明细的总时长 > 5 则提示用户 "一次性请假不可以超过5天哦"
- 5、无论是提交校验还是控件校验其实都支持主表单控件的校验(两者是有重合点的,比如4 -> 1)中就是,两边均可以), 但是控件校验的提示会显示在对应控件上,而提交校验会是弹框提示
- 6、提交校验和控件校验都会阻断用户的提交行为
7、如何限制用户在提交单据时,A控件和B控件必须填写一个(任意填写其中一个就可以提交)?
可在提交校验中设置以下公式
ISNULL(主表单.A控件) AND ISNULL(主表单.B控件)
8、如果我有个控件的值是用【申请日期】-【时间】= 【距事件发生时间】这个公式要怎么设置?
两个时间之间的计算有两个函数可以使用:DAYS 和 DATEDIF
// 计算两个时间相差的天数
DAYS(申请日期, 时间)
// DAYS('2023/02/02', '2023/01/02') // 返回 31
// DAYS('2023/01/02', '2023/02/02') // 返回 -31
DATEDIF('2023/01/02', '2023/02/02') // 返回 -31
DATEDIF('2023/02/02', '2023/01/02') // 返回 31
// 计算两个时间相差的年数
DATEDIF('2023/01/02', '2024/01/02', 'y') // 返回-1
// 计算两个时间相差的月数
DATEDIF('2023/01/02', '2023/02/02', 'M') // 返回-1
// 计算两个时间相差的小时数
DATEDIF('2023/01/02 08:00:00', '2023/01/02 09:30:00', 'h') // 返回-1.5
// 计算两个时间相差的分钟数
DATEDIF('2023/01/02 08:00:00', '2023/01/02 08:20:00', 'm') // 返回-20
// 计算两个时间相差的秒数
DATEDIF('2023/01/02 08:00:00', '2023/01/02 08:01:02', 's') // 返回-62
9、开关控件在计算公式中的返回值是什么?
是真(true)或假(false)
// 假设一个有个控件叫【运费】,开关控件【是否包邮】时为0不包邮时为10,计算公式如下
IF(是否包邮, 0, 10)
10、如何限制文本框的填写位数,比如手机号
场景:如果表单中有个【单行文本框】控件,我希望用户填写指定的位数,比如必须填写【手机号】,要填写11位数字,少了或者多了都不能提交,我可以使用什么函数?
LEN 函数(返回字符串的长度)
示例
// 单行文本框 = 1535644
LEN(单行文本框) // 返回7
// 单行文本框 = 153
LEN(单行文本框) // 返回3
题目中指定的场景,可以在提交校验中(或者控件校验中填写以下计算公式)
LEN(单行文本框) != 11 // 提示语写 ”必须填手机号哦“
tip: 如果是个【数字输入框】或【金额输入框】需要做这种判断,需要先把输入框的值用TEXT函数转为字符串才可以用LEN计算长度哦~
LEN(TEXT(单行文本框)) != 11
11、 假设我们公司有个报销模板,然后我们要求只能在每个月25号这天前才可以提交报销单,如果25号以后提交报销单,则不允许提交,怎么配置计算公式?
// NOW 返回当前时间
// DAY 返回时间所属的天
// DAY('2023/02/03') 返回 3
// 下面公式的意思是:如果当前的天大于25 则提交校验显示提示
DAY(NOW()) >= 25
12、计算公式可以限制明细的条数吗?比如明细超过一条不让提交
// COUNT 计算数目
COUNT(主表单.明细.控件自身) > 1
13、如何获取下个月、上个月的某天的时间,拿来做比较
// 获取下个月 2 号
TIMESTAMP(YEAR(NOW()) + "/" + (MONTH(NOW())+1) + "/02") > 主表单.补卡时间
// 获取上个月 4 号
TIMESTAMP(YEAR(NOW()) + "/" + (MONTH(NOW())-1) + "/04") > 主表单.补卡时间
// 获取上个月 4 号 上午 9:03:00
TIMESTAMP(YEAR(NOW()) + "/" + (MONTH(NOW())-1) + "/04 09:03") > 主表单.补卡时间
14、如何使用人员控件的值来做判断,比如限制某些人不允许提交单据
// 拿人员控件的名字来做判断(提交校验中如果如下设置,提交人是孙悟空的时候,就会不允许其提交表单)
IF(TEXTUSER(主表单.提交人, "name") == "孙悟空", true, false)
校验多个人
// 拿人员控件的名字来做判断(提交校验中如果如下设置,提交人是孙悟空和猪八戒的时候,就会不允许其提交表单)
IF(TEXTUSER(主表单.提交人, "name") == "孙悟空" OR TEXTUSER(主表单.提交人, "name") == "猪八戒", true, false)
15、怎么给某个时间加上 30 分钟呢?
主表单.申请日期 + 30 * 60 * 1000
16、在云之家上设置的单据模板, 时间字段能否限定填写规范,比如只能填写当月日期的任意时间,不能填当月前面的月份和后面的月份。如何设置公式实现呢?
// 提交校验或者控件校验
// 逻辑是,判断两个日期的年份和月份是否都相等 如果都相等返回 false (不提示) 否则就报错
// 为啥我限制了年份,因为年份上面场景中,理论上 24年5月 和 25年5月,月份是一样的,如果不判断年份就不严谨了
IF(MONTH(日期) == MONTH(日期2) AND YEAR(日期) == YEAR(日期2), false, true)
// 如果是不能选当前月,只能选前一个月或者后一个月呢
IF(MONTH(日期) == MONTH(日期2) AND YEAR(日期) == YEAR(日期2), true, false)
// 如果只能选后面的月份呢
IF(MONTH(日期) < MONTH(日期2), true, false)
// 如果只能选后面的月份呢
IF(MONTH(日期) > MONTH(日期2), true, false)
17、校验,明细里面 不含税金额+税额不等于含税金额。这个要怎么设置呢?
// 控件校验,校验控件为【明细.含税金额】,计算公式如下
SUM(明细.不含税金额,明细.税额) != 明细.含税金额
// 提交校验
MAP(明细.控件自身,SUM(明细.不含税金额,明细.税额) != 明细.含税金额,1)
18、流程里面有个文本控件,我想设置当这个文本控件填写的值等于某个值时,后面的一个字段就为必填,这个该怎么设置?
// 提交校验(思路:【文本】控件为“你好”且【某字段】为空,那就是不符合条件,然后返回 true. 提交校验就会把你的错误信息弹出来)
IF(文本 == "你好" AND ISNULL(某字段), true, fasle)
欢迎关注我的个人公众号「「小枫学幽默」」一起成长,一起分享生活!!