自动编号
本章介绍自动编号的格式配置、发号时机、号位的分配与回收规则。
单据号、订单号一类"每条记录一个不重复编号"的需求,通过自动编号配置即可实现,无需编写公式。
1. 编号的组成
一个编号由多个段拼接而成:
| 段类型 | 作用 | 示例 |
|---|---|---|
| 固定文本段 | 不变的前缀或后缀 | BX- |
| 字段引用段 | 取当前单据某字段的值 | 部门代码 |
| 日期段 | 按当前日期生成,可设置到年、月或日 | 20260724 |
| 流水号段 | 自增数字,可设置补零位数 | 0001 |
组合后可得到形如 BX-20260724-0001 的编号。
日期段按服务器时钟取值,不随使用者所在时区变化,避免出现同一天生成不同日期段的情况。

固定文本、日期与四位流水号组成单号
2. 发号时机
| 时机 | 行为 |
|---|---|
| 打开表单时(默认) | 新建单据时立即生成编号并显示,使用者可当场看到单据号 |
| 保存时 | 点击保存后才生成编号。只打开查看而未保存的单据不占用号 |
明细表中的自动编号字段固定按"保存时发号"处理,无论配置为哪种时机——明细行本身随保存动作产生。

历史列表显示新采购单号、申请日期和自定义新增按钮
3. 号位的状态
每个号位在以下状态间流转:
| 状态 | 含义 |
|---|---|
| 预占 | 已分配给某次填写,尚未正式生效 |
| 已使用 | 单据已保存,该号永久属于这条记录 |
| 放弃 | 打开表单取号后未保存即关闭,号位退回待发放队列 |
| 作废 | 已保存的记录被删除后,其占用的号位转为此状态 |
作废的号默认不再发出,以免出现"某编号的单据被删除后又生成同一编号"的情况。
若业务确实需要回收,可将重用模式设置为允许回收作废号,此时作废号重新进入待发放队列。
4. 并发安全
多人同时新建单据时不会取到相同的号。系统在发号环节做了互斥保护,任意时刻只有一个请求能取得某个具体号位。
5. 自动编号与「唯一」是两回事
自动编号是取值方式,「唯一」是字段约束,两者独立配置。
| 情形 | 系统行为 |
|---|---|
| 字段留空保存 | 系统自动发号 |
| 手工填写一个编号 | 允许。填入的值若不是系统发出过的号,不做重复检查;该字段若另外勾选了「唯一」,则走通用的唯一性校验 |
| 手填的值恰好是系统发过的号 | 该号仍处于预占或作废状态时,直接认领给当前记录;已被其他记录正式使用时,提示编号冲突 |
| 历史记录的该字段原本为空 | 编辑保存时系统为其补号 |
发号时系统会跳过业务数据中已经出现过的相同编号,避免与手工填写的编号相撞。
6. 常见问题
| 问题 | 说明 |
|---|---|
| 希望编号从指定数字开始,或跳过旧编号 | 流水号段的起始值与位数在编号规则中配置 |
| 修改编号格式后旧编号会变吗 | 不会。格式变更只影响之后新生成的编号,历史单据上的编号保持不变 |
| 需要编号不重复 | 自动发出的号本身不重复。若同时允许手工填写并要求全局不重复,请另外勾选「唯一」 |
7. 相关章节
编号文本与明细序号
自动编号的值统一按文本处理,即使流水号段只包含数字,也不应把整段单据号当成可运算数值。主表自动编号与明细行内「序号」是不同功能:序号按当前有效明细行重新排列,不构成业务唯一编号。
规则涉及日期段时应核对执行人的时区及跨日边界。需要全局唯一时仍单独设置「唯一」,不能只依赖手工填写的编号规则。