主题
销售员-发货管理标准作业程序(SOP)
文档编号: BayesMES-SOP-SALES-003-V1.0
文档版本: V1.0
适用系统: BayesMES 制造执行系统
适用角色: 销售员、仓库操作员、发货协调员
适用终端: Web端 + App端
SOP类型: 双端协作SOP
角色类型: 双端协作
最后更新: 2026-04-29
下次评审: 2026-10-29
文档状态: 评审中
编制人: BayesMES团队
审核人: ysfl
批准人: 待批准
真实性核对说明
本文档依据《SOP编制标准》V2.2.0 编制,发货管理流程以当前 sales/shipments 后端接口、Shared 发货类型、Web 端发货创建页面,以及 App 端发货列表/详情/确认页面源码为准。当前真实流程是“Web 创建待发货单 -> App 执行确认发货 -> Web 或 App 确认签收/取消”,不采用旧文档中的 deliveries 接口定义。
目录
- 1. 名词术语表
- 2. 功能概述
- 3. 操作前准备
- 4. 创建发货单
- 5. 确认发货
- 6. 确认签收与取消
- 7. 状态与业务规则
- 8. 异常处理与应急措施
- 9. 常见问题解答(FAQ)
- 10. 源码与依据清单
- 11. 待确认问题清单
- 12. 关联文档
- 13. 截图清单
- 14. 快速参考卡
- 15. 版本记录
1. 名词术语表
| 术语 | 说明 |
|---|---|
| 发货单 | 销售订单的发货执行单据,单号前缀为 SHP |
| 待发货 | 发货单创建后的初始状态,尚未扣减库存 |
| 已发货 | 完成批次选择和库存扣减后的状态 |
| 已签收 | 人工确认客户收货后的状态 |
| MTO | 按单生产。可发货数量 = 已生产数量 - 已发货数量 |
| MTS | 库存销售。可发货数量 = 订单数量 - 已发货数量 |
| FIFO | 先进先出。系统按批次生产日期升序返回可用批次 |
2. 功能概述
2.1 功能说明
当前销售发货是跨销售与仓库协同流程,终端分工如下:
- 销售员在 Web 端从已确认销售订单创建发货单。
- 仓库或发货执行人员在 App 端查看待发货任务、选择批次并确认发货。
- 销售或发货协调人员在 Web 端或 App 端确认签收;如有异常,可取消发货单。
2.2 页面入口
| 页面 | 路由 | 说明 |
|---|---|---|
| 发货管理列表 | /sales/shipment | 查询、查看、创建发货单 |
| 创建发货单 | /sales/shipment/create | 选择销售订单并生成待发货单 |
| 发货单详情 | /sales/shipment/detail/:id | 查看发货记录、签收和取消 |
| App 发货列表 | /mes/pages/shipment/list/index | 仓库侧查看待发货任务 |
| App 发货详情 | /mes/pages/shipment/detail/index | 查看发货单详情并执行签收/取消 |
| App 确认发货 | /mes/pages/shipment/confirm/index | 扫码或手动选批次并扣减库存 |
2.3 覆盖范围
本SOP覆盖创建发货单、App 端确认发货、确认签收和取消发货单。仓库一线操作的简洁版说明仍可参考《仓库操作员-销售发货SOP》。
3. 操作前准备
3.1 权限要求
| 操作 | 权限标识 | 说明 |
|---|---|---|
| 查看发货单 | sales:shipment:view | 进入发货列表和详情 |
| 创建发货单 | sales:shipment:create | 打开创建页并保存待发货单 |
| 确认发货 | sales:shipment:confirm | 扣减库存并更新状态 |
| 确认签收 | sales:shipment:receive | 将状态更新为已签收 |
| 取消发货单 | sales:shipment:cancel | 取消待发货/已发货单据 |
3.2 前置条件
| 条件 | 要求 | 依据 |
|---|---|---|
| 销售订单已确认 | 创建页只加载状态为已确认的订单 | Web 创建页请求参数 status: 2 |
| 存在可发货数量 | 订单至少有一条 shippableQuantity > 0 的明细 | ShipmentService::getShippableItems() |
| 库存批次可用 | 确认发货时批次必须存在、未冻结、质量状态为合格、库存充足 | ShipmentService::processShipmentItem() |
| 物流信息准备好 | 发货方式、物流供应商、单号可录入 | 创建页和确认页字段 |
3.3 相关资料
| 资料 | 用途 |
|---|---|
| 已确认销售订单 | 作为发货源单 |
| 客户收货信息 | 核对收货人、联系电话、地址 |
| 物流安排 | 选择发货方式、物流供应商和单号 |
| 库存批次信息 | 确认可发货批次和数量 |
4. 创建发货单(Web端)
4.1 流程总览
4.2 步骤一:打开发货管理列表
操作路径:
销售管理 → 发货管理
(/sales/shipment)
列表页包含:
| 区域 | 说明 |
|---|---|
| 统计卡片 | 全部、待发货、已发货、已签收、已取消 |
| 搜索栏 | 关键词、状态、发货日期范围 |
| 工具栏 | 搜索、重置、字段设置、创建发货单 |
| 数据表格 | 查看发货单号、订单号、客户、状态、发货方式等 |
4.3 步骤二:点击“创建发货单”
- 在列表页点击“创建发货单”。
- 系统跳转到
/sales/shipment/create。 - 页面显示基本信息、收货信息、物流信息和发货明细区域。

