什么是公式?
公式是一种数学表达式,用于描述数学关系、规律或运算。他能通过基本的算术运算实现单元格之间的数学关系,帮助客户解决单位换算,绩效计算,工资计算等复杂功能。
如何使用公式?
1、实现计算工资
工资=良品数*工资单价
使用下面的公式实现该功能:${报工.良品数} *${报工.工序.工资单价}
2、实现单位换算功能
例如把KG换算成G,使用下面的方式来实现:
首先,我们先在加工单列表创建一个扩展字段名字叫做千克,然后创建一个公式类型的扩展字段,在其中输入下面的公式:
${加工单.克}*1000
3、使用函数
- 支持函数
- case函数
- 表达式:
- (expression1,result1;expression2,result2…)
- (条件表达式1,条件表达式1为true返回该值,条件表达式2,条件表达式2为true返回该值,…)
- 介绍:判断是否满足一个或多个条件,且返回符合第一个TRUE条件的值,CASE可以取代多个IF语句嵌套
- 表达式规则:
- 错误校验
- case语法的多条件中,按表达式顺序执行,满足即执行规则,后面的表达式正确或错误都不生效
- 错误校验
- 表达式:
- case函数
- 表达式校验错误时,显示tips提示“请检查公式是否正确”
- 兜底逻辑:
- 如果输入的规则不合法,或者无法计算出有效结果,统一认为该校验规则错误,不执行此规则
例如:
- 输入的规则不合法
- 自定义字段变量被删除
- 规则不构成一个判断条件,或者无法判断出有效结果
- 无法计算出数值,例如除以0
示例:
结合良品数和不良品数计算工资
计件计算工资 当良品数大于2000并且不良品数小于50时 工资计算为 良品数减去不良品数乘9.5元 当良品数大于2000并且不良品数大于100时 工资计算为 良品数减去不良品数乘5.5元
公式为:
case(
${报工.良品数}>2000 && ${报工.不良品数}<50,(${报工.良品数}-${报工.不良品数})*9.5;
${报工.良品数}>2000 && ${报工.不良品数}>100,${报工.良品数}*5.5
)
支持符号(英文模式下)
- 校验字符白名单(英文模式)
- 运算符号:加 (+)、减 (-)、乘 (*)、除 (/)
- 判断符号:等于 (==)、不等于 (!=)、大于 (>)、小于 (<)、大于等于 (>=)、小于等于 (<=)
- 条件符号:且 (&&)、或(||)
- 语法符号:小括号 (())、dollar符 ($)、逗号 (,)、分号 (;)、双引号 (“)、单引号 (‘)
+ | 解释说明 | +是算术运算符,表示加法 |
使用方式 | number1+number2
| |
示例 | ${报工.良品数}+${报工.不良品数} | |
– | 解释说明 | -是算术运算符,表示减法 |
使用方式 | number1-number2
| |
示例 | ${报工.良品数}-${报工.不良品数} | |
* | 解释说明 | *是算术运算符,表示乘法 |
使用方式 | number1*number2
| |
示例 | ${报工.良品数}*2 | |
/ | 解释说明 | /是算术运算符,表示除法 |
使用方式 | number1/number2
| |
示例 | ${报工.良品数}/${报工.报工数} | |
== | 解释说明 | ==是关系判断符,表示是否相等,返回结果是布尔类型,若相等返回true,若不相等返回结果false |
使用方式 | logical1==logical2
| |
示例 | 1==2返回结果为false | |
!= | 解释说明 | !=是关系判断符,表示是否相等,返回结果是布尔类型,若相等返回false,若不相等返回结果true |
使用方式 | logical1!=logical2
| |
示例 | 1!=2返回结果为true | |
> | 解释说明 | >是关系判断符,表示是否大于,返回结果是布尔类型,若大于返回true,若小于返回结果false |
使用方式 | logical1>logical2
| |
示例 | 1>2结果为false | |
< | 解释说明 | <是关系判断符,表示是否小于,返回结果是布尔类型,若小于返回true,若大于返回结果false |
使用方式 | logical1<logical2
| |
示例 | 1<2结果为true | |
>= | 解释说明 | >=是关系判断符,表示是否大于等于,返回结果是布尔类型,若大于等于返回true,若小于等于返回结果false |
使用方式 | logical1>=logical2
| |
示例 | 1>=2结果为false | |
<= | 解释说明 | <=是关系判断符,表示是否小于等于,返回结果是布尔类型,若小于等于返回true,若大于等于返回结果false |
使用方式 | logical1<=logical2
| |
示例 | 1<=2结果为true | |
&& | 解释说明 | &&是条件符号,表示用户设置多个逻辑表达式是否同时满足,若同时满足返回true,若不是同时满足。返回false |
使用方式 | logical1<=logical2&& logical1>logical3
| |
示例 | 1<=2&&1>0结果为true | |
|| | 解释说明 | ||是条件符号,表示用户设置多个逻辑表达式是否满足任意一个,若满足任意一个返回true,若不是满足任意一个。返回false |
使用方式 | logical1<=logical2 || logical1>logical3
| |
示例 | 1<=2 || 1>3结果为true | |
() | 解释说明 | 小括号,使用时必须成对出现 |
使用方式 | 配合其他运算符使用,代表计算优先级 | |
, | 解释说明 | 逗号,当一个case语句由多个公式组成,中间用逗号分隔 |
; | 解释说明 | 分号,当公式编辑器有多个函数,函数之间用分号隔开 |
“”、” | 解释说明 | 双引号和单引号,当一个表达式有常量时,需将常量置于双引号内 |
支持字段
模块 | 字段 | 变量 |
加工单 | 项目编号 | ${加工单.项目.编号} |
加工单号 | ${加工单.加工单号} | |
合同编号 | ${加工单.合同.编号} | |
计划数 | ${加工单.计划数} | |
完成数量 | ${加工单.完成数量} | |
状态 | ${加工单.状态} | |
已完成工序数量 | ${加工单.已完成工序数量} | |
优先级 | ${加工单.优先级.名称} | |
交货日期 | ${加工单.交货日期} | |
工序总数量 | ${加工单.工序总数量} | |
入库数量 | ${加工单.入库数量} | |
开始时间 | ${加工单.开始时间} | |
结束时间 | ${加工单.结束时间} | |
商品 | ${加工单.商品.名称} | |
商品编号 | ${加工单.商品.编号} | |
商品规格 | ${加工单.商品.规格} | |
加工单扩展字段 | ${加工单.扩展字段} | |
加工单商品扩展字段 | ${加工单.商品.扩展字段} | |
报工 | 工序名 | ${报工.工序.名称} |
车间 | ${报工.工序.车间.名称} | |
报工 | 产线 | ${报工.工序.产线.名称} |
良品数 | ${报工.良品数} | |
不良品数 | ${报工.不良品数} | |
报工配比 | ${报工.工序.报工配比} | |
计价方式 | ${报工.工序.计价方式} | |
工资单价 | ${报工.工序.工资单价} | |
报工时长 | ${报工.报工时长} | |
生产人员 | ${报工.生产人员.名称} | |
生产人员扩展字段 | ${报工.生产人员.扩展字段} | |
报工扩展字段 | ${报工.扩展字段} | |
采购入库单明细 | 采购单号 | ${采购入库单明细.采购单.编号} |
商品名称 | ${采购入库单明细.商品.名称} | |
商品编号 | ${采购入库单明细.商品.编号} | |
商品规格 | ${采购入库单明细.商品.规格} | |
单位 | ${采购入库单明细.商品.单位.名称} | |
数量 | ${采购入库单明细.数量} | |
成本单价 | ${采购入库单明细.成本单价} | |
成本金额 | ${采购入库单明细.成本金额} | |
扩展字段 | ${采购入库单明细.扩展字段} | |
成品入库单明细 | 加工单号 | ${成品入库单明细.加工单.编号} |
商品名称 | ${成品入库单明细.商品.名称} | |
商品编号 | ${成品入库单明细.商品.编号} | |
商品规格 | ${成品入库单明细.商品.规格} | |
成品入库单明细 | 计划数量 | ${成品入库单明细.加工单.计划数} |
已入库数量 | ${成品入库单明细.加工单.入库数量} | |
入库数量 | ${成品入库单明细.入库数量} | |
单位 | ${成品入库单明细.商品.单位.名称} | |
扩展字段 | ${成品入库单明细.扩展字段} | |
其他入库单明细 | 商品名称 | ${其他入库单明细.商品.名称} |
商品编号 | ${其他入库单明细.商品.编号} | |
商品规格 | ${其他入库单明细.商品.规格} | |
数量 | ${其他入库单明细.数量} | |
销售单价 | ${其他入库单明细.销售单价} | |
销售金额 | ${其他入库单明细.销售金额} | |
单位 | ${其他入库单明细.商品.单位.名称} | |
扩展字段 | ${其他入库单明细.扩展字段} | |
销售出库单明细 | 商品名称 | ${销售出库单明细.商品.名称} |
商品编号 | ${销售出库单明细.商品.编号} | |
商品规格 | ${销售出库单明细.商品.规格} | |
数量 | ${销售出库单明细.数量} | |
单价 | ${销售出库单明细.销售单价} | |
金额 | ${销售出库单明细.销售金额} | |
单位 | ${销售出库单明细.商品.单位.名称} | |
合同编号 | ${销售出库单明细.合同.编号} | |
扩展字段 | ${销售出库单明细.扩展字段} | |
其他出库单明细 | 商品名称 | ${其他出库单明细.商品.名称} |
其他出库单明细 | 商品编号 | ${其他出库单明细.商品.编号} |
商品规格 | ${其他出库单明细.商品.规格} | |
数量 | ${其他出库单明细.数量} | |
单位 | ${其他出库单明细.商品.单位.名称} | |
扩展字段 | ${其他出库单明细.扩展字段} |
合同明细 | 金额 | ${合同明细.金额} |
数量 | ${合同明细.数量} | |
单价 | ${合同明细.单价} | |
折扣 | ${合同明细.折扣} | |
优惠金额 | ${合同明细.优惠金额} | |
折后金额 | ${合同明细.折后金额} | |
销售数量 | ${合同明细.销售数量} | |
商品编号 | ${合同明细.商品编号} | |
商品名称 | ${合同明细.商品名称} | |
规格 | ${合同明细.规格} | |
单位 | ${合同明细.单位} |
合同报价单 | 编号 | ${合同报价单.编号} |
金额 | ${合同报价单.金额} | |
合同编号 | ${合同报价单.合同编号} | |
报价金额 | ${合同报价单.报价金额} | |
交货日期 | ${合同报价单.交货日期} | |
审核状态 | ${合同报价单.审核状态} |
合同报价单明细 | 金额 | ${合同报价单明细.金额} |
销售数量 | ${合同报价单明细.销售数量} | |
单价 | ${合同报价单明细.单价} | |
折扣 | ${合同报价单明细.折扣} | |
优惠金额 | ${合同报价单明细.优惠金额} | |
折后金额 | ${合同报价单明细.折后金额} | |
商品编号 | ${合同报价单明细.商品编号} | |
商品名称 | ${合同报价单明细.商品名称} | |
规格 | ${合同报价单明细.规格} | |
单位 | ${合同报价单明细.单位} |
绩效工资公式案例
案例1:阶梯工资
case(
${报工.良品数}>0 && ${报工.良品数}<=100,
${报工.良品数} * ${报工.工资单价};
${报工.良品数}>100 && ${报工.良品数}<=200,
100*${报工.工资单价} + (${报工.良品数}-100) * (${报工.工资单价} + ${报工.参数1});
${报工.良品数} > 200,
100${报工.工资单价}+100(${报工.工资单价}+${报工.参数1})+(${报工.良品数}-200)(${报工.工资单价}+${报工.参数1}2)
)
案例2:计时工资
${报工.报工时长}/${报工.标准工时}*${报工.工资单价}