跳到主要内容

如何实现自定义编号?

使用场景&期望达成

使用自定义编号的场景非常多,例如合同/订单编号,物料编码,员工工号等。

以订单编号为例,一般的制造业在采购时都会区分成品和原材料,或者叫成品和配件。希望在采购的时候,能分开计数,且每个月重置编号,例如这是我这个月的第一笔成品订单,那就是“CP-20201215-0001”,然后我又买了一笔配件订单,我希望他是“PJ-20201215-0001”,我们需要通过字段来组合需要的自定义编号。

问题剖析

我们可以先分析一下这个自定义编号,CP/PJ-年月日-自增编号。

一共有3部分,前缀、日期和自增编号。

1、前缀

这部分很简单,是成品和配件的英文首字母大写,我们通过单项选择配合IF函数就可以直接控制。

2、年月

这个就不说了,通过日期字段配合CONCAT来实现即可。

3、自增编号

我们可以通过数据关联字段来完成。

当我们分别处理了这3个部分后,用CONCAT组合一下就可以了。

解决方案

image.png

1、前缀:

1.设置采购类型

【采购类型】:单项选择

image.png

2.通过IF()函数取前缀

image.png

2、年月日

1.设置日期字段

【采购日期】:日期-设置公式

image.png

2.通过TEXT()函数取年月日

image.png

3、自增编号

我们先来看最简单的自增编号如何实现

1.设置数据关联字段获取当前最新编号

【当前最新编号】:数据关联-聚合方式“最新数据”

关联「自定义编号」应用(即当前应用本身)中的字段【自定义编号】,聚合获取最新的一条编号,聚合方式:最新数据

image.png

2.设置自增编号的公式

【自定义编号】:单行文字-设置公式

例如:数据关联字段【当前最新编号】获取到当前最新的一条编号为“CG-0015”,那在发起一条数据时,编号应该是“CG-0016”(即自增:0015+1),也就是需要获取“CG-0015”中右边4位字符部分“0015”再+1,然后将前缀“CG-”和“0015”+1拼接起来

即公式:CONCAT("CG-",RIGHT(CONCAT("0000",NUM(RIGHT(当前最新编号,4))+1),4))

公式拆分:

RIGHT(当前最新编号***,4):***获取当前最新编号中的右边4位字符部分“0015”

NUM(RIGHT(当前最新编号***,4))+1:***通过NUM()函数将“0015”从文本格式转换为数字格式再+1

RIGHT(CONCAT("0000",NUM(RIGHT(当前最新编号***,4))+1),4):***通过NUM()函数转换“0015”的格式后会变成“15”,不再保留固定的4位字符,通过CONCAT()函数将“0000”和“16”拼接为“000016”,再通过RIGHT()函数取从右开始固定的4位字符“0016”

CONCAT("CG-",RIGHT(CONCAT("0000",NUM(RIGHT(当前最新编号***,4))+1),4)):***最后通过CONCAT()函数将前缀“CG-”和“0016”拼接为“CG-0016”,即得到自增后的编号

image.png

4、按月重置编号

1.设置数据关联字段的筛选条件

公式中不同颜色的字段分别是目标应用字段(关联应用中的字段)和当前应用字段

筛选条件:采购日期的年月相同,且采购类型相同

image.png

5、完整公式

当还没有选择采购类型时:ISEMPTY(采购类型),先不显示编号,即返回空值:" "

选择了采购类型后,取当前最新编号右边的4位字符再+1:

CONCAT(IF(采购类型=="配件","PJ-","CP-"),TEXT(CURDATE(),"YYYYMMDD"),"-",

RIGHT(CONCAT("0000",NUM(RIGHT(当前最新编号,4))+1),4))

最后通过IF()函数将两种情况写在一起

image.png

设置好之后,我们可以看一下效果:

image.png

image.png

5、拓展

1.设置提交/通过时重新触发数据关联或公式

申请人节点中开启“提交/通过时重新触发数据关联或公式”,选择需要重新触发的字段【当前最新编号】【自定义编号】

设置意义:当填写中提交前的过程中,如果有其他人员提交了表单,这时【当前最新编号】获取的编号不是最新的了,自定义编号也就会和其他数据的编号重复,所以需要在提交时重新触发再次获取最新的当前编号,计算出正确的自定义编号

image.png

注:提交重计算功能打开后,在选择字段时,需要注意字段顺序计算顺序是从上往下,因为**【自定义编号】是根据【当前最新编号】来进行公式计算的,所以一定要先算出来【当前最新编号】,才能计算【自定义编号】**,不然的话,先算【自定义编号】,那时候会导致公式错误。