3. 批次编号自动生成规则配置

在食品ERP中,原料批次号是贯穿采购收货、检验放行、生产领用、成品追溯全过程的唯一标识。手工录入批次号不仅效率低,更常见的问题是格式不统一、重号、日期写错,导致后续追溯断链。因此,批次编号自动生成规则的核心目标只有两个:唯一性(系统内绝不重复)与可读性(人眼能快速读出日期、物料、来源等信息)。本节围绕如何设计并配置这套规则展开,并给出可直接参考的配置样例与测试用例。

一、批次号的结构设计

一个实用的批次号通常由若干“段”拼接而成,每段承担不同语义。常见分段包括:固定前缀、物料或品类代码、日期段、来源/供应商标识、流水序列号。设计时先确定分段顺序,再确定每段的取值来源与长度。

以某乳品企业原料批次为例,采用如下结构:

RM-{物料类别码}-{YYYYMMDD}-{供应商简码}-{流水号4位}
示例:RM-DRY-20250312-SUP01-0007

其中 RM 表示原料(Raw Material),DRY 为奶粉类类别码,日期段取收货日期,SUP01 为供应商简码,末段为当日该供应商该类别下的顺序号。这样一段批次号,仓管人员一眼即可判断“这是2025年3月12日从SUP01进的奶粉类原料,当天第7批”。

二、各段参数的配置要点

前缀段建议按业务大类区分,如原料RM、包材PK、半成品SF、成品FG,便于跨模块检索。前缀不宜过长,2~4位字符足够。

日期格式推荐 YYYYMMDD 八位定长格式。不要使用 YYMMDD,因为跨世纪或跨十年时会产生歧义;也不建议用 YYYY-MM-DD 带分隔符,虽然可读但占用长度且不利于按字符串排序。若企业存在跨时区收货,需明确日期取“收货单据的业务日期”而非服务器系统时间,避免同一批货在不同时区生成不同日期段。

序列号长度是关键参数。长度过短会在业务高峰日溢出,过长则浪费可读性。确定方法:统计历史单日最大批次生成量,向上取整到10的幂次再留一倍余量。例如某企业单日某类别最多生成约320批,则4位序列号(最大9999)完全够用;若单日峰值可能超过9000,则应升为5位。序列号必须按“日期段+类别+供应商”维度独立计数并每日归零,而不是全局连续,否则号码会迅速膨胀且失去“当日第几批”的可读含义。

供应商简码需在供应商主数据中维护一个2~6位的唯一简码字段,生成规则引用该字段而非供应商全称,避免批次号过长或含特殊字符。

配置原则:所有分段必须定长或可定界,拼接后总长度建议控制在20~28位之间。超过30位后,标签打印、扫码枪识读和人工核对都会明显吃力。

三、唯一性保障机制

仅靠“日期+流水号”在理论上仍可能重复,例如规则修改后新旧规则生成的号码碰撞,或并发收货时序列号取号冲突。工程上需三重保障:其一,在数据库中为批次号字段建立唯一索引,作为最后防线;其二,取号时使用数据库序列或加锁的计数表,保证并发下不重号;其三,规则变更时保留历史规则版本,新规则启用后从新序列起点开始,避免与旧号段交叉。

下图展示了批次号从取号到落库的生成链路与唯一性校验位置:

批次号自动生成链路与唯一性校验 收货单据 物料/供应商/日期 规则引擎 前缀+类别码 +YYYYMMDD +供应商简码 序列号取号 按 日期+类别+供应商 独立计数,每日归零 加锁/序列保证并发 拼接成号 RM-DRY-20250312 -SUP01-0007 唯一性校验(落库前) ① 数据库唯一索引 ② 取号锁 ③ 规则版本隔离 冲突则回滚并重新取号 批次号写入批次主表 状态:待检 → 可追溯至收货单、供应商、检验记录 规则版本管理 V1 旧规则号段封存 V2 新规则从新起点

四、不同业务场景下的生成逻辑测试

规则配置完成后必须做场景化测试,重点验证边界与异常。以下测试用例表可直接用于UAT阶段,参数为示例假设值:

场景 输入条件 预期生成结果 验证要点
常规收货 奶粉类,SUP01,2025-03-12,当日第1批 RM-DRY-20250312-SUP01-0001 各段拼接正确、定长
同日同供应商连续收货 同上,再收3批 …-0002、0003、0004 序列号递增不跳号
跨日归零 2025-03-13 首批 RM-DRY-20250313-SUP01-0001 日期段更新、序列归零
不同供应商隔离 同日 SUP02 首批 RM-DRY-20250312-SUP02-0001 计数维度独立
并发收货 两单据同时提交 两个不同序列号 无重号、无阻塞超时
序列号溢出 当日第10000批(4位) 系统告警并拒绝或自动升位 溢出策略明确
规则版本切换 启用V2新前缀 新号段不与V1历史号重复 历史批次仍可查

测试时特别关注两个易错点。第一是并发取号:若采用“先查询当日最大号再加1”的实现方式,两笔并发收货可能读到同一个最大值,生成重复号。正确做法是使用数据库序列、行锁或原子自增计数表。第二是序列号溢出:必须预先定义溢出行为——是直接报错阻断收货,还是自动扩展位数。食品企业通常选择“报错并提示联系管理员”,因为静默升位会破坏定长规则,影响下游标签模板和扫码解析。

五、可读性与运维约定

规则上线后应形成书面约定并纳入主数据管理制度:前缀与类别码对照表由质量部维护;供应商简码在供应商准入时同步分配;日期段统一取业务日期;序列号计数维度一经确定不得随意变更。规则修改须走变更审批,旧规则版本封存,新版本明确生效日期与起始序列。这样,批次号不仅是一串自动生成的字符,更是可审计、可追溯、可运维的质量数据资产。

注意:批次号一旦生成并关联检验记录、领料记录后,原则上不允许修改。若确需更正,应作废原批次并生成新批次,保留作废原因与操作日志,确保追溯链完整。