(云之家)计算公式Q&A

926 阅读12分钟

计算公式基本使用

计算公式使用手册:点我访问

逻辑函数

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(主表单.单选框 == “已转正”,truefalse)

// 正确用法
IF(主表单.单选框 == "已转正"truefalse)

以上表达式是中文的引号和中文的",",计算时会无法运算,故表达式不生效,所以若计算公式无法正常运算,推荐先检查公式中是否有中文的引号或逗号或其他的非英文字符

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、如果我有个控件的值是用【申请日期】-【时间】= 【距事件发生时间】这个公式要怎么设置?

两个时间之间的计算有两个函数可以使用:DAYSDATEDIF

// 计算两个时间相差的天数
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 // 提示语写 ”必须填手机号哦“

image.png

tip: 如果是个【数字输入框】或【金额输入框】需要做这种判断,需要先把输入框的值用TEXT函数转为字符串才可以用LEN计算长度哦~

LEN(TEXT(单行文本框)) != 11

11、 假设我们公司有个报销模板,然后我们要求只能在每个月25号这天前才可以提交报销单,如果25号以后提交报销单,则不允许提交,怎么配置计算公式?

// NOW 返回当前时间
// DAY 返回时间所属的天
// DAY('2023/02/03') 返回 3

// 下面公式的意思是:如果当前的天大于25 则提交校验显示提示
DAY(NOW()) >= 25

image.png

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)

image.png

校验多个人

// 拿人员控件的名字来做判断(提交校验中如果如下设置,提交人是孙悟空和猪八戒的时候,就会不允许其提交表单)
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)

欢迎关注我的个人公众号「「小枫学幽默」」一起成长,一起分享生活!!

扫码关注我.png