进销存系统(Purchase-Sales-Stock)是企业 ERP 系统的核心模块,覆盖商品流通企业的全部业务流:采购进货 → 库存管理 → 销售出货 → 客户对账 → 收付款。本文基于行业实践,做一次完整业务架构 + 数据模型实战。
本文写于 2024 年 3 月——中小企业数字化加速,进销存 SaaS 进入红海。
一、7 大功能模块
1.1 业务总览
| |
1.2 各模块功能清单
基础数据:
- 数据字典(分类、计量单位、结算方式等)
- 商品信息(编码、名称、规格、价格、库存)
- 商业伙伴(客户、供应商、物流)
进货管理:
- 采购进货单(向供应商进货)
- 采购退货单(向供应商退货)
销货管理:
- 销售出货单(向客户销货)
- 销售退货单(客户退货)
库存管理:
- 商品库存查询(实时库存)
- 安全库存预警
- 库存盘点
财务管理:
- 供应商对账单
- 客户对账单
- 收付款单(应收应付)
- 其他费用单
统计报表:
- 进货明细表
- 进退货明细表
- 销货明细表
- 销退货明细表
系统管理:
- 角色管理
- 用户管理
- 部门管理
- 功能权限
- 参数配置
- 系统日志
二、7 大核心数据表
2.1 数据模型总览
| |
2.2 7 大表详细字段
表 1:商品信息(JxGoods)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 商品编码 | Code | Text | 50 | Y |
| 商品名称 | Name | Text | 200 | Y |
| 商品类别 | Category | Text | 50 | Y |
| 规格型号 | Model | Text | 500 | |
| 产地 | Producer | Text | 50 | |
| 计量单位 | Unit | Text | 50 | Y |
| 采购单价 | BuyPrice | Number | 18,2 | |
| 销售单价 | SalePrice | Number | 18,2 | |
| 安全库存 | SafeQty | Number | ||
| 备注 | Note | TextArea | ||
| 附件 | Files | Text | 500 |
设计要点:
- Code 必须唯一(业务主键)
- Category 用数据字典(避免硬编码)
- BuyPrice / SalePrice 单独字段而非关联价格表(简单场景)
- SafeQty 触发库存预警
表 2:商业伙伴信息(JxPartner)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 类型(客户/供应商/物流) | Type | Text | 50 | Y |
| 名称 | Name | Text | 100 | Y |
| 简称 | ShortName | Text | 50 | |
| 信用代码 | SccNo | Text | 50 | |
| 联系人 | Contact | Text | 50 | |
| 联系电话 | Phone | Text | 50 | |
| 联系地址 | Address | Text | 500 | |
| 开票地址 | InvAddress | Text | 500 | |
| 开票电话 | InvPhone | Text | 50 | |
| 开户银行 | Bank | Text | 100 | |
| 银行账号 | Account | Text | 100 | |
| 备注 | Note | TextArea | ||
| 附件 | Files | Text | 500 |
设计要点:
- Type 字段区分客户/供应商/物流(多类型合一表)
- 开票信息与联系信息分离(财务合规)
- 信用代码用于企业客户开票
表 3:业务单表头(JxBillHead)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 单据类型(进货/进退货/销货/销退货) | Type | Text | 50 | Y |
| 业务单号 | BillNo | Text | 50 | Y |
| 单证状态 | Status | Text | 50 | Y |
| 单证日期 | BillDate | Date | Y | |
| 商业伙伴 | Partner | Text | 100 | Y |
| 合同号 | ContractNo | Text | 50 | |
| 发票号 | InvoiceNo | Text | 50 | |
| 结算方式 | SettleMode | Text | 50 | Y |
| 总金额 | TotalAmount | Number | 18,2 | |
| 物流公司 | Logistics | Text | 100 | |
| 物流单号 | LogisticsNo | Text | 50 | |
| 物流费用 | LogisticsFee | Number | 18,2 | |
| 退货单号 | ReturnNo | Text | 50 | |
| 备注 | Note | TextArea | ||
| 附件 | Files | Text | 500 |
设计要点:
- Type 字段统一 4 种单据(进货 / 进退货 / 销货 / 销退货)
- Status 字段单据状态(草稿 / 已审核 / 已完成 / 已作废)
- ReturnNo 关联原单(退货单反查原单)
- Logistics 字段支持内嵌物流信息
表 4:业务单表体(JxBillList)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 表头 ID | HeadId | Text | 50 | Y |
| 序号 | SeqNo | Number | Y | |
| 商品编码 | Code | Text | 50 | Y |
| 商品名称 | Name | Text | 200 | Y |
| 商品类别 | Category | Text | 50 | Y |
| 规格型号 | Model | Text | 500 | |
| 产地 | Producer | Text | 50 | |
| 计量单位 | Unit | Text | 50 | Y |
| 数量 | Qty | Number | Y | |
| 单价 | Price | Number | 18,2 | |
| 金额 | Amount | Number | 18,2 | |
| 备注 | Note | TextArea |
设计要点:
- HeadId 关联表头(一对多)
- 冗余 Name / Category(避免 JOIN 商品表)
- Amount = Qty × Price(应用层计算 + 数据库 CHECK 约束)
表 5:对账单表头(JxAccountHead)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 单据类型(客户 / 供应商) | Type | Text | 50 | Y |
| 对账单号 | AccountNo | Text | 50 | Y |
| 单证状态 | Status | Text | 50 | Y |
| 对账日期 | AccountDate | Date | Y | |
| 商业伙伴 | Partner | Text | 100 | Y |
| 业务日期 | BizDates | Text | 100 | Y |
| 合同号 | ContractNo | Text | 50 | |
| 发票号 | InvoiceNo | Text | 50 | |
| 总金额 | TotalAmount | Number | 18,2 | |
| 备注 | Note | TextArea | ||
| 附件 | Files | Text | 500 |
设计要点:
- BizDates 用 Text 存(“2024-01-01~2024-01-31”)
- 总金额 = 各业务单据金额合计
表 6:对账单表体(JxAccountList)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 表头 ID | HeadId | Text | 50 | Y |
| 单据 ID | BillId | Text | 50 | Y |
设计要点:
- 极简表体:只存关联关系(多对多:一张对账单对应多张业务单据)
表 7:收付款单(JxPayment)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 单据类型(应收 / 应付) | Type | Text | 50 | Y |
| 单据编号 | PaymentNo | Text | 50 | Y |
| 单据状态 | Status | Text | 50 | Y |
| 单据日期 | PaymentDate | Date | Y | |
| 商业伙伴 | Partner | Text | 100 | Y |
| 单据来源(对账 / 新增) | Source | Text | 50 | Y |
| 总金额 | TotalAmount | Number | 18,2 | |
| 已收付金额 | PaidAmount | Number | 18,2 | |
| 剩余金额 | RemainAmount | Number | 18,2 | |
| 备注 | Note | TextArea | ||
| 附件 | Files | Text | 500 | |
| 记录 | Records | TextArea | ||
| 业务单据 ID | BizId | Text | 50 |
设计要点:
- RemainAmount = TotalAmount - PaidAmount(数据库 CHECK 约束)
- Records 字段记录每次收付款流水(JSON 数组)
- Source 字段区分"对账生成"vs"手动新增"
附表:其他费用信息(JxOtherFee)
| 名称 | 代码 | 类型 | 长度 | 必填 |
|---|---|---|---|---|
| 类型(收入 / 支出) | Type | Text | 50 | Y |
| 费用编号 | FeeNo | Text | 50 | Y |
| 单据状态 | Status | Text | 50 | Y |
| 发生金额 | Amount | Number | 18,2 | |
| 发生日期 | FeeDate | Date | Y | |
| 所属部门 | Department | Text | 50 | |
| 备注 | Note | TextArea | ||
| 附件 | Files | Text | 500 |
三、核心业务流程
3.1 采购流程
| |
关键业务规则:
- 进货单必须关联供应商
- 进货审核后库存才增加
- 退货单必须关联原进货单
- 对账单的金额 = 进货金额 - 退货金额
- 付款单有"已付/未付"两种状态
3.2 销售流程
| |
关键业务规则:
- 出货前必须检查库存(不允许负库存)
- 出货单必须关联客户
- 退货单必须关联原出货单
- 销售价不能低于进价(可选规则)
- 收款单按"已收/未收"管理
3.3 库存预警
| |
四、关键设计原则
4.1 表设计原则
- 主从分离:表头(Head)+ 表体(List)模式
- 类型字段:单据类型用 Type 字段区分(避免建 4 张表)
- 冗余字段:商品名称 / 类别冗余到表体(避免 JOIN)
- 审计字段:每张表都加 CreateBy / CreateTime / UpdateBy / UpdateTime
- 软删除:Status = ‘已作废’ 而非物理删除
4.2 业务规则原则
- 单据状态机:草稿 → 已审核 → 已完成 → 已作废
- 金额一致性:表头 TotalAmount = SUM(表体 Amount)
- 库存一致性:每次进出货都更新库存表
- 对账一致性:对账单金额 = 关联单据金额
- 收付款一致性:已付 + 剩余 = 总金额
五、扩展设计
5.1 水平扩展
- 多仓库:增加
Warehouse表 +BillHead增加WarehouseId - 多币种:增加
Currency字段 - 批次管理:增加
Batch表(生产日期 / 过期日期) - 序列号:增加
SerialNumber表(每件商品唯一标识)
5.2 性能优化
- 索引:Code(商品编码)、BillNo(业务单号)、Partner(商业伙伴)
- 分区:按 BillDate 分区(按月 / 按年)
- 归档:已完成超过 1 年的单据归档到历史表
5.3 集成扩展
- 财务系统:对接金蝶 / 用友,自动生成凭证
- 电商系统:对接淘宝 / 京东 / 拼多多,订单同步
- WMS 系统:对接仓储管理,自动同步库存
- CRM 系统:对接客户管理,关联销售机会
六、写在最后
进销存系统的本质是"单据驱动库存"——每张业务单据都触发一次库存变动,每张对账单都基于业务单据生成。
个人建议:
- 新项目起步:先做"商品 + 商业伙伴 + 业务单据"3 张表
- MVP 阶段:先做"进货 + 销货"两个核心流程
- 完整阶段:再补"对账 + 收付款 + 报表"
- 优化阶段:最后做"多仓库 / 多币种 / 批次管理"
- 参考开源:jxcsoft 是一套成熟的进销存参考实现
参考资料
2024+ 视角(进销存 SaaS 的 AI 化与多渠道融合)
2024 年 3 月的进销存架构在 2024-2026 年的几个关键演进:
- 云原生 SaaS 主导:
- 国内:用友 YonBuilder、金蝶云·星辰、管家婆云 ERP、柠檬云进销存、浪潮 GS Cloud 已成主流
- 国际:NetSuite、Odoo 18、SAP Business One Cloud 仍是大型企业首选
- 多租户架构(Multi-Tenant)是 SaaS ERP 的标配,租户隔离通过行级安全(RLS)+ 独立 Schema 实现
- 多渠道融合:
- 进销存从"线下 + 单一电商"升级为全渠道订单路由:
- 淘宝/天猫、京东、拼多多、抖音、快手、小红书、视频号
- 海外:Shopify、Amazon、eBay、Lazada、Shopee
- 订单中台(如管易云、万里牛、店小秘)聚合所有渠道订单,再分发到 WMS
- 进销存从"线下 + 单一电商"升级为全渠道订单路由:
- AI 选品 + 智能补货:
- AI 选品:基于历史销售 + 季节 + 趋势预测下季爆品
- 智能补货:基于安全库存 + 在途库存 + 销售预测,自动生成采购建议
- AI 需求预测(Prophet / LSTM / XGBoost)替代人工经验
- 金税四期 + 数电票合规:
- 金税四期(2022 起)全面落地,数电票(数字化电子发票) 取代传统税控发票
- ERP 系统必须直连税务系统(如航天信息、百望电子),自动开具数电票
- 进销存发票流(进项发票 → 销项发票)对账成为核心
- WMS + TMS 深度集成:
- WMS(仓储管理):PDA 扫码、电子标签、AGV 联动
- TMS(运输管理):路径优化、运费计算、在途追踪
- 进销存 ↔ WMS ↔ TMS 实时同步(MQ / CDC)
- 财务业务一体化:
- 业务单据自动生成会计凭证(金蝶 EAS Cloud、用友 NC Cloud)
- 银企直连(与银行系统对接,自动收付款)
- 电子档案(会计档案电子化,进销存发票、单据电子归档)
- 数据模型演进:
- 7 大表(商品/伙伴/单据/对账/收付款)的"主从分离 + 类型字段"思路依然成立
- 新增关键字段:
- 多租户字段(TenantId)—— SaaS 必备
- 多组织(OrgId)—— 集团多公司
- 币种 / 汇率(Currency、ExchangeRate)—— 跨境必备
- 批次 / 序列号(BatchNo、SerialNo)—— 食品/医药/3C 行业刚需
- 附件 OSS 化(Files → OSS Key)—— 不再存数据库
- 低代码 / SaaS 平台化:
- 金蝶云·苍穹、用友 BIP、钉钉宜搭、飞书多维表格 让中小企业用"低代码"自建进销存
- 简道云、明道云、氚云 等 aPaaS 平台让进销存二次开发零代码
- 数据中台 / BI 增强:
- 进销存数据进数据中台(阿里云 DataWorks、华为 DataArts)
- BI 工具(FineBI、PowerBI、Tableau、Quick BI)做销售分析、库存周转分析、毛利分析
- 毛利率分析(按商品 / 客户 / 渠道)成为管理者核心看板
- 行业垂直化:
- 医药行业(GSP 合规、批号追溯、冷链监控)
- 食品行业(FIFO、保质期、批次追溯)
- 服装行业(SKU 多、季节性、颜色尺码)
- 建材行业(长账期、批次价、计量单位复杂)
- 跨境电商(多币种、海外仓、退货逆向物流)
实战选型(2024-2026):
- 小型企业(< 50 人):金蝶云·星辰 / 管家婆云 / 简道云—— SaaS + 低代码
- 中型企业(50-500 人):用友 YonSuite / 金蝶云·星空 / 浪潮 GS Cloud
- 大型企业(> 500 人):用友 NC Cloud / 金蝶 EAS Cloud / SAP S/4HANA
- 跨境电商:店小秘 + 旺店通 + 海外仓 WMS
- 特殊行业(医药/食品/冷链):行业 SaaS(药师帮、餐道、九曳供应链等)
核心结论:2024 年这篇的"7 大表 + 7 大模块"骨架至今仍是进销存系统的最小完备设计——变化的是多租户、多渠道、AI 智能、合规(金税四期)、低代码、行业垂直化这 6 个方向。业务本质未变,技术栈与边界在持续扩张。
