Files
AutoBOM/reference_docs/新增条件提取计划.md
Misaka_Company fd414f7673 docs: reorganize documentation structure and add analysis guidelines
- Move existing documentation files to reference_docs/ directory
- Add documentation guidelines section to CLAUDE.md
- Add clsBOMManager LoadData flow analysis with Mermaid diagrams

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 09:30:29 +08:00

277 lines
7.2 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.
# 新增条件提取功能实现计划
## 一、需求概述
需要向 `clsConditionExtractor.cls` 类增加两个新的条件提取:
1. **安装形式 (azxs)** - 从型号中提取安装形式代码
2. **表壳形式 (bkxs)** - 从型号中提取表壳形式代码
### 示例说明
以型号 `YTHN-100.A0.532.M203.M17.Y3|BP-095.2312.M17.P3` 为例:
- **A0** = 安装形式代码(径向无边)
- **532** = 表壳形式代码,其中:
- `53` = 表壳类型304外壳、安装式、可充油
- `2` = 罩壳类型(外卡式)
---
## 二、参考文档依据
根据 `布莱迪公司压力表产品选型大表.md` 文档:
### 2.1 安装形式代码第159-204行
| 代码 | 说明 |
|------|------|
| A0 | 径向无边 |
| AT | 径向前边 |
| AH | 径向后边 |
| AM | 膜片式径向 |
| Z0 | 中轴向无边 |
| B0 | 下轴向无边 |
| ... | 共20多种安装形式 |
**提取规则**直接提取2位代码字母+数字组合)
### 2.2 表壳形式代码第207-266行
表壳形式由两部分组成:**表壳类型(2位) + 罩壳类型(1位)**
#### 表壳类型示例:
| 代码 | 说明 |
|------|------|
| 00 | 特殊型 |
| 10 | 塑料表壳 |
| 20-24 | 碳钢喷塑外壳系列 |
| 30 | 坚固安全型 |
| 40 | 压铸铝喷塑外壳 |
| 50-55 | 304外壳系列 |
| 60-65 | 316L外壳系列 |
#### 罩壳类型示例:
| 代码 | 说明 |
|------|------|
| 0 | 螺钉上紧式 |
| 1 | 内卡式 |
| 2 | 外卡式 |
| 3 | 滚边式 |
| 4-9 | 其他6种罩壳类型 |
**提取规则**
- 整体提取3位代码532
- 如果需要细分,可以拆分为:
- 前2位表壳类型53
- 后1位罩壳类型2
---
## 三、技术实现方案
### 3.1 代码检查
检查 `clsModelParser` 类是否已包含以下属性:
-`InstallForm` - 安装形式代码
-`ShellForm` - 表壳形式代码
**说明**:根据 `clsConditionExtractor.cls` 第113-116行显示解析器已经支持这些字段。
### 3.2 提取规则设计
#### 规则1安装形式 (azxs)
```vba
m_ExtractionRules("azxs") = Array("InstallForm", "Direct")
```
- **源字段**`InstallForm`
- **提取方法**`Direct`(直接使用)
#### 规则2表壳形式 (bkxs)
```vba
m_ExtractionRules("bkxs") = Array("ShellForm", "Direct")
```
- **源字段**`ShellForm`
- **提取方法**`Direct`(直接使用)
### 3.3 修改位置
`clsConditionExtractor.cls``InitializeRules()` 方法中添加上述两条规则。
**修改位置**第29-47行InitializeRules 方法内部)
---
## 四、实现步骤
### 步骤1修改 clsConditionExtractor.cls
`InitializeRules()` 方法中添加两个新的提取规则:
```vba
Private Sub InitializeRules()
' 规则格式: Dictionary(变量名) = Array(源字段, 提取方法)
' 规则1: 过程连接 (gclj)
m_ExtractionRules("gclj") = Array("ConnectionCode", "RemoveLastDigit")
' 规则2: 接液材质 (jycz)
m_ExtractionRules("jycz") = Array("ConnectionCode", "GetLastDigit")
' 规则3: 量程范围 (lcfw)
m_ExtractionRules("lcfw") = Array("RangeCode", "Direct")
' === 新增规则 ===
' 规则4: 安装形式 (azxs)
m_ExtractionRules("azxs") = Array("InstallForm", "Direct")
' 规则5: 表壳形式 (bkxs)
m_ExtractionRules("bkxs") = Array("ShellForm", "Direct")
End Sub
```
### 步骤2验证 ExtractValue 方法
检查 `ExtractValue` 方法第98-157行是否已支持 `InstallForm``ShellForm` 源字段。
**确认点**
- 第113-114行`Case "InstallForm"` ✅ 已存在
- 第115-116行`Case "ShellForm"` ✅ 已存在
**结论**:无需修改 `ExtractValue` 方法,它已经支持所需的源字段。
### 步骤3测试验证
创建或更新测试用例,验证提取功能:
```vba
' 测试用例
Dim parser As New clsModelParser
Dim extractor As New clsConditionExtractor
Dim conditions As Object
' 解析型号
parser.Parse "YTHN-100.A0.532.M203.M17.Y3|BP-095.2312.M17.P3"
' 提取条件
Set conditions = extractor.ExtractConditions(parser)
' 验证结果
Debug.Print "安装形式(azxs): " & conditions("azxs") ' 应输出: A0
Debug.Print "表壳形式(bkxs): " & conditions("bkxs") ' 应输出: 532
```
---
## 五、影响范围评估
### 5.1 影响的文件
| 文件 | 修改类型 | 说明 |
|------|----------|------|
| `VBA/ClassModules/clsConditionExtractor.cls` | 修改 | 添加2条提取规则 |
### 5.2 兼容性
-**向后兼容**新增规则不影响现有条件gclj、jycz、lcfw的提取
-**现有测试**:无需修改现有测试用例
- ⚠️ **物料匹配**如需在物料选择条件中使用这些新条件需在Excel表格的"选择条件"列中使用新变量名azxs、bkxs
### 5.3 使用场景
新增的条件可以在以下场景中使用:
1. **物料选择条件表达式**
```
azxs=A0 AND bkxs=532
```
2. **BOM完整性检查**
- 检查是否缺少特定安装形式的物料
- 检查是否缺少特定表壳形式的物料
3. **数据分析和统计**
- 按安装形式统计物料需求
- 按表壳形式统计物料需求
---
## 六、可选增强功能(未来扩展)
### 6.1 表壳形式细分提取
如果需要将表壳形式细分为表壳类型和罩壳类型,可以添加:
```vba
' 表壳类型前2位
m_ExtractionRules("bklx") = Array("ShellForm", "GetFirstTwoDigits")
' 罩壳类型后1位
m_ExtractionRules("zklx") = Array("ShellForm", "GetLastDigit")
```
同时需要在 `ExtractValue` 方法中添加新的提取方法:
- `GetFirstTwoDigits`取前2位字符
- `GetLastDigit`:已存在,直接复用
### 6.2 条件验证
可以添加条件值验证功能,确保提取的值在合法范围内:
```vba
Public Function ValidateCondition(varName As String, value As String) As Boolean
' 验证安装形式是否合法
' 验证表壳形式是否合法
End Function
```
---
## 七、实施清单
- [ ] 1. 备份 `clsConditionExtractor.cls` 文件
- [ ] 2. 在 `InitializeRules()` 方法中添加 azxs 提取规则
- [ ] 3. 在 `InitializeRules()` 方法中添加 bkxs 提取规则
- [ ] 4. 更新代码注释,说明新增规则的用途
- [ ] 5. 创建测试用例验证提取功能
- [ ] 6. 运行现有测试套件,确保无回归问题
- [ ] 7. 更新相关文档(如需要)
- [ ] 8. 提交代码变更
---
## 八、预期结果
实现完成后,系统将能够:
1. ✅ 从产品型号中自动提取安装形式代码azxs
2. ✅ 从产品型号中自动提取表壳形式代码bkxs
3. ✅ 在物料选择条件表达式中使用这两个新变量
4. ✅ 保持向后兼容,不影响现有功能
**测试验证示例**
输入型号:`YTHN-100.A0.532.M203.M17.Y3`
提取结果:
- `gclj` = M20
- `jycz` = 3
- `lcfw` = M17
- **`azxs` = A0** ⬅️ 新增
- **`bkxs` = 532** ⬅️ 新增
---
## 九、备注
1. 本计划遵循现有代码的设计模式和命名规范
2. 所有新增代码将包含中文注释,便于维护
3. 修改完成后将更新 VBA 模块元数据(如需要)
4. 建议在Excel开发环境中先进行手动测试确保功能正常
---
**文档版本**: 1.0
**创建日期**: 2026-01-27
**作者**: Claude Code