Files
JY1.0/docs/入库退货同步库存盘点库存设计说明.md

168 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 入库退货同步库存盘点库存设计说明
## 01-功能内容
本次修复针对入库记录组件发起退货后,库存盘点组件中的对应库位库存未同步减少的问题。
原问题现象:
1. 用户在“入库记录”组件中对采购件、耗材或自制件执行退货。
2. 入库记录自身的退货数、入库数等数据已修改。
3. 库存盘点组件中对应物料、对应库位的库存数未同步减少。
4. 用户在库存盘点组件中点击编辑库存时,页面会重新读取未同步的盘点库存,导致库存数看起来“变回来”。
修复目标:
1. 入库记录退货成功时,同步扣减库存盘点对应库位库存。
2. 扣减对象必须精确到原入库记录的 `货位流水号`
3. 采购件、耗材、自制件退货均支持同步扣减。
4. 如果库存盘点中找不到对应库位库存,或库存不足,应阻止退货并给出错误。
5. 保持原有入库记录、退货记录、采购合同状态更新逻辑不变。
## 02-程序开发步骤
### 前端改造
1. 在入库记录组件发起退货校验时,补传当前行的 `入库记录流水号`
2. 后端通过 `入库记录流水号` 读取原入库记录中的 `货位流水号`
3. 避免仅通过物料、合同、批次、入库时间等条件推断库位,防止扣错库位。
涉及前端文件:
- `src/views/WarehouseManagement/WarehousingRecord/WarehousingRecord.vue`
核心参数调整:
```js
param[6] = ['入库记录流水号', this.DeliveryNumber]
```
### 后端改造
1. 调整采购/耗材退货验证过程:
- `仓储管理_入库记录_退货入库_验证`
2. 调整采购/耗材退货执行过程:
- `仓储管理_入库记录_退货入库`
3. 调整自制件退货执行过程:
- `仓储管理_自制件入库记录_退货入库`
4. 退货时按原入库记录中的 `货位流水号` 扣减:
- `库存管理_物料与货位对照表.货位存量`
5. 采购件和耗材按外购件库存表处理。
6. 自制件按自制件入库记录中的库位处理。
7. 所有扣减、退货记录插入、入库记录回写放在事务中执行,任一步失败则回滚。
涉及 SQL 脚本:
- `sql/仓储管理_入库退货同步盘点库存.sql`
## 03-推进台账
| 轮次 | 做了什么 | 改了哪些文件/对象 | 验证了什么 | 下一步 |
| --- | --- | --- | --- | --- |
| 1 | 分析退货后库存盘点不变原因 | 入库记录组件、退货存储过程 | 确认退货未按原入库库位精确扣减盘点库存 | 设计同步扣减方案 |
| 2 | 前端退货校验补传入库记录流水号 | `WarehousingRecord.vue` | 参数可传到后端验证过程 | 改造 SQL |
| 3 | 改造采购/耗材退货验证过程 | `仓储管理_入库记录_退货入库_验证` | 可按入库记录读取原货位 | 改造退货执行 |
| 4 | 改造采购/耗材退货执行过程 | `仓储管理_入库记录_退货入库` | 退货时扣减对应库位库存 | 覆盖自制件 |
| 5 | 改造自制件退货执行过程 | `仓储管理_自制件入库记录_退货入库` | 自制件退货也同步扣减盘点库存 | 编译和执行脚本 |
| 6 | 执行 SQL 脚本并验证对象 | SQL Server 数据库 | 3 个过程已成功更新 | 形成修复文档 |
## 04-任务矩阵
| 任务编号 | 任务内容 | 状态 | 验收标准 |
| --- | --- | --- | --- |
| R-001 | 定位入库退货和库存盘点库存不同步原因 | 已完成 | 明确退货扣减未精确同步库存盘点库位库存 |
| R-002 | 前端退货验证补传 `入库记录流水号` | 已完成 | 采购/耗材退货验证参数包含入库记录流水号 |
| R-003 | 采购/耗材退货验证按原入库库位校验库存 | 已完成 | 库存不足或未找到对应库位库存时不允许退货 |
| R-004 | 采购/耗材退货执行同步扣减盘点库存 | 已完成 | `库存管理_物料与货位对照表.货位存量` 减少退货数量 |
| R-005 | 自制件退货执行同步扣减盘点库存 | 已完成 | 自制件原入库库位库存同步减少 |
| R-006 | SQL 事务保护 | 已完成 | 退货记录、入库记录、库存扣减任一步失败均回滚 |
| R-007 | 前端结构验证 | 已完成 | `WarehousingRecord.vue` 模板和脚本解析通过 |
| R-008 | SQL 对象部署验证 | 已完成 | 相关存储过程已在目标库更新 |
## 05-验收证据
### 前端验证
验证文件:
- `src/views/WarehouseManagement/WarehousingRecord/WarehousingRecord.vue`
验证内容:
1. 采购/耗材退货校验参数已补充:
```js
param[6] = ['入库记录流水号', this.DeliveryNumber]
```
2. Vue 单文件结构解析通过:
```text
template ok
script ok
```
### SQL 验证
目标数据库:
- SQL Server`192.168.1.27`
- 数据库:`ERPTOOL_JY_20250826Back`
部署脚本:
```text
sql/仓储管理_入库退货同步盘点库存.sql
```
已更新对象:
```text
仓储管理_入库记录_退货入库
仓储管理_入库记录_退货入库_验证
仓储管理_自制件入库记录_退货入库
```
验证结果:
```text
sql compile ok
仓储管理_入库记录_退货入库 2026/6/27 9:30:02
仓储管理_入库记录_退货入库_验证 2026/6/27 9:30:02
仓储管理_自制件入库记录_退货入库 2026/6/27 9:30:02
```
## 06-决策记录
| 决策点 | 选择 | 原因 |
| --- | --- | --- |
| 库存扣减定位方式 | 使用 `入库记录流水号` 反查原 `货位流水号` | 最精确,避免同物料多库位时扣错库位 |
| 是否继续按物料、合同、批次、时间匹配 | 保留为辅助条件,但核心以原入库库位为准 | 原匹配条件无法唯一确定库位 |
| 库存不足时如何处理 | 阻止退货并回滚事务 | 避免库存盘点出现负数或账实不一致 |
| 采购/耗材和自制件是否共用逻辑 | 分别改造对应过程 | 两类入库记录来源表不同,分开更符合现有结构 |
| 是否只改前端 | 否,必须改后端存储过程 | 库存一致性应由数据库事务保证 |
| 是否影响库存调拨功能 | 不直接影响 | 退货扣减和调拨是两条库存变动路径,但都作用于库存盘点库位库存 |
## 07-业务流程
```mermaid
flowchart TD
A["入库记录组件点击退货"] --> B["前端提交退货数量、原因、入库记录流水号"]
B --> C["后端读取原入库记录"]
C --> D["取得物料流水号、批次、原货位流水号"]
D --> E{"对应库位库存是否足够"}
E -- "否" --> F["阻止退货并返回错误"]
E -- "是" --> G["插入退货记录"]
G --> H["回写入库记录退货数量"]
H --> I["扣减库存盘点对应库位货位存量"]
I --> J["更新采购合同/订单状态"]
J --> K["提交事务"]
```
## 08-后续注意事项
1. 之后所有库存减少类业务,都应明确扣减到具体 `货位流水号`
2. 不建议再用“物料 + 批次 + 时间”推断库位,存在多库位同批次时扣错风险。
3. 若后续增加退货撤销功能,应同步反向增加对应库位库存。
4. 若库存盘点支持通用件、自制件、采购件多库存表,后续可抽出统一库存变动存储过程,减少重复逻辑。