如何实现自定义编号?
使用场景&期望达成
使用自定义编号的场景非常多,例如合同/订单编号,物料编码,员工工号等。
以订单编号为例,一般的制造业在采购时都会区分成品和原材料,或者叫成品和配件。希望在采购的时候,能分开计数,且每个月重置编号,例如这是我这个月的第一笔成品订单,那就是“CP-20201215-0001”,然后我又买了一笔配件订单,我希望他是“PJ-20201215-0001”,我们需要通过字段来组合需要的自定义编号。
问题剖析
我们可以先分析一下这个自定义编号,CP/PJ-年月日-自增编号。
一共有3部分,前缀、日期和自增编号。
1、前缀
这部分很简单,是成品和配件的英文首字母大写,我们通过单项选择配合IF函数就可以直接控制。
2、年月
这个就不说了,通过日期字段配合CONCAT来实现即可。
3、自增编号
我们可以通过数据关联字段来完成。
当我们分别处理了这3个部分后,用CONCAT组合一下就可以了。
解决方案

1、前缀:
1.设置采购类型
【采购类型】:单项选择

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

2、年月日
1.设置日期字段
【采购日期】:日期-设置公式

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

3、自增编号
我们先来看最简单的自增编号如何实现
1.设置数据关联字段获取当前最新编号
【当前最新编号】:数据关联-聚合方式“最新数据”
关联「自定义编号」应用(即当前应用本身)中的字段【自定义编号】,聚合获取最新的一条编号,聚合方式:最新数据

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”,即得到自增后的编号

4、按月重置编号
1.设置数据关联字段的筛选条件
公式中不同颜色的字段分别是目标应用字段(关联应用中的字段)和当前应用字段
筛选条件:采购日期的年月相同,且采购类型相同

5、完整公式
当还没有选择采购类型时:ISEMPTY(采购类型),先不显示编号,即返回空值:" "
选择了采购类型后,取当前最新编号右边的4位字符再+1:
CONCAT(IF(采购类型=="配件","PJ-","CP-"),TEXT(CURDATE(),"YYYYMMDD"),"-",
RIGHT(CONCAT("0000",NUM(RIGHT(当前最新编号,4))+1),4))
最后通过IF()函数将两种情况写在一起

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


5、拓展
1.设置提交/通过时重新触发数据关联或公式
申请人节点中开启“提交/通过时重新触发数据关联或公式”,选择需要重新触发的字段【当前最新编号】【自定义编号】
设置意义:当填写中提交前的过程中,如果有其他人员提交了表单,这时【当前最新编号】获取的编号不是最新的了,自定义编号也就会和其他数据的编号重复,所以需要在提交时重新触发再次获取最新的当前编号,计算出正确的自定义编号

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