diff --git a/VBA/ClassModules/clsConditionExtractor.cls b/VBA/ClassModules/clsConditionExtractor.cls index 238b301..39db01d 100644 --- a/VBA/ClassModules/clsConditionExtractor.cls +++ b/VBA/ClassModules/clsConditionExtractor.cls @@ -41,6 +41,15 @@ Private Sub InitializeRules() ' 从 RangeCode 中直接提取 m_ExtractionRules("lcfw") = Array("RangeCode", "Direct") + ' 规则4: 安装形式 (azxs) + ' 从 InstallForm 中直接提取(例如:A0=径向无边, Z0=中轴向无边) + m_ExtractionRules("azxs") = Array("InstallForm", "Direct") + + ' 规则5: 表壳形式 (bkxs) + ' 从 ShellForm 中直接提取(3位代码:前2位表壳类型+后1位罩壳类型) + ' 例如:532 = 53(304外壳、安装式) + 2(外卡式) + m_ExtractionRules("bkxs") = Array("ShellForm", "Direct") + ' 未来可以在这里添加更多提取规则... ' 例如: ' m_ExtractionRules("bplx") = Array("DialCode", "Direct") ' 表盘类型 diff --git a/新增条件提取计划.md b/新增条件提取计划.md new file mode 100644 index 0000000..d89b942 --- /dev/null +++ b/新增条件提取计划.md @@ -0,0 +1,276 @@ +# 新增条件提取功能实现计划 + +## 一、需求概述 + +需要向 `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