大家好,我是十三~
导言:为什么需要SPU和SKU?
你一定在电商平台上买过东西。当你打开某个商品页面,比如"iPhone 17 Pro"时,你会发现页面下方有多个选项:
- 颜色:银色、深空黑、原色钛金属、蓝色钛金属
- 存储容量:256GB、512GB、1TB
当你选择了"银色 256GB"后,系统会告诉你:这个规格有货,价格是8999元。但如果你选择"深空黑 1TB",价格就变成了11999元。
你有没有想过,为什么同一个"iPhone 17 Pro",会有这么多不同的价格和库存状态?系统是如何区分这些"看起来一样,但实际不同"的商品的?
这就是我们今天要探讨的核心概念:SPU 和 SKU。它们是商品管理的基础,也是理解整个库存系统的前提。
SPU:标准产品单元——商品的"身份证"
SPU (Standard Product Unit) ,即"标准产品单元",你可以把它理解成商品的"产品模板"。
业务定义:SPU是一组具有相同基本属性、规格的商品集合。它描述的是"什么产品",而不是"具体哪个"。
通俗理解:SPU就像是一个"产品族"。例如,"iPhone 17 Pro"就是一个SPU,它定义了产品的基本信息:品牌是Apple,型号是iPhone 17 Pro,属于智能手机类别。
SPU的核心属性:
| 属性 | 通俗理解 | 示例 |
|---|---|---|
| 产品名称 | 这个产品叫什么 | "iPhone 17 Pro" |
| 品牌 | 属于什么品牌 | "Apple" |
| 产品类别 | 属于什么类型 | "智能手机" |
| 产品描述 | 产品基本介绍 | "6.1英寸超视网膜XDR显示屏..." |
| 产品图片 | 展示图片 | 主图、详情图等 |
系统体现:在ERP系统中,SPU通常作为商品主数据存在。它不直接参与库存管理,而是作为商品分类和展示的基础。
SKU:库存单位——库存管理的"最小单元"
如果说SPU是"产品族",那么 SKU (Stock Keeping Unit) 就是"具体商品"。
业务定义:SKU是库存单位,是库存管理的最小单元。它是在SPU基础上,通过不同属性组合形成的具体商品。每个SKU都有唯一的编码。
通俗理解:SKU是"可以单独管理库存的具体商品"。例如,"iPhone 17 Pro 银色 256GB"就是一个SKU,它是"iPhone 17 Pro"这个SPU的一个具体规格。
SKU的核心属性:
| 属性 | 通俗理解 | 示例 |
|---|---|---|
| SKU编码 | 唯一标识,就像商品ID | "IPHONE17PRO-SILVER-256" |
| 所属SPU | 属于哪个产品族 | "iPhone 17 Pro" |
| 规格属性 | 颜色、尺寸、容量等 | 颜色:银色,容量:256GB |
| 库存数量 | 当前有多少库存 | 50台 |
| 成本价格 | 采购成本是多少 | 8000元/台 |
| 销售价格 | 售价是多少 | 8999元/台 |
系统体现:在ERP系统中,所有的库存操作(入库、出库、盘点)都是基于SKU进行的。系统会为每个SKU单独记录库存数量、成本、价格等信息。
SPU与SKU的关系:一对多
关系模型:一个SPU可以对应多个SKU,但一个SKU只能属于一个SPU。
举个例子:
假设"iPhone 17 Pro"是一个SPU,那么它可能对应以下SKU:
- "iPhone 17 Pro 银色 256GB"(SKU编码:IPHONE17PRO-SILVER-256)
- "iPhone 17 Pro 银色 512GB"(SKU编码:IPHONE17PRO-SILVER-512)
- "iPhone 17 Pro 深空黑 256GB"(SKU编码:IPHONE17PRO-BLACK-256)
- "iPhone 17 Pro 深空黑 512GB"(SKU编码:IPHONE17PRO-BLACK-512)
- "iPhone 17 Pro 原色钛金属 1TB"(SKU编码:IPHONE17PRO-TITANIUM-1TB)
- ...(更多规格组合)
为什么需要这种设计?
- 库存管理精确化:不同规格的商品,库存是独立的,不能混用。你不能把"银色256GB"的库存,用来满足"深空黑512GB"的订单。
- 定价灵活性:不同SKU可以有不同的价格。256GB版本可能卖8999元,而1TB版本可能卖11999元。
- 销售统计:你可以统计SPU级别的销售数据(所有规格的总和),也可以统计SKU级别的数据(具体哪个规格卖得好)。比如,你可以知道"iPhone 17 Pro"这个SPU总共卖了多少台,也可以知道"银色256GB"这个SKU卖了多少台。
在采购和库存中的应用
理解了SPU和SKU的概念后,我们来看看它们在实际业务中是如何应用的。
采购订单中的SKU
在创建采购订单时,你必须明确到SKU级别,不能只写"iPhone 17 Pro"。
错误示例:
采购订单:
- 商品:iPhone 17 Pro
- 数量:100台
正确示例:
采购订单:
- SKU:IPHONE17PRO-SILVER-256(iPhone 17 Pro 银色 256GB)
- 数量:50台
- 单价:8000元/台
- SKU:IPHONE17PRO-BLACK-512(iPhone 17 Pro 深空黑 512GB)
- 数量:50台
- 单价:9500元/台
为什么必须明确到SKU?因为不同SKU的成本、价格、库存都是独立的,系统需要精确管理。
库存管理中的SKU
所有库存操作(入库、出库、盘点)都基于SKU进行。
入库时:
入库单:
- SKU:IPHONE17PRO-SILVER-256
- 入库数量:50台
- 系统自动更新:该SKU的物理库存从0增加到50
出库时:
出库单:
- SKU:IPHONE17PRO-SILVER-256
- 出库数量:10台
- 系统自动更新:该SKU的物理库存从50减少到40
库存查询:
查询结果:
- SPU:iPhone 17 Pro
- SKU:IPHONE17PRO-SILVER-256,库存:40台
- SKU:IPHONE17PRO-SILVER-512,库存:30台
- SKU:IPHONE17PRO-BLACK-256,库存:20台
- ...
- SPU总库存:90台(所有SKU库存之和)
三单匹配中的SKU
还记得我们在第三篇文章中提到的"三单匹配"吗?在发票校验时,必须确保PO、入库单、发票中的SKU完全一致。
匹配逻辑:
| 匹配项 | 采购订单 (PO) | 入库单 (GRN) | 供应商发票 (Invoice) | 是否匹配 |
|---|---|---|---|---|
| SKU | IPHONE17PRO-SILVER-256 | IPHONE17PRO-SILVER-256 | IPHONE17PRO-SILVER-256 | ✅ 匹配 |
| 数量 | 50台 | 50台 | 50台 | ✅ 匹配 |
| 单价 | 8000元/台 | - | 8000元/台 | ✅ 匹配 |
如果SKU不一致,比如PO是"银色256GB",但发票是"深空黑512GB",系统会立即报错,拒绝通过校验。
SPU与SKU的关系图示
为了更好地理解SPU和SKU的关系,我们可以用一个简单的图示来表示:
graph TD;
A[SPU: iPhone 17 Pro] --> B[SKU: 银色 256GB];
A --> C[SKU: 银色 512GB];
A --> D[SKU: 深空黑 256GB];
A --> E[SKU: 深空黑 512GB];
A --> F[SKU: 原色钛金属 1TB];
B --> G[库存: 40台];
C --> H[库存: 30台];
D --> I[库存: 20台];
这个图示清晰地展示了:一个SPU(iPhone 17 Pro)可以对应多个SKU(不同的颜色和容量组合),而每个SKU都有自己独立的库存数量。
总结:商品管理的基石
商品管理的两个核心概念:
- SPU(标准产品单元):是"产品族",用于产品展示和分类。它定义了产品的基本信息,但不直接参与库存管理。
- SKU(库存单位):是"具体商品",是库存管理的最小单元。所有的库存操作、采购订单、销售订单都必须明确到SKU级别。
它们的关系:一个SPU可以对应多个SKU,但一个SKU只能属于一个SPU。这种设计让系统既能从宏观层面管理产品(SPU级别),也能从微观层面精确管理库存(SKU级别)。
理解SPU和SKU,是理解整个商品管理体系的基础。无论是采购、销售,还是库存管理,都离不开这两个概念。
👨💻 关于十三Tech
资深服务端研发工程师、架构师、AI 编程实践者。
专注分享真实的技术实践经验,相信 AI 是程序员的最佳搭档。
希望能和大家一起写出更优雅的代码!