3、替代料关系建模:一对一替代、一对多替代、多对多替代、替代优先级设定
各位工程师,咱们今天聊点硬核的——替代料关系建模。
说实话,我在ERP行业摸爬滚打十几年,见过太多企业在替代料上栽跟头。有的工厂,替代关系建得乱七八糟,结果生产时物料短缺,产线停摆。有的企业,明明有替代料却不会用,库存积压严重。嗯,这其实都是建模没做好。
替代料关系,说白了就是给物料找“备胎”。但备胎也有讲究——是只能换一个?还是能换多个?是只能被换?还是能互相换?这些关系,必须用数据模型说清楚。
3.1 一对一替代:最简单的“备胎”关系
一对一替代,就是A物料只能被B物料替代,B也只能替代A。这种关系在制造业里很常见,比如两种规格完全相同的电阻,只是供应商不同。
我记得在2018年,帮一家电子厂做ERP实施。他们有个电容,原厂供货不稳定,就找了个替代厂。当时我就建议他们建一对一替代关系。为什么?因为这两种电容,电气参数完全一致,只是品牌不同。用一对一,逻辑最清晰。
建模时,我习惯这样设计数据表:
-- 替代料关系表(一对一)
CREATE TABLE bom_substitute (
substitute_id INT PRIMARY KEY,
parent_item_id VARCHAR(20), -- 主料编码
child_item_id VARCHAR(20), -- 替代料编码
substitute_type VARCHAR(10), -- '1:1' 表示一对一
priority INT, -- 优先级
effective_date DATE, -- 生效日期
expiry_date DATE -- 失效日期
);
这里要注意:一对一关系,主料和替代料是双向的。也就是说,A替代B,B也能替代A。但实际业务中,有些企业只做单向替代——比如A缺货时用B,但B缺货时不能用A。这就要看业务规则了。
3.2 一对多替代:一个主料,多个备选
一对多替代,就是一个主料可以被多个替代料替换。这是最常用的模型。比如,你设计了一个10KΩ的电阻,但采购时发现,有3家供应商都能供货,只是价格和交期不同。
这时候,就需要设定替代优先级。优先级高的,系统会优先选用。
我在项目中遇到过一家汽车零部件厂,他们有个螺栓,有5个替代料。但优先级设得乱七八糟,结果系统总是选到最贵的那个。后来我帮他们重新梳理,按“成本最低→交期最短→库存最充足”的顺序排优先级,问题才解决。
一对多替代的建模,我建议这样:
-- 替代料关系表(一对多)
CREATE TABLE bom_substitute_multi (
id INT PRIMARY KEY,
main_item_id VARCHAR(20), -- 主料编码
alt_item_id VARCHAR(20), -- 替代料编码
priority_no INT, -- 优先级序号(1最高)
alt_ratio DECIMAL(5,2), -- 替代比例(如1:1.2)
min_stock_qty DECIMAL(10,2), -- 最低库存触发量
status VARCHAR(10) -- 'active' / 'inactive'
);
3.3 多对多替代:复杂的网状关系
多对多替代,就是多个主料和多个替代料之间,可以互相替代。这种模型最复杂,也最容易出错。
举个例子:你有A、B、C三种芯片,它们功能相似,但引脚定义略有不同。A可以替代B和C,B可以替代A和C,C只能替代A。这就是典型的多对多关系。
说实话,多对多替代在ERP里实现起来挺麻烦的。我见过一些企业,用“替代组”的方式来解决。就是把所有能互相替代的物料,归到一个组里。然后系统在组内自动匹配。
建模时,我习惯用两张表:
-- 替代组表
CREATE TABLE substitute_group (
group_id INT PRIMARY KEY,
group_name VARCHAR(50),
group_type VARCHAR(10), -- 'M:N' 多对多
create_date DATE
);
-- 组内物料关系表
CREATE TABLE substitute_group_item (
id INT PRIMARY KEY,
group_id INT,
item_id VARCHAR(20),
is_primary CHAR(1), -- 'Y' 主料, 'N' 替代料
priority INT,
FOREIGN KEY (group_id) REFERENCES substitute_group(group_id)
);
3.4 替代优先级设定:谁先上?
替代优先级,是替代料管理的灵魂。优先级设不好,替代料就是摆设。
我建议从这几个维度来设定优先级:
| 维度 | 说明 | 权重建议 |
|---|---|---|
| 成本 | 替代料的采购单价 | 40% |
| 交期 | 供应商的供货周期 | 30% |
| 库存 | 当前可用库存量 | 20% |
| 质量 | 历史不良率 | 10% |
当然,这只是参考。实际项目中,我会根据企业情况调整。比如,有些企业更看重交期,那交期的权重就要提高。
优先级设定还有一个细节:动态调整。我建议系统每天自动跑一次优先级计算,根据最新的成本、库存、交期数据,重新排序。这样,替代料才能真正“活”起来。
3.5 知识体系总览
下面这张图,是我梳理的替代料关系建模的核心逻辑。你一看就明白了:
你想想看,替代料关系建模,说白了就是给物料管理系统画一张“关系网”。一对一最简单,一对多最常用,多对多最灵活但也最危险。优先级设定,则是这张网的“指挥棒”。
嗯,这里要注意:不管用哪种模型,数据一致性永远是第一位的。我见过太多企业,模型建得花里胡哨,但基础数据一塌糊涂。替代料编码不规范、生效日期不维护、优先级乱设……最后系统跑出来的结果,谁都不敢信。
所以,我的建议是:先从最简单的模型开始。如果业务确实需要多对多,那就先把替代组的概念搞清楚,再动手建表。别一上来就想搞大而全,容易翻车。