图4-1 Web 创建发货单:已选择销售订单并自动带出待发货明细
4.4 步骤三:选择销售订单
- 在“销售订单”下拉框选择订单。
- 系统自动带出客户联系人电话和收货地址。
- 系统调用可发货接口,加载发货明细。
4.5 步骤四:确认发货模式和数量
系统根据订单明细的“需生产”标记,自动判断模式:
| 模式 | 触发条件 | 可发货数量规则 |
|---|---|---|
| MTO | 明细 needProductionPlan=true | 已生产数量 - 已发货数量 |
| MTS | 明细 needProductionPlan=false | 订单数量 - 已发货数量 |
页面会在发货明细头部显示当前模式标识,并为每个物料默认带出本次发货数量。
4.6 步骤五:填写基本和物流信息
| 页面字段 | 说明 |
|---|---|
| 计划发货日期 | 可选 |
| 收货人/联系电话/收货地址 | 选单后自动带出,可手工修改 |
| 发货方式 | 快递、物流、自提 |
| 物流供应商 | 可选,选择后自动带出快递公司名称 |
| 快递公司 | 可手工填写 |
| 物流单号 | 可选 |
| 运费 | 可选 |
| 备注 | 可选 |
当选择“自提”时,页面会自动清空物流供应商、快递公司、物流单号和运费。
4.7 步骤六:创建发货单
- 确认至少一条物料的“本次发货”数量大于 0。
- 点击“创建发货单”。
- 系统提示“发货单创建成功”,并返回列表页。
- 新发货单状态为「待发货」。
5. 确认发货(App端)
5.1 App入口与任务接收
App操作路径:
库存管理 → 发货管理
(/mes/pages/shipment/list/index)
当前 App 端“发货管理”挂在库存管理首页功能入口下,说明发货执行与仓库库存作业直接关联。
App 列表页支持:
| 功能 | 说明 |
|---|---|
| 统计卡片 | 待发货、已发货、已签收数量 |
| 状态筛选 | 全部、待发货、已发货、已签收 |
| 详情跳转 | 点击卡片进入发货单详情 |

图5-1 App 库存管理首页:发货管理入口位于库存业务功能区

图5-2 App 发货管理列表:可查看待发货单并直接进入确认发货
5.2 进入确认发货页
进入方式有两种:
- App 发货列表中,点击待发货单进入详情,再点击“确认发货”。
- App 发货详情页底部,对待发货记录点击“确认发货”。
当前 Web 端也有确认发货页,但 App 端实现了扫码选批次与库存作业交互,更符合仓库执行场景。
5.3 页面内容
确认发货页包含:
| 区域 | 内容 |
|---|---|
| 发货单信息 | 发货单号、销售订单、客户、收货人、联系电话、状态、收货地址 |
| 物流信息 | 发货方式、物流供应商、快递公司、物流单号、运费 |
| 发货明细 | 每个物料的计划数量、可选批次、实际数量 |
| 备注 | 发货备注 |

图5-3 App 待发货详情页:可查看发货单信息并进入确认发货
5.4 选择批次
- 每条物料必须在“选择批次”下拉框中选择一个批次。
- 下拉列表展示批次号和可用数量。
- App 支持扫码选择批次,也支持手动选择或手动输入批次号。
- 系统按生产日期升序返回批次,建议优先选靠前批次。
批次必须同时满足:
| 条件 | 说明 |
|---|---|
| 批次存在 | 物料和批次号能匹配到库存批次 |
| 库存大于 0 | available_quantity > 0 |
| 质量合格 | quality_status = QUALIFIED |
| 未冻结 | 冻结批次不能发货 |

