写好ERP软件需求规格说明书:聚焦流程、单据与状态机
简介这是一份2021年产品需求模板系列中的ERP系统软件需求规格说明书文档面向需求分析师、产品经理、ERP实施顾问及项目管理者提供可直接套用的需求文档编写框架。内容按规范目录组织涵盖编写目的、适用范围、系统综述、总体功能需求、明细功能需求等章节并重点示例了产品档案管理、产品物料组成设计等核心业务模块帮助读者快速梳理系统建设背景、用户角色、与其他系统的关系及功能优先级。资源为单份doc文档227KB便于下载后按项目实际情况修改扩展。已有298人学习下载适合在ERP项目调研、蓝图设计或需求评审阶段作为标准化参考模板能有效减少文档结构遗漏提升需求沟通效率。1. ERP软件需求规格书难写的不是页面而是单据背后的流程约定做产品需求模板的人很多能把 ERP 系统软件需求规格说明书写到开发团队敢按它排期的人很少。网上下到的模板结构都差不多先列模块再写页面功能最后补一句“权限灵活配置”。看着完整需求评审会上却常被同一个问题卡住采购入库单被驳回了下一步要回到什么状态审批链路要重走还是只补签文档里找不到答案。ERP 系统的难点从来不是界面而是多部门协同、单据状态闭环、账实一致这些流程契约。这篇文章顺着这类模板最常见的组织方式把 ERP 需求规格书写细落到能开发、能评审、能验收的程度适合正在写 ERP 需求的产品经理、系统分析师和 ERP 实施顾问对照着用。2. 先切核桃ERP 系统业务流程里的模块、单据与主数据2.1 模块清单解决不了 ERP 系统业务流程的跨部门协作打开网上一份“2021 最新产品需求模板系列-ERP系统软件需求规格说明书.doc”你会发现它大概率按“采购管理、销售管理、库存管理、财务管理、基础资料”这样的模块树组织。模块是系统的功能分区可 ERP 系统业务流程从来不是顺着模块走的。真实业务是跨部门的采购订单由采购员创建收货单由仓库人员录入入库数据要参与财务应付暂估。如果规格书只写“库存模块有哪些功能”开发看到的是菜单列表测试看到的是页面集合业务看到的是自己那一段操作三个角色对整条流程的理解永远不会对齐。我一般拿到模板后先不改结构而是把模板里的模块当作索引单独做一份流程清单。流程清单以“组织角色 业务动作”为起点覆盖采购到付款、销售到收款、生产领料到完工入库、库存盘点与调整、资产调拨这几条主干链路。每条链路从第一张单据开始标记出触发动作、下游单据、财务凭证和例外分支。这一步做完模板里哪些功能该写、哪些要拆、哪些根本不需要才真正清楚。2.2 把库存模块拆成“单据 状态 规则”三层以库存模块为例别急着描述“入库管理”这个页面。先把“入库”这件事拆成一张一张有名字的单据给每张单据定义状态集合再把状态之间的流转条件写清楚。库存模块常见单据包括采购收货单、生产入库单、调拨单、盘盈盘亏单、库存调整单。每张单据都对应一个业务事件事件发生后才允许修改库存余额。单据触发场景过账条件下游结果采购收货单采购订单到货有已确认的采购订单且到货数量不超过剩余可收数量生成库存流水更新可用库存创建应付暂估数据调拨单仓库间移库调出仓库库存充足且单据已审核生成调出/调入两条库存流水盘点调整单盘点差异处理差异数量经审批通过更新库存余额并生成差异明细表这份表格可以继续扩展比如采购收货单的状态定义为“草稿、已过账、已冲销”盘点单的状态定义为“草稿、待审核、已过账”。状态定义完成后“这条记录能不能修改删除”就不用再单独描述直接看状态即可。把单据之间的依赖关系写进文档附录开发建表时才知道哪张表先写、哪些字段是外键。下面是我在整理需求时常用的结构化写法可以用 YAML 放在规格书附录里inventory: docs: - code: GRN name: 采购收货单 statuses: [DRAFT, POSTED, REVERSED] rules: - code: GRN-001 condition: 收货数量 采购订单剩余可收数量 action: 阻止过账并提示超收 - code: GRN-002 condition: 订单状态已确认 且 累计收货量0 action: 允许部分收货订单状态变更为执行中这里的GRN-001是规则编号后续需求条目、测试用例都靠它建立引用condition写触发条件action写系统行为。把规格从自然语言升级成结构化规则后后端实现可以直接对着写校验逻辑测试也能照着构造用例这是从“能读”到“能干”的分水岭。2.3 主数据定义不清ERP 实施阶段全部翻工单据之外规格书里必须单独为“主数据”安排一节。物料档案、供应商档案、客户档案、仓库档案、计量单位、会计科目这些都是单据上反复被引用的基础信息但很多模板只在基础资料模块里放一句“维护主数据档案”根本没有编码规则和归属部门的约定。正规做法是把每个主数据对象拆成四个问题谁负责创建、哪个岗位审核、编码规则是什么、哪些字段必填且不可修改。以物料档案为例物料编码规则可以定为“大类 2 位 中类 2 位 流水号 4 位”例如01-03-0021编码生成后不允许修改物料状态包含“启用、停用、淘汰”停用物料不能用于新单据但历史单据仍然可以正常查询。供应商档案要定义“是否允许一客多地址”“同一供应商重复建档如何校验”“税号与采购订单开票抬头是否强制一致”。这些内容不写ERP 实施时做基础数据导入会先乱一阵系统上线几个月后大概率还会回来补主数据规范。3. 把需求条目写到“开发不追问”字段规格、业务规则与状态机3.1 字段定义表不能只写字段名和类型模板里最常出现的字段表列个字段名、类型、必填就结束。真正到开发手里他会继续追问默认值从哪来什么情况下可修改校验规则是什么以采购收货单为例一份可以开发的字段规格至少应该包括下面这几列字段名类型/长度必填默认值校验规则单据编号字符串(20)是系统自动生成全局唯一生成后不可修改入库日期日期是系统当前日期不允许早于采购订单创建日期仓库参照仓库档案是无只能选择当前用户有数据权限的仓库供应商参照供应商档案是来自采购订单必须与采购订单供应商一致不允许修改物料参照物料档案是来自采购订单必须在采购订单明细中且物料状态为“启用”数量数值(12,2)是0大于0且小于等于该行关联订单的剩余可收数量备注字符串(255)否空不允许输入 HTML 标签长度按字符数校验字段表写到这里开发不会再问“数量能不能填负数”测试也知道了输入框要做的边界值用例。表格后面建议附一句说明凡是带“参照”二字的数据类型表示必须通过选择而不是手工输入这一条规则直接约束页面交互设计。3.2 业务规则要绑定角色、组织和例外场景有人常问“vue 能做 erp 管理系统么”答案当然是可以前端技术栈根本不是 ERP 系统的复杂度所在。同样是入库单前后端都写好了业务规则却可能让两个开发写出完全不同的判断逻辑。比如“金额超过五万走财务审批”听上去清楚实际上问题很多金额是含税还是未税审批口径按单据头还是按明细行累计供应商是老客户能不能豁免正确写法是把规则绑定到具体条件上当收货单的含税金额合计大于等于 50 万时库存主管审核通过后自动进入财务经理审批节点单张明细行金额超过 20 万时无论合计金额多少都要走财务审批已启用的供应商且账期在 60 天以内可以跳过财务经理审批。这三条同时存在时系统应当先判断明细行条件再判断单据合计条件两者的结果取“要求更严格”的那一条。需求文档里把这层优先级写明开发才知道 if 语句怎么嵌套。审批之外异常场景也同样重要。典型例子是紧急采购物料已经送达生产现场但采购订单还在审批流中。如果规格书里只写了“先收货后补单”没有说数量超收了怎么办、补单期限是多久、过账以哪个时点的价格为准后面系统上线就是隐患。这类规则建议用同样的条目格式维护每条由编码、场景、前置条件、动作组成。3.3 状态机要写清楚“什么条件下从 A 状态到 B 状态”单据状态机是 ERP 规格书里最容易看出水平的板块。新手写状态机写“状态有草稿、待审核、已确认”算一份。合格的状态机要列出引起状态迁移的操作和前置条件。拿采购订单来举例当前状态操作结果状态条件草稿提交审核待审核全部必填项已填至少存在一条明细待审核审核通过已确认满足审批流配置的金额和部门条件待审核驳回草稿必须填写驳回原因已确认部分收货执行中至少一条明细产生已过账收货单执行中全部收货已完成所有明细行的累计收货数量等于订单数量已确认变更申请变更中变更单已提交变更后重新走审批写到这里再补充三条例外分支已完成的订单不允许直接修改数量但允许新增退货单冲减已确认的订单如果要修改价格必须创建变更单并保留历史版本被驳回的订单重新提交时审批流不可重复触发同层级审批。这些分支的存在与否恰恰是评审会上开发愿意认真看文档的关键。3.4 给每条规则一个编号让文档可追溯字段表、业务规则、状态机都写完后需要把所有条目编上号。编号规则建议按模块加单据加序号的方式定义例如PO-ORD-001表示采购订单的第一条规则。这个编号从规格书一直贯穿到开发任务拆分、测试用例设计和验收矩阵。没有编号的文档业务人员写起来轻松开发和测试使用起来很痛苦。编号体系是需求由描述变成“契约”的必要条件。4. 容易在评审中被漏掉的模块并发性能、数据权限与审计日志4.1 性能指标不是“系统要流畅”而是具体数字ERP 实施项目很少有真正的互联网高并发场景慢点不在 QPS而在于复杂查询与月末结账这类重操作。规格书里如果只写“系统响应要快”开发会按直觉做验收时更多是靠主观感觉。正确做法是直接把性能指标落到表格里场景数据量规模绩效指标打开库存余额表库存余额记录 30 万行页面首屏加载不超过 3 秒查询未审核入库单表数据量 50 万行检索返回不超过 2 秒月末结账当月单据流水 10 万行全过程不超过 5 分钟导出采购明细导出结果 5 万行触发导出后 2 分钟内生成文件这些数值既不极端也足以让开发在表结构设计、索引规划和分页方案上提前做功课。传统商业套件经常被抱怨月末结账十几分钟V3II 那一代产品在老旧数据库上尤其明显原因就是需求阶段没有约定数据量增长后的性能边界。文档里写明“库存余额表超过 100 万行时顶部汇总行仍要在 5 秒内完成”比一句“性能要优”有用得多。4.2 权限模型拆成菜单、操作、数据三层ERP 的权限体系写深了就是一个单独的需求模块。很多规格书只有一层“角色-菜单”对应关系结果上线后销售员进系统能看到全公司订单仓库主管还能改财务科目。完整权限需求至少拆成三层权限层级控制的粒度规格书里要写什么菜单权限用户能进入哪些功能界面角色与菜单目录的对应关系操作权限界面上能点哪些按钮新增、修改、删除、审核、冲销、导出都要单独授权数据权限能看到哪些行的数据按组织、仓库、业务员三个维度限制查询范围数据权限是大多数模板最薄弱的部分。写业务规则时只写“部门主管只能看本部门单据”是不够的还要补充跨部门场景调拨单的创建组织在 A 仓目标仓库在 B 仓A 仓主管和 B 仓主管谁能看到这张单据谁能执行入库确认。数据权限的适用范围也得分清是单据头级限制还是到单据明细行级两者实现成本完全不同。4.3 审计日志要能回答“谁在什么时点改了什么字段”ERP 单据涉及财务数据审计日志不能只写“操作人、操作时间、操作类型”。财务和风控会追问修改前的单价是多少修改后的单价是多少谁批准了这次变更上一个审批节点是谁。因此审计日志需求要落到记录粒度每次新增、修改、审核、驳回、冲销都需要记录操作前值、操作后值和触发该操作的数据来源。审计日志的存储目前常见做法是单独建表结构上保留单据类型、单据号、操作人、操作时间、动作类型、关键字段变更明细。按这种模型查询某张全单的变更历史SQL 大致长这样SELECT operation_id, create_time, operator_id, action_type, from_status, to_status, field_name, old_value, new_value FROM sys_audit_log WHERE doc_type PO AND doc_no PO202506001 ORDER BY create_time, operation_id;这段查询的核心是doc_type doc_no的组合条件它把审计记录定位到具体单据action_type区分新建、审核、驳回、冲销field_name old_value new_value提供字段级差异追踪。日志表建议按单据类型做分区否则上线三年后全表扫描的性能问题会反噬审计查询本身。5. 用可追溯验收矩阵给 ERP 软件需求规格说明书收尾5.1 每条需求都有对应的验收操作规格书写到可以开发还差最后一道工序把每条规则映射成验收场景。许多项目直到测试阶段才发现需求条目没有对应用例只能靠测试人员自己猜。规格书本身就应该携带验收矩阵每个编号的需求至少对应一条验收操作和一条预期结果把验收工作从“测试要自己想”变成“对着文档执行”。需求编号需求描述验收操作预期结果PO-ORD-001采购订单提交时必须有明细新建订单不填明细直接点提交提示“至少存在一条明细”单子留在草稿状态PO-ORD-002数量超过剩余可收数量时阻止过账对一张已完成订单重复执行收货提示超收过账按钮不可用INV-GRN-001仓库只能选有数据权限的仓库用 A 仓管账号新建收货单切换仓库到 B 仓下拉选项只显示当前账号有权操作的仓库AUD-LOG-001修改单价必须留痕修改采购订单单价并提交审批审计查询能看到修改前后价格及操作人5.2 评审会前按这份清单过一遍再发发出去之前把文档再整体过一遍重点检查五件事每个模块是否都有单据清单每张单据是否都有状态机每条状态迁移是否写明了触发条件和例外分支每条规则是否绑定了角色或组织每条规则是否都能找到验收矩阵中的对应项。有一项对不上就到评审会现场补不要带着“先发出去回头再改”的预期因为一个连状态都定义不完整的文档开发和 ERP 实施顾问拿到手里也不可能给你一个准确工期。把验收矩阵作为规格书的一部分随文档发出让业务方在评审会上对验收条件做书面确认这份 ERP 软件需求规格说明书才算真正闭环。本文还有配套的精品资源点击获取