docs: add ComponentInventoryCheckModule flowchart documentation

Add comprehensive flowchart documentation for the component inventory check module:
- Business flowchart (for non-technical users)
- Technical flowchart (for developers)
- Detailed inventory allocation process
- BOM parsing process
- Data processing sequence diagram
- Data structure documentation and execution examples

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-02-03 09:32:07 +08:00
parent dd6ae4c005
commit 8545177bd5
3 changed files with 1033 additions and 0 deletions

View File

@@ -0,0 +1,391 @@
# 执行计划:部件数量核对功能
## 一、需求概述
### 1.1 功能描述
自动核对产品订单中"部件"类物料的库存情况,当库存不足时,按订单顺序将超出部分的订单的"部件优先"字段标记为"否"。
### 1.2 数据源
#### [产品订单]工作表
- **表头位置**第1行
- **数据起始行**第2行
- **关键列**
- B列产品型号
- C列产品数量
- E列部件优先输出字段
#### [现存量]工作表
- **表头位置**第3行
- **数据起始行**第4行
- **关键列**
- B列物料编码对应BOM中的66代码
- J列结存主数量库存数量
---
## 二、业务逻辑
### 2.1 核心流程
```
1. 读取所有订单 → 2. 解析型号提取BOM → 3. 识别部件物料
4. 统计部件总需求 → 5. 查询库存 → 6. 库存充足性检查
7. 按订单顺序分配库存 → 8. 修改部件优先字段
```
### 2.2 计算规则
#### 部件总需求量
```
部件总需求 = Σ(订单i的BOM中部件数量 × 订单i的产品数量)
```
#### 示例
```
订单1产品数量=2部件A的BOM数量=1 → 需求 = 1 × 2 = 2
订单2产品数量=2部件A的BOM数量=1 → 需求 = 1 × 2 = 2
订单3产品数量=2部件A的BOM数量=1 → 需求 = 1 × 2 = 2
--------------------------------------------------------
部件A总需求 = 2 + 2 + 2 = 6
部件A库存 = 5
库存不足 = 6 - 5 = 1
```
### 2.3 分配策略
**原则**:按订单自上而下的顺序分配库存
| 订单 | 需求量 | 分配前库存 | 分配后库存 | 部件优先 |
|------|--------|-----------|-----------|---------|
| 订单1 | 2 | 5 | 3 | 保持不变 |
| 订单2 | 2 | 3 | 1 | 保持不变 |
| 订单3 | 2 | 1 | -1不足 | **改为"否"** |
---
## 三、处理规则
### 3.1 正常情况
- 订单包含"部件"物料,库存充足 → 保持原值
- 订单包含"部件"物料,库存不足 → 改为"否"
- 订单不包含"部件"物料 → **保持原值不变**
### 3.2 异常情况
- **部件在[现存量]中找不到** → 报错提示,终止处理
- **型号解析失败** → 跳过该订单,记录错误
- **未匹配到任何物料** → 跳过该订单(无部件)
### 3.3 字段修改规则
- **基于现有值进行修改**(不清空原有值)
- **只修改E列"部件优先"字段**
- 修改格式:`是``否``1``0``TRUE``FALSE` 均可识别
---
## 四、数据结构设计
### 4.1 订单数据结构
```vba
Type OrderInfo
RowNumber As Long ' 行号
ProductModel As String ' 产品型号
Quantity As Long ' 产品数量
ComponentCode As String ' 部件66编码
ComponentQty As Double ' 部件BOM数量
HasComponent As Boolean ' 是否包含部件
ParseError As String ' 解析错误信息
End Type
```
### 4.2 部件库存结构
```vba
Type ComponentInventory
ComponentCode As String ' 部件66编码
TotalDemand As Double ' 总需求量
AvailableStock As Double ' 可用库存
IsShortage As Boolean ' 是否短缺
End Type
```
---
## 五、实现方案
### 5.1 新建模块
**文件名**`ComponentInventoryCheckModule.bas`
**主要过程**
```vba
Public Sub CheckComponentInventory()
' 主入口程序
End Sub
```
### 5.2 核心函数
#### 5.2.1 读取订单数据
```vba
Private Function LoadOrderData(ws As Worksheet) As Collection
' 返回 Collection(Of OrderInfo)
' 读取[产品订单]的B、C列数据
End Function
```
#### 5.2.2 读取库存数据
```vba
Private Function LoadInventoryData(ws As Worksheet) As Object
' 返回 Dictionary(物料编码 -> 库存数量)
' 读取[现存量]的B、J列数据
End Function
```
#### 5.2.3 解析订单BOM
```vba
Private Sub ParseOrderBOM(orderInfo As OrderInfo, _
bomExtractor As BomExtractor, _
parser As ProductModelParser)
' 解析型号提取BOM
' 识别"部件"类别物料
' 填充 orderInfo.ComponentCode 和 orderInfo.ComponentQty
End Sub
```
#### 5.2.4 统计部件需求
```vba
Private Function CalculateComponentDemand( _
orders As Collection) As Object
' 返回 Dictionary(部件编码 -> ComponentInventory)
' 累加所有订单的部件需求量
End Function
```
#### 5.2.5 检查库存充足性
```vba
Private Sub ValidateInventory( _
componentDemands As Object, _
inventoryData As Object)
' 检查每个部件的库存是否充足
' 如果找不到或不足,报错提示
End Sub
```
#### 5.2.6 分配库存并标记
```vba
Private Sub AllocateInventory( _
orders As Collection, _
componentDemands As Object, _
orderSheet As Worksheet)
' 按订单顺序分配库存
' 库存不足时修改E列"部件优先"为"否"
End Sub
```
---
## 六、详细实现步骤
### 6.1 主流程CheckComponentInventory
```
1. 获取工作表对象
├─ [产品订单]工作表
├─ [现存量]工作表
└─ [平台配置清单]工作表
2. 初始化BOM提取器
└─ 加载BOM数据
3. 读取库存数据到字典
└─ Dictionary(66编码 -> 库存数量)
4. 读取订单数据
└─ Collection(Of OrderInfo)
5. 解析所有订单的BOM
└─ 识别部件填充ComponentCode和ComponentQty
6. 统计部件总需求
└─ Dictionary(部件编码 -> ComponentInventory)
7. 验证库存
└─ 检查部件是否存在于[现存量]中
8. 按订单顺序分配库存
└─ 修改E列"部件优先"字段
9. 输出结果统计
└─ MsgBox显示处理结果
```
### 6.2 分配算法(伪代码)
```vba
For Each order In orders
If order.HasComponent Then
Dim demand As ComponentInventory
demand = componentDemands(order.ComponentCode)
Dim requiredQty As Double
requiredQty = order.ComponentQty * order.Quantity
If demand.AvailableStock >= requiredQty Then
' 库存充足,保持原值
demand.AvailableStock = demand.AvailableStock - requiredQty
Else
' 库存不足,标记为"否"
orderSheet.Cells(order.RowNumber, 5).Value = "否"
demand.AvailableStock = demand.AvailableStock - requiredQty
End If
End If
Next order
```
---
## 七、边界情况处理
### 7.1 无部件的订单
```
条件订单的BOM中没有"类别=部件"的物料
处理跳过该订单E列保持原值
```
### 7.2 多个订单使用不同部件
```
订单1部件A
订单2部件B
处理分别统计A和B的需求独立核算库存
```
### 7.3 库存为0的情况
```
条件:[现存量]中某部件的结存主数量 = 0
处理:所有需要该部件的订单都标记为"否"
```
### 7.4 产品数量为0的情况
```
条件订单的C列产品数量 = 0
处理:该订单的部件需求 = 0不影响库存
```
### 7.5 部件优先字段原有值
```
可能的值:"是"、"否"、1、0、TRUE、FALSE、空
处理:基于现有值修改,不清空
```
---
## 八、测试用例
### 8.1 基本功能测试
| 测试场景 | 订单数 | 部件 | 总需求 | 库存 | 预期结果 |
|---------|--------|------|--------|------|---------|
| 库存充足 | 3 | A(1) | 6 | 10 | 全部保持原值 |
| 库存不足 | 3 | A(1) | 6 | 5 | 第3个订单改为"否" |
| 库存刚好 | 3 | A(1) | 6 | 6 | 全部保持原值 |
| 无部件订单 | 2 | - | - | - | 保持原值 |
| 库存为0 | 2 | A(1) | 4 | 0 | 全部改为"否" |
### 8.2 异常情况测试
| 测试场景 | 预期行为 |
|---------|---------|
| 部件在[现存量]中不存在 | 报错提示,终止处理 |
| 型号解析失败 | 跳过该订单,记录错误 |
| [产品订单]为空 | 提示无数据,退出 |
| [现存量]为空 | 报错提示,退出 |
### 8.3 边界值测试
| 测试场景 | 输入值 | 预期结果 |
|---------|--------|---------|
| 产品数量为1 | 所有订单数量=1 | 正常计算 |
| 产品数量为大数 | 订单数量=1000 | 正常计算 |
| 部件BOM数量为小数 | 0.5 | 正确计算总需求 |
| 库存数量为小数 | 2.5 | 正确判断库存 |
---
## 九、用户界面设计
### 9.1 执行入口
建议在主界面添加按钮:
```
[部件库存核对]
```
### 9.2 结果提示
执行完成后显示:
```
✓ 部件库存核对完成!
处理订单数10
包含部件订单8
库存充足订单6
库存不足订单2
耗时0.50秒
```
### 9.3 错误提示
格式:
```
✗ 部件库存核对失败!
错误信息:
- 订单第5行部件 '661234' 在[现存量]中未找到
请检查数据后重试。
```
---
## 十、实施步骤
1. **创建新模块**
- 文件名:`ComponentInventoryCheckModule.bas`
- 位置:`VBA/Modules/`
2. **实现核心函数**
- LoadOrderData
- LoadInventoryData
- ParseOrderBOM
- CalculateComponentDemand
- ValidateInventory
- AllocateInventory
3. **实现主流程**
- CheckComponentInventory
4. **测试验证**
- 基本功能测试
- 异常情况测试
- 边界值测试
5. **集成到主界面**
- 添加按钮或菜单项
---
## 十一、风险评估
| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| 库存数据不准确 | 导致错误的分配结果 | 执行前提示用户确认库存数据 |
| 订单量大导致性能问题 | 处理时间长 | 优化算法,使用批量操作 |
| BOM解析失败 | 无法识别部件 | 记录错误日志,跳过该订单 |
| 部件编码不一致 | 无法匹配库存 | 严格验证,报错提示 |
---
**是否批准此执行计划?确认后我将开始代码实现。**