图5-4 App 确认发货页:填写物流信息、调整数量并通过“扫码/选择”指定发货批次
5.5 填写实际数量并提交
- 实际数量默认等于计划数量。
- 页面限制实际数量不能大于计划数量。
- 点击“确认发货”。
- 系统校验所有物料已选批次,且实际数量大于 0。
- 提交成功后提示“发货确认成功,库存已扣减”,并返回列表页。
5.6 确认发货后的系统结果
| 项目 | 系统结果 |
|---|---|
| 发货单状态 | 待发货 → 已发货 |
| 发货时间 | 记录 actualShipDate |
| 发货人 | 记录 shippedBy |
| 库存 | 扣减对应批次库存 |
| 库存事务 | 生成 SALES_OUT 出库事务 |
| 销售订单明细 | 累加 shipped_quantity |
| 销售订单汇总 | 更新订单已发货数量;全部发完时订单状态变为已完成 |
6. 确认签收与取消
6.1 确认签收
适用状态:仅已发货。当前 Web 端和 App 端都支持确认签收。
操作步骤:
- 在 Web 发货列表/详情页,或 App 发货详情页,对已发货记录点击“确认签收”。
- 在弹窗中确认操作。
- 系统将状态更新为「已签收」。
6.2 取消发货单
适用状态:待发货、已发货。当前 Web 端和 App 端都支持取消。
操作步骤:
- 在 Web 列表/详情页或 App 详情页点击“取消”。
- 弹窗提示“已发货的订单将回退库存”。
- 确认后系统执行取消。
取消后的系统结果:
| 取消时状态 | 结果 |
|---|---|
| 待发货 | 直接改为已取消 |
| 已发货 | 回退库存、生成 SALES_RETURN 入库事务、回退订单明细已发货数量,再改为已取消 |
已签收状态的发货单不能取消。
7. 状态与业务规则
7.1 发货单状态
| 状态 | 说明 | 可执行操作 |
|---|---|---|
| 待发货 | 已创建,未扣减库存 | Web查看,App确认发货,Web/App取消 |
| 已发货 | 已扣减库存,等待签收 | Web/App查看,Web/App确认签收,Web/App取消 |
| 已签收 | 客户已签收 | 查看 |
| 已取消 | 发货单已作废 | 查看 |
7.2 关键业务规则
| 规则 | 说明 |
|---|---|
| 只允许已确认订单创建发货单 | Web 创建页销售订单下拉只加载状态为已确认的订单 |
| 只允许待发货单执行确认发货 | App/ Web 确认发货都只允许待发货单据执行 |
| 全部发货完成时订单自动完成 | 总发货数量达到订单总数量时,订单状态变为已完成 |
| 取消已发货单会回退库存 | 系统执行库存冲销和订单发货数量回退 |
8. 异常处理与应急措施
| 异常场景 | 系统表现 | 处理方式 |
|---|---|---|
| 选不到销售订单 | Web 创建页下拉框无数据 | 检查订单是否已确认,或是否已无可发货数量 |
| 可发货物料为空 | 创建页明细为空 | 回到订单确认生产/库存条件是否满足 |
| 批次不存在 | App 确认发货失败 | 重新选择有效批次 |
| 批次被冻结 | 提示无法发货 | 联系仓库管理员处理批次状态 |
| 批次质量非合格 | 提示只有合格品才能发货 | 联系质量部门处理 |
| 库存不足 | 提示可用数量与需求数量 | 降低本次发货量或更换批次 |
| 已签收单据误点取消 | 系统禁止取消 | 需通过退货或补单等业务流程处理 |
9. 常见问题解答(FAQ)
| 问题 | 解答 |
|---|---|
| 为什么只有部分订单能在创建页选到? | 当前 Web 创建页只展示已确认状态的订单。 |
| 为什么发货执行在 App 里? | App 端发货入口挂在库存管理首页下,当前产品设计就是仓库协同执行口径。 |
| 为什么发货明细会显示 MTO/MTS? | 系统根据订单明细是否“需生产”自动区分按单生产和库存销售。 |
| 为什么必须选批次? | App 确认发货页要求每条明细都选择批次,提交时会校验。 |
| 自提还要填物流信息吗? | 选择“自提”后,页面会清空并禁用物流相关字段。 |
| 确认签收是不是自动同步物流平台? | 当前实现是人工点击确认签收,不是自动回写。 |
10. 源码与依据清单
| 类型 | 文件/路径 | 已核对内容 | 结论 |
|---|---|---|---|
| 后端路由 | bayes-mes-base-core-php/backend/routes/api.php | 发货列表、创建、确认、签收、取消真实路径 | 与SOP一致 |
| 后端控制器 | backend/app/Modules/Sales/Controllers/ShipmentController.php | 创建、确认发货、确认签收、取消入口与校验 | 与SOP一致 |
| 后端服务 | backend/app/Modules/Sales/Services/ShipmentService.php | MTO/MTS规则、批次校验、库存扣减、签收、取消回退 | 与SOP一致 |
| 后端模型 | backend/app/Modules/Sales/Models/Shipment.php | 状态和发货方式定义 | 与SOP一致 |
| 后端资源 | backend/app/Modules/Sales/Resources/ShipmentResource.php、ShipmentItemResource.php | 页面返回字段 | 与SOP一致 |
| Shared 类型 | bayes-mes-shared/types/shipment/*.ts、api/shipment/factory.ts | 发货状态、发货方式、表单结构和 API 路径 | 与SOP一致 |
| 前端列表 | bayes-mes-base-web/apps/mes/src/modules/mes/shipment/views/ShipmentList.vue | 列表入口、按钮、状态操作 | 与SOP一致 |
| 前端创建页 | apps/mes/src/modules/mes/shipment/views/ShipmentCreate.vue | 订单选择、模式显示、物流字段、创建动作 | 与SOP一致 |
| 前端详情页 | apps/mes/src/modules/mes/shipment/views/ShipmentDetail.vue | 查看、确认签收、取消动作 | 与SOP一致 |
| App 库存首页 | bayes-mes-app-vue/src/mes/pages/inventory/index/index.vue | 发货管理入口挂在库存管理首页 | 与SOP一致 |
| App 发货列表 | bayes-mes-app-vue/src/mes/pages/shipment/list/index.vue | 仓库侧列表、状态筛选、详情入口 | 与SOP一致 |
| App 发货详情 | bayes-mes-app-vue/src/mes/pages/shipment/detail/index.vue | 确认发货、确认签收、取消按钮 | 与SOP一致 |
| App 确认发货页 | bayes-mes-app-vue/src/mes/pages/shipment/confirm/index.vue | 扫码选批次、数量校验、确认发货动作 | 与SOP一致 |
| App Store | bayes-mes-app-vue/src/mes/store/shipment.ts | App 端发货列表、详情、确认发货、签收、取消能力 | 与SOP一致 |
11. 待确认问题清单
| 序号 | 问题 | 现状 | 建议 |
|---|---|---|---|
| 1 | Web 与 App 的岗位分工是否要固化 | 当前系统支持多端操作,业务职责可配置 | 建议由业务发布正式岗位边界 |
| 2 | 创建页是否需要仓库选择 | 表单数据有 warehouse_id,页面未提供仓库选择字段 | 由业务确认是否按批次自动带出即可 |
| 3 | 签收是否需要录入签收时间和备注 | 后端支持 received_date、remark,前端当前直接确认 | 如需追溯,补充签收弹窗 |
| 4 | 是否保留 Web 确认发货入口 | Web 已有确认页,但 App 更贴近现场作业 | 建议明确主执行端,避免双端培训口径混乱 |
12. 关联文档
13. 截图清单
| 截图编号 | 建议文件名 | 截图内容 | 状态 |
|---|---|---|---|
| 01 | shipment-web-create-selected-order.png | Web 创建发货单页面,已选销售订单并显示发货明细 | 已采集 |
| 02 | shipment-web-list-refreshed.png | Web 发货管理列表页 | 已采集,页面存在渲染异常需人工复核 |
| 03 | shipment-app-inventory-entry.png | App 库存管理首页的发货管理入口 | 已采集 |
| 04 | shipment-app-list-with-data.png | App 发货管理列表,含待发货单 | 已采集 |
| 05 | shipment-app-detail-pending.png | App 待发货详情页 | 已采集 |
| 06 | shipment-app-confirm-rendered.png | App 确认发货页、发货方式、批次扫码/选择入口 | 已采集 |
14. 快速参考卡
| 场景 | 快速动作 |
|---|---|
| 创建发货单 | Web:发货管理 → 创建发货单 |
| 创建条件 | 销售订单必须已确认,且存在可发货数量 |
| 确认发货 | App:库存管理 → 发货管理 → 选择批次 + 填数量 + 确认发货 |
| 签收 | Web 或 App:已发货状态下点击确认签收 |
| 取消 | Web 或 App:待发货/已发货可取消,已签收不可取消 |
15. 版本记录
| 版本 | 日期 | 变更内容 | 变更人 |
|---|---|---|---|
| V1.0 | 2026-04-29 | 首次创建销售发货管理SOP,按真实 shipments 流程重写 | AI助手 |