feat: add implementation plan for order material extraction functionality
- Introduced a comprehensive document detailing the project overview, goals, core functionalities, and technical architecture for the order material extraction feature. - Defined the product model coding rules and extraction logic for selection conditions. - Designed class structures for model parsing, condition evaluation, and order material list management. - Outlined implementation steps, testing plans, and risk assessments for the development process.
This commit is contained in:
87
CLAUDE.md
Normal file
87
CLAUDE.md
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
AutoBOM is an Excel VBA-based Bill of Materials (BOM) Management System for manufacturing environments. It manages material hierarchies and procurement logic, supporting both assembled components and individual parts sourcing strategies.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Core Classes (VBA/ClassModules/)
|
||||||
|
|
||||||
|
- **clsBOMManager** - Central controller managing the entire BOM data structure
|
||||||
|
- Loads data from two Excel worksheets: "领料配置" (Configuration) and "平台配置清单" (Platform Configuration)
|
||||||
|
- Builds hierarchical category trees with parent-child relationships
|
||||||
|
- Provides material querying interfaces
|
||||||
|
- Key methods: `LoadData()`, `GetMaterialsForPicking()`, `GetCategory()`
|
||||||
|
|
||||||
|
- **clsCategory** - Represents material categories with hierarchical relationships
|
||||||
|
- Contains collections of materials and sub-categories
|
||||||
|
- Tracks parent category for tree navigation
|
||||||
|
- Properties: `categoryName`, `ParentCategoryName`, `Materials`, `SubCategories`, `IsLeafCategory`
|
||||||
|
|
||||||
|
- **clsMaterialItem** - Represents individual material items
|
||||||
|
- Properties: `code` (物料代号), `Name` (物料名称), `Quantity`, `Condition` (选择条件), `Category`, `ParentCategory`
|
||||||
|
|
||||||
|
### Data Structure Design
|
||||||
|
|
||||||
|
The system uses a dual-layer approach:
|
||||||
|
1. **dictAllMaterials** - Complete material database loaded from platform configuration sheet
|
||||||
|
2. **dictCategories** - Hierarchical category structure with materials filtered by configuration sheet
|
||||||
|
|
||||||
|
Only materials appearing in the "领料配置" worksheet are marked for procurement. Materials in the platform database but not in configuration are ignored.
|
||||||
|
|
||||||
|
### Business Logic
|
||||||
|
|
||||||
|
**Dual-Sourcing Strategy** (via `GetMaterialsForPicking(categoryName, useParent)`):
|
||||||
|
|
||||||
|
- **Parent Mode** (`useParent=True`): Retrieves parent category materials (assembled components)
|
||||||
|
- Default procurement method
|
||||||
|
- Example: "低压接头部件" (Low-pressure connector assembly)
|
||||||
|
|
||||||
|
- **Child Mode** (`useParent=False`): Retrieves child category materials (individual parts)
|
||||||
|
- Used when parent materials are insufficient
|
||||||
|
- Recursively expands all sub-categories
|
||||||
|
- Example: "径向低压接头" + "弹簧管" + "螺旋管" (individual components)
|
||||||
|
|
||||||
|
## Running the Code
|
||||||
|
|
||||||
|
1. Open `YTHN-100.A0.532-BOM-1.2版 Claude.xlsm` in Microsoft Excel
|
||||||
|
2. Enable macros when prompted
|
||||||
|
3. Press Alt+F8 to open the Macro dialog
|
||||||
|
4. Run procedures from modBOMProcessor.bas:
|
||||||
|
- `TestBOMStructure` - Test data loading and verify structure
|
||||||
|
- `GeneratePickingList` - Generate procurement lists to new worksheet
|
||||||
|
- `GetCategoryMaterials` - Demo material retrieval logic
|
||||||
|
- `QueryMaterialInfo` - Query specific category information
|
||||||
|
|
||||||
|
## Data Worksheet Format
|
||||||
|
|
||||||
|
**领料配置** (Configuration):
|
||||||
|
- Column A: 物料代号 (Material Code)
|
||||||
|
- Column C: 类别 (Category)
|
||||||
|
- Column D: 上层类别 (Parent Category)
|
||||||
|
- Row 1: Header, data starts from row 2
|
||||||
|
|
||||||
|
**平台配置清单** (Platform Configuration):
|
||||||
|
- Column C: 代号 (Code)
|
||||||
|
- Column D: 名称 (Name)
|
||||||
|
- Column E: 数量 (Quantity)
|
||||||
|
- Column F: 选择条件 (Selection Condition)
|
||||||
|
- Rows 1-3: Headers, data starts from row 4
|
||||||
|
|
||||||
|
## VBA Metadata
|
||||||
|
|
||||||
|
The VBA module structure is tracked in `VBA/vba_metadata.json`. This file is automatically maintained and should not be manually edited.
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
- All comments are in Chinese, explaining business logic and data structures
|
||||||
|
- Extensive inline documentation for complex logic
|
||||||
|
- Dictionary objects used for O(1) lookups by category name and material code
|
||||||
|
- Collection objects used for ordered iteration of materials and categories
|
||||||
|
|
||||||
|
## Version Control
|
||||||
|
|
||||||
|
The `.gitignore` excludes `.xlsm` files from version control. Only VBA source code and metadata files are tracked in Git.
|
||||||
@@ -19,15 +19,15 @@ Sub TestBOMStructure()
|
|||||||
bomMgr.LoadData wsConfig, wsPlatform
|
bomMgr.LoadData wsConfig, wsPlatform
|
||||||
|
|
||||||
' 打印类别树结构到新工作表
|
' 打印类别树结构到新工作表
|
||||||
Dim wsOutput As Worksheet
|
' Dim wsOutput As Worksheet
|
||||||
On Error Resume Next
|
' On Error Resume Next
|
||||||
Application.DisplayAlerts = False
|
' Application.DisplayAlerts = False
|
||||||
ThisWorkbook.Worksheets("BOM结构").Delete
|
' ThisWorkbook.Worksheets("BOM结构").Delete
|
||||||
Application.DisplayAlerts = True
|
' Application.DisplayAlerts = True
|
||||||
On Error GoTo 0
|
' On Error GoTo 0
|
||||||
|
'
|
||||||
Set wsOutput = ThisWorkbook.Worksheets.Add
|
' Set wsOutput = ThisWorkbook.Worksheets.Add
|
||||||
wsOutput.Name = "BOM结构"
|
' wsOutput.Name = "BOM结构"
|
||||||
|
|
||||||
'bomMgr.PrintCategoryTree wsOutput
|
'bomMgr.PrintCategoryTree wsOutput
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ Sub TestBOMStructure()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
MsgBox "BOM数据结构加载完成!" & vbCrLf & _
|
'MsgBox "BOM数据结构加载完成!" & vbCrLf & _
|
||||||
"请查看 'BOM结构' 工作表", vbInformation
|
"请查看 'BOM结构' 工作表", vbInformation
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -139,6 +139,64 @@ Sub GeneratePickingList()
|
|||||||
MsgBox "领料清单生成完成!", vbInformation
|
MsgBox "领料清单生成完成!", vbInformation
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
' 示例: 在立即窗口打印领料清单
|
||||||
|
Sub PrintPickingList()
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
Dim wsConfig As Worksheet, wsPlatform As Worksheet
|
||||||
|
|
||||||
|
Set wsConfig = ThisWorkbook.Worksheets("领料配置")
|
||||||
|
Set wsPlatform = ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
|
||||||
|
bomMgr.LoadData wsConfig, wsPlatform
|
||||||
|
|
||||||
|
' 打印表头
|
||||||
|
Debug.Print String(80, "=")
|
||||||
|
Debug.Print "领料清单"
|
||||||
|
Debug.Print String(80, "=")
|
||||||
|
|
||||||
|
' 遍历所有根类别
|
||||||
|
Dim rootCats As Collection
|
||||||
|
Set rootCats = bomMgr.GetRootCategories
|
||||||
|
|
||||||
|
Dim cat As clsCategory
|
||||||
|
Dim Materials As Collection
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
Dim i As Long, j As Long
|
||||||
|
Dim totalCount As Long
|
||||||
|
|
||||||
|
totalCount = 0
|
||||||
|
|
||||||
|
For i = 1 To rootCats.Count
|
||||||
|
Set cat = rootCats(i)
|
||||||
|
|
||||||
|
' 打印类别分隔符
|
||||||
|
Debug.Print ""
|
||||||
|
Debug.Print "【类别: " & cat.categoryName & "】"
|
||||||
|
Debug.Print String(40, "-")
|
||||||
|
|
||||||
|
' 默认使用父类别物料
|
||||||
|
Set Materials = bomMgr.GetMaterialsForPicking(cat.categoryName, True)
|
||||||
|
|
||||||
|
For j = 1 To Materials.Count
|
||||||
|
Set mat = Materials(j)
|
||||||
|
Debug.Print " " & mat.code & _
|
||||||
|
String(20 - Len(mat.code), " ") & _
|
||||||
|
mat.Name & _
|
||||||
|
" | 数量:" & mat.Quantity & _
|
||||||
|
" | 条件:" & IIf(mat.Condition = "", "(无)", mat.Condition)
|
||||||
|
totalCount = totalCount + 1
|
||||||
|
Next j
|
||||||
|
|
||||||
|
Debug.Print " 小计: " & Materials.Count & " 项"
|
||||||
|
Next i
|
||||||
|
|
||||||
|
' 打印汇总
|
||||||
|
Debug.Print ""
|
||||||
|
Debug.Print String(80, "=")
|
||||||
|
Debug.Print "总计: " & totalCount & " 项物料"
|
||||||
|
Debug.Print String(80, "=")
|
||||||
|
End Sub
|
||||||
|
|
||||||
' 示例: 查询特定物料信息
|
' 示例: 查询特定物料信息
|
||||||
Sub QueryMaterialInfo()
|
Sub QueryMaterialInfo()
|
||||||
Dim bomMgr As New clsBOMManager
|
Dim bomMgr As New clsBOMManager
|
||||||
|
|||||||
545
VBA/clsBOMManager使用说明.md
Normal file
545
VBA/clsBOMManager使用说明.md
Normal file
@@ -0,0 +1,545 @@
|
|||||||
|
# clsBOMManager 类使用说明
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
`clsBOMManager` 是 AutoBOM 系统的核心控制器类,负责管理整个 BOM(物料清单)数据结构。它从 Excel 工作表加载数据,构建层级化的类别树,并提供物料查询和领料逻辑处理功能。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 类初始化
|
||||||
|
|
||||||
|
```vba
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
```
|
||||||
|
|
||||||
|
创建实例时,会自动初始化以下内部数据结构:
|
||||||
|
- `dictCategories` - 类别字典(类别名称 → clsCategory 对象)
|
||||||
|
- `dictAllMaterials` - 物料字典(物料代号 → clsMaterialItem 对象)
|
||||||
|
- `rootCategories` - 根类别集合(顶层类别)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 公开方法
|
||||||
|
|
||||||
|
### 1. LoadData 方法
|
||||||
|
|
||||||
|
**功能**:从 Excel 工作表加载 BOM 数据并构建数据结构
|
||||||
|
|
||||||
|
**语法**:
|
||||||
|
```vba
|
||||||
|
Public Sub LoadData(wsConfig As Worksheet, wsPlatform As Worksheet)
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数**:
|
||||||
|
| 参数 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| wsConfig | Worksheet | 领料配置工作表,定义类别层级和需要领料的物料 |
|
||||||
|
| wsPlatform | Worksheet | 平台配置清单工作表,包含完整的物料信息 |
|
||||||
|
|
||||||
|
**数据要求**:
|
||||||
|
|
||||||
|
**领料配置** 工作表格式:
|
||||||
|
- **第 1 行**:标题行
|
||||||
|
- **第 2 行起**:数据行
|
||||||
|
- A 列:物料代号
|
||||||
|
- C 列:类别名称
|
||||||
|
- D 列:上层类别名称
|
||||||
|
|
||||||
|
**平台配置清单** 工作表格式:
|
||||||
|
- **第 1-3 行**:标题行
|
||||||
|
- **第 4 行起**:数据行
|
||||||
|
- C 列:物料代号
|
||||||
|
- D 列:物料名称
|
||||||
|
- E 列:物料数量
|
||||||
|
- F 列:选择条件
|
||||||
|
|
||||||
|
**处理逻辑**:
|
||||||
|
1. 从"平台配置清单"加载所有物料的基础信息到 `dictAllMaterials`
|
||||||
|
2. 从"领料配置"加载类别信息,筛选需要领料的物料
|
||||||
|
3. 建立类别的父子关系,构建层级树
|
||||||
|
|
||||||
|
**重要说明**:
|
||||||
|
- 只有出现在"领料配置"中的物料才会被添加到类别中
|
||||||
|
- 未在"领料配置"中的物料表示不需要领料,但仍存在于物料字典中
|
||||||
|
|
||||||
|
**使用示例**:
|
||||||
|
```vba
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
Dim wsConfig As Worksheet
|
||||||
|
Dim wsPlatform As Worksheet
|
||||||
|
|
||||||
|
Set wsConfig = ThisWorkbook.Worksheets("领料配置")
|
||||||
|
Set wsPlatform = ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
|
||||||
|
bomMgr.LoadData wsConfig, wsPlatform
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. GetRootCategories 方法
|
||||||
|
|
||||||
|
**功能**:获取所有顶层类别的集合
|
||||||
|
|
||||||
|
**语法**:
|
||||||
|
```vba
|
||||||
|
Public Function GetRootCategories() As Collection
|
||||||
|
```
|
||||||
|
|
||||||
|
**返回值**:
|
||||||
|
- `Collection` 对象,包含所有无父类别的 `clsCategory` 对象
|
||||||
|
|
||||||
|
**用途**:
|
||||||
|
- 遍历整个 BOM 结构时的入口点
|
||||||
|
- 生成领料清单时遍历所有根类别
|
||||||
|
|
||||||
|
**使用示例**:
|
||||||
|
```vba
|
||||||
|
Dim rootCats As Collection
|
||||||
|
Dim cat As clsCategory
|
||||||
|
Dim i As Long
|
||||||
|
|
||||||
|
Set rootCats = bomMgr.GetRootCategories()
|
||||||
|
|
||||||
|
For i = 1 To rootCats.Count
|
||||||
|
Set cat = rootCats(i)
|
||||||
|
Debug.Print "根类别: " & cat.categoryName
|
||||||
|
Debug.Print " 物料数: " & cat.Materials.Count
|
||||||
|
Debug.Print " 子类别数: " & cat.SubCategories.Count
|
||||||
|
Next i
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. GetCategory 方法
|
||||||
|
|
||||||
|
**功能**:根据类别名称获取类别对象
|
||||||
|
|
||||||
|
**语法**:
|
||||||
|
```vba
|
||||||
|
Public Function GetCategory(categoryName As String) As clsCategory
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数**:
|
||||||
|
| 参数 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| categoryName | String | 要查询的类别名称 |
|
||||||
|
|
||||||
|
**返回值**:
|
||||||
|
- 找到时:返回 `clsCategory` 对象
|
||||||
|
- 未找到时:返回 `Nothing`
|
||||||
|
|
||||||
|
**用途**:快速查找特定类别及其下的物料
|
||||||
|
|
||||||
|
**使用示例**:
|
||||||
|
```vba
|
||||||
|
Dim cat As clsCategory
|
||||||
|
Set cat = bomMgr.GetCategory("部件")
|
||||||
|
|
||||||
|
If Not cat Is Nothing Then
|
||||||
|
Debug.Print "类别: " & cat.categoryName
|
||||||
|
Debug.Print "父类别: " & cat.ParentCategoryName
|
||||||
|
Debug.Print "物料数: " & cat.Materials.Count
|
||||||
|
Debug.Print "是否叶子类别: " & cat.IsLeafCategory
|
||||||
|
End If
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. GetMaterialsForPicking 方法
|
||||||
|
|
||||||
|
**功能**:获取某类别下需要领料的物料清单(支持层级逻辑)
|
||||||
|
|
||||||
|
**语法**:
|
||||||
|
```vba
|
||||||
|
Public Function GetMaterialsForPicking(categoryName As String, _
|
||||||
|
Optional useParent As Boolean = True) As Collection
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数**:
|
||||||
|
| 参数 | 类型 | 默认值 | 说明 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| categoryName | String | - | 类别名称 |
|
||||||
|
| useParent | Boolean | True | 领料方式:True=父类别物料,False=子类别物料 |
|
||||||
|
|
||||||
|
**返回值**:
|
||||||
|
- `Collection` 对象,包含 `clsMaterialItem` 对象
|
||||||
|
|
||||||
|
**业务逻辑说明**:
|
||||||
|
|
||||||
|
#### 父类别模式 (useParent=True)
|
||||||
|
- 这是**默认的领料方式**
|
||||||
|
- 直接返回当前类别下的所有物料
|
||||||
|
- 即使该类别有子类别,也仍然返回父类别物料
|
||||||
|
- 用于领取组装好的部件
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```vba
|
||||||
|
' 获取"部件"类别的父类别物料
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking("部件", True)
|
||||||
|
' 返回:低压接头部件、高压接头部件等组装好的部件
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 子类别模式 (useParent=False)
|
||||||
|
- 这是**库存不足时的替代方案**
|
||||||
|
- 如果当前类别有子类别,递归获取所有子类别的物料
|
||||||
|
- 如果当前类别是叶子类别(无子类别),返回本类别物料
|
||||||
|
- 用于父类别库存不足,需要领取零件自行组装的情况
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```vba
|
||||||
|
' 获取"部件"类别的子类别展开物料
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking("部件", False)
|
||||||
|
' 返回:径向低压接头、弹簧管、螺旋管等零件
|
||||||
|
```
|
||||||
|
|
||||||
|
**层级结构示例**:
|
||||||
|
|
||||||
|
```
|
||||||
|
部件 (父类别)
|
||||||
|
├── 低压接头部件 (物料)
|
||||||
|
├── 高压接头部件 (物料)
|
||||||
|
└── 接头 (子类别)
|
||||||
|
├── 径向低压接头 (物料)
|
||||||
|
├── 轴向高压接头 (物料)
|
||||||
|
└── 弹性元件 (孙类别)
|
||||||
|
└── 弹簧管 (物料)
|
||||||
|
```
|
||||||
|
|
||||||
|
**使用示例**:
|
||||||
|
```vba
|
||||||
|
Dim materials As Collection
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
Dim i As Long
|
||||||
|
|
||||||
|
' 默认使用父类别物料
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking("部件", True)
|
||||||
|
Debug.Print "父类别物料数: " & materials.Count
|
||||||
|
|
||||||
|
For i = 1 To materials.Count
|
||||||
|
Set mat = materials(i)
|
||||||
|
Debug.Print mat.code & " - " & mat.Name & _
|
||||||
|
" | 数量:" & mat.Quantity & _
|
||||||
|
" | 条件:" & mat.Condition
|
||||||
|
Next i
|
||||||
|
|
||||||
|
' 库存不足时,使用子类别物料
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking("部件", False)
|
||||||
|
Debug.Print "子类别展开物料数: " & materials.Count
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. PrintCategoryTree 方法
|
||||||
|
|
||||||
|
**功能**:将类别树结构打印到工作表(用于调试和查看)
|
||||||
|
|
||||||
|
**语法**:
|
||||||
|
```vba
|
||||||
|
Public Sub PrintCategoryTree(ws As Worksheet)
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数**:
|
||||||
|
| 参数 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| ws | Worksheet | 输出的目标工作表对象 |
|
||||||
|
|
||||||
|
**输出格式**:
|
||||||
|
- 第 1 列:类别名称(带缩进显示层级)
|
||||||
|
- 第 2 列:物料数量信息
|
||||||
|
- 第 3 列:选择条件
|
||||||
|
|
||||||
|
**缩进规则**:每层级 2 个空格
|
||||||
|
|
||||||
|
**输出示例**:
|
||||||
|
```
|
||||||
|
表壳 (物料数:1)
|
||||||
|
- 01091004312 表壳(本色) 数量:1 条件:
|
||||||
|
部件 (物料数:20)
|
||||||
|
- 01011019001 低压接头部件 数量:1 条件:lcfw=M02...
|
||||||
|
接头 (物料数:18)
|
||||||
|
- 01081013833 径向低压接头 数量:1 条件:gclj=Z12...
|
||||||
|
```
|
||||||
|
|
||||||
|
**使用示例**:
|
||||||
|
```vba
|
||||||
|
Dim wsOutput As Worksheet
|
||||||
|
|
||||||
|
' 创建新工作表
|
||||||
|
On Error Resume Next
|
||||||
|
Application.DisplayAlerts = False
|
||||||
|
ThisWorkbook.Worksheets("BOM结构").Delete
|
||||||
|
Application.DisplayAlerts = True
|
||||||
|
On Error GoTo 0
|
||||||
|
|
||||||
|
Set wsOutput = ThisWorkbook.Worksheets.Add
|
||||||
|
wsOutput.Name = "BOM结构"
|
||||||
|
|
||||||
|
' 打印类别树
|
||||||
|
bomMgr.PrintCategoryTree wsOutput
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 典型使用场景
|
||||||
|
|
||||||
|
### 场景 1:生成领料清单
|
||||||
|
|
||||||
|
```vba
|
||||||
|
Sub GeneratePickingList()
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
Dim wsConfig As Worksheet, wsPlatform As Worksheet
|
||||||
|
Dim wsPickList As Worksheet
|
||||||
|
Dim rootCats As Collection
|
||||||
|
Dim cat As clsCategory
|
||||||
|
Dim materials As Collection
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
Dim row As Long
|
||||||
|
Dim i As Long, j As Long
|
||||||
|
|
||||||
|
' 1. 加载数据
|
||||||
|
Set wsConfig = ThisWorkbook.Worksheets("领料配置")
|
||||||
|
Set wsPlatform = ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
bomMgr.LoadData wsConfig, wsPlatform
|
||||||
|
|
||||||
|
' 2. 创建输出工作表
|
||||||
|
Application.DisplayAlerts = False
|
||||||
|
On Error Resume Next
|
||||||
|
ThisWorkbook.Worksheets("领料清单").Delete
|
||||||
|
On Error GoTo 0
|
||||||
|
Application.DisplayAlerts = True
|
||||||
|
|
||||||
|
Set wsPickList = ThisWorkbook.Worksheets.Add
|
||||||
|
wsPickList.Name = "领料清单"
|
||||||
|
|
||||||
|
' 3. 写入表头
|
||||||
|
row = 1
|
||||||
|
wsPickList.Cells(row, 1).Value = "代号"
|
||||||
|
wsPickList.Cells(row, 2).Value = "名称"
|
||||||
|
wsPickList.Cells(row, 3).Value = "类别"
|
||||||
|
wsPickList.Cells(row, 4).Value = "数量"
|
||||||
|
wsPickList.Cells(row, 5).Value = "选择条件"
|
||||||
|
wsPickList.Cells(row, 6).Value = "领料方式"
|
||||||
|
row = row + 1
|
||||||
|
|
||||||
|
' 4. 遍历所有根类别并生成清单
|
||||||
|
Set rootCats = bomMgr.GetRootCategories
|
||||||
|
|
||||||
|
For i = 1 To rootCats.Count
|
||||||
|
Set cat = rootCats(i)
|
||||||
|
' 默认使用父类别物料
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking(cat.categoryName, True)
|
||||||
|
|
||||||
|
For j = 1 To materials.Count
|
||||||
|
Set mat = materials(j)
|
||||||
|
wsPickList.Cells(row, 1).Value = mat.code
|
||||||
|
wsPickList.Cells(row, 2).Value = mat.Name
|
||||||
|
wsPickList.Cells(row, 3).Value = mat.Category
|
||||||
|
wsPickList.Cells(row, 4).Value = mat.Quantity
|
||||||
|
wsPickList.Cells(row, 5).Value = mat.Condition
|
||||||
|
wsPickList.Cells(row, 6).Value = "父类别"
|
||||||
|
row = row + 1
|
||||||
|
Next j
|
||||||
|
Next i
|
||||||
|
|
||||||
|
' 5. 格式化表格
|
||||||
|
wsPickList.Range("A1:F1").Font.Bold = True
|
||||||
|
wsPickList.Columns("A:F").AutoFit
|
||||||
|
|
||||||
|
MsgBox "领料清单生成完成!", vbInformation
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 2:查询特定类别信息
|
||||||
|
|
||||||
|
```vba
|
||||||
|
Sub QueryCategoryInfo()
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
Dim wsConfig As Worksheet, wsPlatform As Worksheet
|
||||||
|
Dim cat As clsCategory
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
Dim subCat As clsCategory
|
||||||
|
Dim i As Long
|
||||||
|
|
||||||
|
' 加载数据
|
||||||
|
Set wsConfig = ThisWorkbook.Worksheets("领料配置")
|
||||||
|
Set wsPlatform = ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
bomMgr.LoadData wsConfig, wsPlatform
|
||||||
|
|
||||||
|
' 查询特定类别
|
||||||
|
Set cat = bomMgr.GetCategory("部件")
|
||||||
|
|
||||||
|
If Not cat Is Nothing Then
|
||||||
|
Debug.Print "========== 类别信息 =========="
|
||||||
|
Debug.Print "类别名称: " & cat.categoryName
|
||||||
|
Debug.Print "父类别: " & cat.ParentCategoryName
|
||||||
|
Debug.Print "物料数量: " & cat.Materials.Count
|
||||||
|
Debug.Print "子类别数量: " & cat.SubCategories.Count
|
||||||
|
Debug.Print "是否叶子类别: " & cat.IsLeafCategory
|
||||||
|
Debug.Print ""
|
||||||
|
|
||||||
|
' 列出所有物料
|
||||||
|
Debug.Print "---------- 物料列表 ----------"
|
||||||
|
For i = 1 To cat.Materials.Count
|
||||||
|
Set mat = cat.Materials(i)
|
||||||
|
Debug.Print " " & mat.code & ": " & mat.Name & _
|
||||||
|
" (数量:" & mat.Quantity & _
|
||||||
|
", 条件:" & mat.Condition & ")"
|
||||||
|
Next i
|
||||||
|
Debug.Print ""
|
||||||
|
|
||||||
|
' 列出所有子类别
|
||||||
|
Debug.Print "---------- 子类别列表 ----------"
|
||||||
|
For i = 1 To cat.SubCategories.Count
|
||||||
|
Set subCat = cat.SubCategories(i)
|
||||||
|
Debug.Print " " & subCat.categoryName & _
|
||||||
|
" (物料数:" & subCat.Materials.Count & ")"
|
||||||
|
Next i
|
||||||
|
Else
|
||||||
|
Debug.Print "类别不存在"
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 3:根据库存情况选择领料方式
|
||||||
|
|
||||||
|
```vba
|
||||||
|
Sub SmartPicking()
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
Dim materials As Collection
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
Dim categoryName As String
|
||||||
|
Dim i As Long
|
||||||
|
|
||||||
|
' 加载数据
|
||||||
|
bomMgr.LoadData _
|
||||||
|
ThisWorkbook.Worksheets("领料配置"), _
|
||||||
|
ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
|
||||||
|
categoryName = "部件"
|
||||||
|
|
||||||
|
' 尝试获取父类别物料
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking(categoryName, True)
|
||||||
|
|
||||||
|
' 检查库存是否充足(这里需要连接实际的库存系统)
|
||||||
|
Dim isStockSufficient As Boolean
|
||||||
|
isStockSufficient = CheckStock(materials) ' 假设的库存检查函数
|
||||||
|
|
||||||
|
If isStockSufficient Then
|
||||||
|
Debug.Print "使用父类别领料方式"
|
||||||
|
Else
|
||||||
|
Debug.Print "父类别库存不足,改用子类别领料方式"
|
||||||
|
Set materials = bomMgr.GetMaterialsForPicking(categoryName, False)
|
||||||
|
End If
|
||||||
|
|
||||||
|
' 输出物料清单
|
||||||
|
For i = 1 To materials.Count
|
||||||
|
Set mat = materials(i)
|
||||||
|
Debug.Print mat.code & " " & mat.Name
|
||||||
|
Next i
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 辅助类说明
|
||||||
|
|
||||||
|
### clsCategory 类
|
||||||
|
|
||||||
|
表示物料类别及其层级关系。
|
||||||
|
|
||||||
|
**公共属性**:
|
||||||
|
| 属性 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| categoryName | String | 类别名称 |
|
||||||
|
| ParentCategoryName | String | 父类别名称 |
|
||||||
|
| Materials | Collection | 该类别下的物料集合 |
|
||||||
|
| SubCategories | Collection | 子类别集合 |
|
||||||
|
| IsLeafCategory | Boolean | 是否为叶子类别(无子类别) |
|
||||||
|
|
||||||
|
**公共方法**:
|
||||||
|
- `AddMaterial(mat As clsMaterialItem)` - 添加物料
|
||||||
|
- `AddSubCategory(cat As clsCategory)` - 添加子类别
|
||||||
|
- `GetMaterial(code As String) As clsMaterialItem` - 获取指定代号的物料
|
||||||
|
- `HasSubCategories() As Boolean` - 检查是否有子类别
|
||||||
|
|
||||||
|
### clsMaterialItem 类
|
||||||
|
|
||||||
|
表示单个物料项。
|
||||||
|
|
||||||
|
**公共属性**:
|
||||||
|
| 属性 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| code | String | 物料代号 |
|
||||||
|
| Name | String | 物料名称 |
|
||||||
|
| Quantity | Double | 物料数量 |
|
||||||
|
| Condition | String | 选择条件 |
|
||||||
|
| Category | String | 所属类别 |
|
||||||
|
| ParentCategory | String | 上层类别 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
1. **数据加载顺序**:必须先调用 `LoadData()` 方法,才能使用其他查询方法
|
||||||
|
|
||||||
|
2. **工作表名称**:确保工作表名称与代码中的名称一致:
|
||||||
|
- "领料配置"
|
||||||
|
- "平台配置清单"
|
||||||
|
|
||||||
|
3. **空值处理**:使用 `GetCategory()` 方法时,务必检查返回值是否为 `Nothing`
|
||||||
|
|
||||||
|
4. **领料方式选择**:
|
||||||
|
- 正常情况使用 `useParent=True`(领取组装好的部件)
|
||||||
|
- 仅在库存不足时使用 `useParent=False`(领取零件自行组装)
|
||||||
|
|
||||||
|
5. **数据一致性**:修改 Excel 数据后,需要重新调用 `LoadData()` 重新加载数据
|
||||||
|
|
||||||
|
6. **内存管理**:使用完毕后,VBA 会自动清理对象,无需手动释放
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 常见问题
|
||||||
|
|
||||||
|
### Q1: 如何判断某个类别是否存在?
|
||||||
|
```vba
|
||||||
|
Dim cat As clsCategory
|
||||||
|
Set cat = bomMgr.GetCategory("类别名")
|
||||||
|
|
||||||
|
If Not cat Is Nothing Then
|
||||||
|
' 类别存在
|
||||||
|
Else
|
||||||
|
' 类别不存在
|
||||||
|
End If
|
||||||
|
```
|
||||||
|
|
||||||
|
### Q2: 如何获取所有类别的名称?
|
||||||
|
```vba
|
||||||
|
Sub ListAllCategories()
|
||||||
|
' 需要递归遍历所有类别
|
||||||
|
' 可以使用 PrintCategoryTree 方法输出到工作表查看
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
### Q3: 父类别和子类别物料有什么区别?
|
||||||
|
- **父类别物料**:组装好的成品部件,如"低压接头部件"
|
||||||
|
- **子类别物料**:组成部件的零件,如"径向低压接头"、"弹簧管"等
|
||||||
|
|
||||||
|
### Q4: 如何处理物料选择条件?
|
||||||
|
```vba
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
' ...
|
||||||
|
If mat.Condition <> "" Then
|
||||||
|
' 根据条件选择合适的物料
|
||||||
|
' 条件格式如:lcfw=M02;gclj=Z12
|
||||||
|
' 需要根据产品配置解析这些条件
|
||||||
|
End If
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 版本信息
|
||||||
|
|
||||||
|
- **类名称**:clsBOMManager
|
||||||
|
- **版本**:1.0
|
||||||
|
- **最后更新**:2025
|
||||||
|
- **依赖类**:clsCategory, clsMaterialItem
|
||||||
@@ -31,6 +31,12 @@
|
|||||||
"attributes": {},
|
"attributes": {},
|
||||||
"file": "DocumentModules\\Sheet4.cls"
|
"file": "DocumentModules\\Sheet4.cls"
|
||||||
},
|
},
|
||||||
|
"Sheet6.cls": {
|
||||||
|
"name": "Sheet6",
|
||||||
|
"type": "DocumentModules",
|
||||||
|
"attributes": {},
|
||||||
|
"file": "DocumentModules\\Sheet6.cls"
|
||||||
|
},
|
||||||
"clsCategory.cls": {
|
"clsCategory.cls": {
|
||||||
"name": "clsCategory",
|
"name": "clsCategory",
|
||||||
"type": "ClassModules",
|
"type": "ClassModules",
|
||||||
@@ -54,12 +60,6 @@
|
|||||||
"type": "ClassModules",
|
"type": "ClassModules",
|
||||||
"attributes": {},
|
"attributes": {},
|
||||||
"file": "ClassModules\\clsBOMManager.cls"
|
"file": "ClassModules\\clsBOMManager.cls"
|
||||||
},
|
|
||||||
"Sheet6.cls": {
|
|
||||||
"name": "Sheet6",
|
|
||||||
"type": "DocumentModules",
|
|
||||||
"attributes": {},
|
|
||||||
"file": "DocumentModules\\Sheet6.cls"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
716
布莱迪公司压力表产品选型大表.md
Normal file
716
布莱迪公司压力表产品选型大表.md
Normal file
@@ -0,0 +1,716 @@
|
|||||||
|
# 布莱迪公司压力表产品选型大表
|
||||||
|
|
||||||
|
**版本**: 20250806 版
|
||||||
|
**说明**: 公司内部资料不得外传
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 目录
|
||||||
|
|
||||||
|
1. [型号](#型号)
|
||||||
|
2. [公称外径](#公称外径)
|
||||||
|
3. [安装形式](#安装形式)
|
||||||
|
4. [壳体形式](#壳体形式)
|
||||||
|
5. [过程连接&接液材质](#过程连接&接液材质)
|
||||||
|
6. [量程范围](#量程范围)
|
||||||
|
7. [仪表特性](#仪表特性)
|
||||||
|
8. [表盘](#表盘)
|
||||||
|
9. [附件](#附件)
|
||||||
|
10. [法兰隔膜](#法兰隔膜)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 型号
|
||||||
|
|
||||||
|
### 基础压力表系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| Y | 压力表 |
|
||||||
|
| YY | (乙炔)压力表 |
|
||||||
|
| YA | (氨)压力表 |
|
||||||
|
| YR | (耐热)压力表 |
|
||||||
|
| YTF | (防溅)压力表 |
|
||||||
|
| YTN | (防溅)耐震压力表 |
|
||||||
|
| YTH | (不锈钢)压力表 |
|
||||||
|
| YTHN | (不锈钢)耐震压力表 |
|
||||||
|
|
||||||
|
### 精密压力表系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
| ---- | ------------ |
|
||||||
|
| YB | 精密压力表 |
|
||||||
|
| YBH | (不锈钢)精密压力表 |
|
||||||
|
| YBHN | (不锈钢)耐震精密压力表 |
|
||||||
|
|
||||||
|
### 膜盒压力表系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| YE | 膜盒压力表 |
|
||||||
|
| YEF | (不锈钢)膜盒压力表 |
|
||||||
|
| YEFN | (不锈钢耐震)膜盒压力表 |
|
||||||
|
| YEY | (医用)膜盒压力表 |
|
||||||
|
|
||||||
|
### 安全型压力表系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| YQHB | (不锈钢安全)型压力表 |
|
||||||
|
| YQHBN | (不锈钢安全型)耐震压力表 |
|
||||||
|
| YQ | (铸铝外壳安全型)压力表 |
|
||||||
|
| YQF | (不锈钢铸铝外壳安全型)压力表 |
|
||||||
|
|
||||||
|
### 酚醛系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| YSH | (不锈钢酚醛)压力表 |
|
||||||
|
| YSHN | (不锈钢酚醛)耐震压力表 |
|
||||||
|
| YQS | (酚醛安全型)压力表 |
|
||||||
|
| YQSN | (酚醛安全型)耐震压力表 |
|
||||||
|
| YQSH | (不锈钢酚醛安全型)压力表 |
|
||||||
|
| YQSHN | (不锈钢酚醛安全型)耐震压力表 |
|
||||||
|
|
||||||
|
### 差压表系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| YCA | (不锈钢双膜片)差压表 |
|
||||||
|
| YCAN | (不锈钢双膜片)耐震差压表 |
|
||||||
|
| YCS | (双针双管)差压表 |
|
||||||
|
| YCSH | (不锈钢双针双管)差压表 |
|
||||||
|
| YCSHN | (不锈钢双针双管)耐震差压表 |
|
||||||
|
| YCC | (磁)差压表 |
|
||||||
|
| YCB | (泳池)差压表 |
|
||||||
|
| YCBF | (不锈钢单膜片)差压表 |
|
||||||
|
| YCBFN | (不锈钢单膜片)耐震差压表 |
|
||||||
|
| YCWF | (不锈钢波纹管)差压表 |
|
||||||
|
| YCWFN | (不锈钢波纹管)耐震差压表 |
|
||||||
|
|
||||||
|
### 电接点压力表系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| YX | 电接点压力表 |
|
||||||
|
| YXFB | (防爆)电接点压力表 |
|
||||||
|
| YXA | (氨用)电接点压力表 |
|
||||||
|
| YXH | (不锈钢)电接点压力表(注:坚固型) |
|
||||||
|
| YXHN | (不锈钢)耐震电接点压力表(注:坚固型) |
|
||||||
|
| YXGC | (感应式)电接点差压表 |
|
||||||
|
| YXK | 位式控制压力表 |
|
||||||
|
| YXGH | (不锈钢防爆感应式)电接点压力表 |
|
||||||
|
| YXGHN | (不锈钢防爆感应式)耐震电接点压力表 |
|
||||||
|
| YCAXF | (不锈钢双膜片)电接点差压表 |
|
||||||
|
| YCBXF | (不锈钢单膜片)电接点差压表 |
|
||||||
|
|
||||||
|
### 其他特殊系列
|
||||||
|
|
||||||
|
| 型号 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| YSZ | (两线)压力变送器 |
|
||||||
|
| YTZ | (电阻)远传压力表 |
|
||||||
|
| YTJA | (A级洁净型)压力表 |
|
||||||
|
| YTJB | (BA级洁净型)压力表 |
|
||||||
|
| YTJE | (EP级洁净型)压力表 |
|
||||||
|
| BF | (不锈钢)膜片压力表 |
|
||||||
|
| BFN | (不锈钢耐震)膜片压力表 |
|
||||||
|
| JBH | (不锈纲膜片)绝压表 |
|
||||||
|
| YTU | (不锈钢耐硫)压力表 |
|
||||||
|
| YTC | (不锈钢船用)压力表 |
|
||||||
|
|
||||||
|
### 特殊型号前缀
|
||||||
|
|
||||||
|
- **B前缀**: 膜片压力表 - 在基本型号前加"B",例如: BYX = 膜片电接点压力表
|
||||||
|
- **P前缀**: 隔膜压力表 - 在基本型号前加"P",例如: PYTHN = (不锈钢)耐震隔膜压力表
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 公称外径
|
||||||
|
|
||||||
|
| 代码 | 外径尺寸 |
|
||||||
|
|------|----------|
|
||||||
|
| 036 | 36mm |
|
||||||
|
| 040 | 40mm |
|
||||||
|
| 043 | 43mm |
|
||||||
|
| 046 | 46mm |
|
||||||
|
| 050 | 50mm |
|
||||||
|
| 053 | 53mm |
|
||||||
|
| 060 | 60mm |
|
||||||
|
| 063 | 63mm |
|
||||||
|
| 070 | 70mm |
|
||||||
|
| 075 | 75mm |
|
||||||
|
| 080 | 80mm |
|
||||||
|
| 090 | 90mm |
|
||||||
|
| 098 | 98mm |
|
||||||
|
| 100 | 100mm |
|
||||||
|
| 107 | 107mm |
|
||||||
|
| 120 | 120mm |
|
||||||
|
| 150 | 150mm |
|
||||||
|
| 160 | 160mm |
|
||||||
|
| 200 | 200mm |
|
||||||
|
| 250 | 250mm |
|
||||||
|
| 330 | 330mm |
|
||||||
|
|
||||||
|
**代码格式**: 3或4位数码
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 安装形式
|
||||||
|
|
||||||
|
### 径向安装
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| A0 | 径向无边 |
|
||||||
|
| AT | 径向前边 |
|
||||||
|
| AH | 径向后边 |
|
||||||
|
| AM | 膜片式径向 |
|
||||||
|
|
||||||
|
### 轴向安装
|
||||||
|
|
||||||
|
#### 中轴向
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| Z0 | 中轴向无边 |
|
||||||
|
| ZT | 中轴向前边 |
|
||||||
|
| ZZ | 中轴向中边 |
|
||||||
|
| ZH | 中轴向后边 |
|
||||||
|
| ZK | 中轴向卡子 |
|
||||||
|
|
||||||
|
#### 下轴向
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| B0 | 下轴向无边 |
|
||||||
|
| BT | 下轴向前边 |
|
||||||
|
| BZ | 下轴向中边 |
|
||||||
|
| BH | 下轴向后边 |
|
||||||
|
| BK | 下轴向卡子 |
|
||||||
|
|
||||||
|
### 其他安装形式
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| C0 | 八字无边 |
|
||||||
|
| CT | 八字前边 |
|
||||||
|
| CH | 八字后边 |
|
||||||
|
| JG | 接杆安装 |
|
||||||
|
| GS | 挂式 |
|
||||||
|
| FG | 矩形挂式 |
|
||||||
|
| GK | 2〞安装支架安装 |
|
||||||
|
| 00 | 特定型 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 壳体形式
|
||||||
|
|
||||||
|
### 表壳类型
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 00 | 特殊型 |
|
||||||
|
| 10 | 塑料表壳(非安全型) |
|
||||||
|
| 20 | 碳钢喷塑外壳 |
|
||||||
|
| 21 | 碳钢喷塑外壳、镀铬罩 |
|
||||||
|
| 22 | 碳钢喷塑外壳、安装式 |
|
||||||
|
| 23 | 碳钢喷塑外壳、焊接式 |
|
||||||
|
| 24 | 碳钢喷塑外壳,反装机芯,普通压力表 |
|
||||||
|
| 25 | 碳钢喷塑外壳、有机玻璃罩 |
|
||||||
|
| 30 | 坚固安全型压力表 |
|
||||||
|
| 40 | 压铸铝喷塑外壳压力表 |
|
||||||
|
|
||||||
|
#### 304外壳系列
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 50 | 304外壳,不可充油 |
|
||||||
|
| 51 | 304外壳、2件式 |
|
||||||
|
| 52 | 304外壳、安装式、可充油 |
|
||||||
|
| 53 | 304外壳、焊接式 |
|
||||||
|
| 54 | 304外壳、焊接式、防爆孔 |
|
||||||
|
| 55 | 304外壳有机玻璃罩 |
|
||||||
|
|
||||||
|
#### 316L外壳系列
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 60 | 316L外壳 |
|
||||||
|
| 61 | 316L外壳、2件式 |
|
||||||
|
| 62 | 316L外壳、安装式 |
|
||||||
|
| 63 | 316L外壳、焊接式 |
|
||||||
|
| 64 | 316L外壳、焊接式、防爆孔 |
|
||||||
|
| 65 | 316L外壳有机玻璃罩 |
|
||||||
|
|
||||||
|
#### 其他材质
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 70 | 铜外壳 |
|
||||||
|
|
||||||
|
### 罩壳类型
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 0 | 螺钉上紧式 |
|
||||||
|
| 1 | 内卡式 |
|
||||||
|
| 2 | 外卡式 |
|
||||||
|
| 3 | 滚边式 |
|
||||||
|
| 4 | 旋紧式 |
|
||||||
|
| 5 | 压紧式 |
|
||||||
|
| 6 | 卡圈式 |
|
||||||
|
| 7 | 合页边式 |
|
||||||
|
| 8 | 外卡锁式 |
|
||||||
|
| 9 | 特定型 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 过程连接&接液材质
|
||||||
|
|
||||||
|
### 过程连接
|
||||||
|
|
||||||
|
| 代码 | 规格 |
|
||||||
|
|------|------|
|
||||||
|
| M08 | M 8×1 |
|
||||||
|
| M10 | M 10×1 |
|
||||||
|
| M12 | M 12×1 |
|
||||||
|
| M14 | M 14×1.5 |
|
||||||
|
| M16 | M 16×1.5 |
|
||||||
|
| M20 | M 20×1.5 |
|
||||||
|
| G18 | G 1/8″ |
|
||||||
|
| G14 | G 1/4″ |
|
||||||
|
| G38 | G 3/8″ |
|
||||||
|
| G12 | G 1/2″ |
|
||||||
|
| G34 | G 3/4″ |
|
||||||
|
| G10 | G 1″ |
|
||||||
|
| R18 | ZG 1/8″ |
|
||||||
|
| R14 | ZG 1/4″ |
|
||||||
|
| R38 | ZG 3/8″ |
|
||||||
|
| R12 | ZG 1/2″ |
|
||||||
|
| R34 | ZG 3/4″ |
|
||||||
|
| Z18 | NPT1/8″ |
|
||||||
|
| Z14 | NPT1/4″ |
|
||||||
|
| Z38 | NPT3/8″ |
|
||||||
|
| Z12 | NPT1/2″ |
|
||||||
|
| Z34 | NPT3/4″ |
|
||||||
|
| V20 | 1/4VCR(M) |
|
||||||
|
| V30 | 1/4VCR(F) |
|
||||||
|
| V40 | 1/2VCR(M) |
|
||||||
|
| V50 | 1/2VCR(F) |
|
||||||
|
| U38 | 3/8-24 UNF |
|
||||||
|
| U10 | 9/16-18 UNF |
|
||||||
|
| U78 | 7/8-14 UNF |
|
||||||
|
| K00 | 快装连接 |
|
||||||
|
| K05 | 0.5″快装 |
|
||||||
|
| K10 | 1″快装 |
|
||||||
|
| K15 | 1.5″快装 |
|
||||||
|
| K20 | 2″快装 |
|
||||||
|
| K25 | 2.5″快装 |
|
||||||
|
| KT06 | Φ6 卡套连接 |
|
||||||
|
|
||||||
|
**注意**: 阴螺纹在螺纹符号后标记字母"F"
|
||||||
|
|
||||||
|
### 接液材质
|
||||||
|
|
||||||
|
| 代码 | 材质 |
|
||||||
|
| --- | ------- |
|
||||||
|
| 1 | 316L |
|
||||||
|
| 2 | 316 |
|
||||||
|
| 3 | 304 |
|
||||||
|
| 4 | HPb59-1 |
|
||||||
|
| 5 | 蒙乃尔 |
|
||||||
|
| 6 | 碳钢 |
|
||||||
|
| 7 | HC276 |
|
||||||
|
|
||||||
|
**注**: 其他材质代码参考选型软件
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 量程范围
|
||||||
|
|
||||||
|
### 常用计量单位
|
||||||
|
|
||||||
|
| 代码 | 单位 |
|
||||||
|
|------|------|
|
||||||
|
| M | MPa |
|
||||||
|
| K | kPa |
|
||||||
|
| A | Pa |
|
||||||
|
| B | bar |
|
||||||
|
| L | mbar |
|
||||||
|
| P | psi |
|
||||||
|
| G | kgf/cm² |
|
||||||
|
| g | inHg |
|
||||||
|
| e | mmHg |
|
||||||
|
| i | inH2O |
|
||||||
|
| C | cmH2O |
|
||||||
|
| 0 | mmH2O |
|
||||||
|
| t | atm |
|
||||||
|
| M0XA | MPa abs |
|
||||||
|
|
||||||
|
### MPa量程代码
|
||||||
|
|
||||||
|
#### 正压量程
|
||||||
|
|
||||||
|
| 代码 | 量程范围 |
|
||||||
|
|------|----------|
|
||||||
|
| M01 | 0~0.06 MPa |
|
||||||
|
| M02 | 0~0.1 MPa |
|
||||||
|
| M03 | 0~0.16 MPa |
|
||||||
|
| M04 | 0~0.25 MPa |
|
||||||
|
| M05 | 0~0.4 MPa |
|
||||||
|
| M06 | 0~0.6 MPa |
|
||||||
|
| M07 | 0~1 MPa |
|
||||||
|
| M08 | 0~1.6 MPa |
|
||||||
|
| M09 | 0~2.5 MPa |
|
||||||
|
| M10 | 0~4 MPa |
|
||||||
|
| M11 | 0~6 MPa |
|
||||||
|
| M12 | 0~10 MPa |
|
||||||
|
| M13 | 0~16 MPa |
|
||||||
|
| M14 | 0~25 MPa |
|
||||||
|
| M15 | 0~40 MPa |
|
||||||
|
| M16 | 0~60 MPa |
|
||||||
|
| M17 | 0~100 MPa |
|
||||||
|
| M18 | 0~160 MPa |
|
||||||
|
| M19 | 0~250 MPa |
|
||||||
|
|
||||||
|
#### 负压及复合量程
|
||||||
|
|
||||||
|
| 代码 | 量程范围 |
|
||||||
|
|------|----------|
|
||||||
|
| M30 | -0.1~0 MPa |
|
||||||
|
| M31 | -0.1~0.06 MPa |
|
||||||
|
| M32 | -0.1~0.15 MPa |
|
||||||
|
| M33 | -0.1~0.3 MPa |
|
||||||
|
|
||||||
|
#### 绝对压力量程
|
||||||
|
|
||||||
|
| 代码 | 量程范围 |
|
||||||
|
|------|----------|
|
||||||
|
| M02A | 0~0.1 MPa abs |
|
||||||
|
| M03A | 0~0.16 MPa abs |
|
||||||
|
| M04A | 0~0.25 MPa abs |
|
||||||
|
| M05A | 0~0.4 MPa abs |
|
||||||
|
| M06A | 0~0.6 MPa abs |
|
||||||
|
|
||||||
|
### kPa量程代码
|
||||||
|
|
||||||
|
#### 正压量程
|
||||||
|
|
||||||
|
| 代码 | 量程范围 |
|
||||||
|
|------|----------|
|
||||||
|
| K10 | 0~0.06 kPa |
|
||||||
|
| K11 | 0~0.1 kPa |
|
||||||
|
| K12 | 0~0.16 kPa |
|
||||||
|
| K13 | 0~0.25 kPa |
|
||||||
|
| K14 | 0~0.4 kPa |
|
||||||
|
| K15 | 0~0.6 kPa |
|
||||||
|
| K16 | 0~1 kPa |
|
||||||
|
| K17 | 0~1.6 kPa |
|
||||||
|
| K18 | 0~2.5 kPa |
|
||||||
|
| K19 | 0~4 kPa |
|
||||||
|
| K20 | 0~6 kPa |
|
||||||
|
| K21 | 0~10 kPa |
|
||||||
|
| K22 | 0~16 kPa |
|
||||||
|
| K23 | 0~25 kPa |
|
||||||
|
| K24 | 0~40 kPa |
|
||||||
|
| K25 | 0~60 kPa |
|
||||||
|
| K26 | 0~100 kPa |
|
||||||
|
| K27 | 0~160 kPa |
|
||||||
|
| K28 | 0~250 kPa |
|
||||||
|
| K29 | 0~400 kPa |
|
||||||
|
| K30 | 0~600 kPa |
|
||||||
|
|
||||||
|
#### 负压量程
|
||||||
|
|
||||||
|
| 代码 | 量程范围 |
|
||||||
|
|------|----------|
|
||||||
|
| K50 | -0.06~0 kPa |
|
||||||
|
| K51 | -0.1~0 kPa |
|
||||||
|
| K52 | -0.16~0 kPa |
|
||||||
|
| K53 | -0.4~0 kPa |
|
||||||
|
| K54 | -0.6~0 kPa |
|
||||||
|
| K55 | -1~0 kPa |
|
||||||
|
| K56 | -1.6~0 kPa |
|
||||||
|
|
||||||
|
**代码格式**: 8位以内数码
|
||||||
|
**注**: 其它量程代码参见选型软件
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 仪表特性
|
||||||
|
|
||||||
|
### 表头充油
|
||||||
|
|
||||||
|
| 代码 | 充油类型及温度范围 |
|
||||||
|
|------|-------------------|
|
||||||
|
| Y1 | 硅油A,-60℃~70℃(低温专用) |
|
||||||
|
| Y2 | 硅油B,-40℃~70℃(膜盒表专用) |
|
||||||
|
| Y3 | 硅油C,-40℃~70℃(压力表常规) |
|
||||||
|
| Y4 | 甘油水,-40℃~70℃ |
|
||||||
|
| Y5 | 无油耐震(阻尼机芯) |
|
||||||
|
| Y6 | 防静电油(电接点专用) |
|
||||||
|
| Y7 | 甘油,0℃~70℃ |
|
||||||
|
| Y8 | 氟油R,-50℃~70℃ |
|
||||||
|
| Y0 | 表头其他 |
|
||||||
|
|
||||||
|
### 附加功能
|
||||||
|
|
||||||
|
| 代码 | 功能说明 |
|
||||||
|
|------|----------|
|
||||||
|
| N1 | 内置指针装置 |
|
||||||
|
| N2 | 外置指针装置 |
|
||||||
|
| N3 | 调零指针 |
|
||||||
|
| N4 | 机芯限位 |
|
||||||
|
| N5 | 记忆装置 |
|
||||||
|
| N0 | 其他(备注内文字说明) |
|
||||||
|
|
||||||
|
### 电接点类型
|
||||||
|
|
||||||
|
**格式**: 接点型式(1位) + 开关信号(1位)
|
||||||
|
|
||||||
|
#### 接点型式
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| C | 磁助电接点 |
|
||||||
|
| D | 普通电接点 |
|
||||||
|
| E | 镀金磁助电接点 |
|
||||||
|
| F | 镀金普通电接点 |
|
||||||
|
| G | 感应电接点 |
|
||||||
|
| H | 干簧管电接点 |
|
||||||
|
|
||||||
|
#### 开关信号
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 1 | 单下限 |
|
||||||
|
| 2 | 单上限 |
|
||||||
|
| 3 | 双下限 |
|
||||||
|
| 4 | 常开上下限 |
|
||||||
|
| 5 | 常闭上下限 |
|
||||||
|
| 6 | 双上限 |
|
||||||
|
| 0 | 其他多接点信号(备注内文字说明) |
|
||||||
|
|
||||||
|
**代码格式**: 2位数码
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 表盘
|
||||||
|
|
||||||
|
### 单双刻度
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 0 | 单刻度 |
|
||||||
|
| M | 双刻度,内圈MPa |
|
||||||
|
| K | 双刻度,内圈kPa |
|
||||||
|
| P | 双刻度,内圈psi |
|
||||||
|
| G | 双刻度,内圈kgf/cm² |
|
||||||
|
| X00 | 双刻度,内圈量程无要求,按标配 |
|
||||||
|
|
||||||
|
**注**: 其他量程代码参见选型软件
|
||||||
|
|
||||||
|
### 表盘特性
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| A | 标准盘 |
|
||||||
|
| B | 英文盘 |
|
||||||
|
| C | 中性无标 |
|
||||||
|
| D | Wonder标 |
|
||||||
|
| E | FW标 |
|
||||||
|
|
||||||
|
**注**: 其他用户代码参见选型软件
|
||||||
|
|
||||||
|
### 仪表精度
|
||||||
|
|
||||||
|
| 代码 | 精度等级 |
|
||||||
|
|------|----------|
|
||||||
|
| 1 | 4.0级 |
|
||||||
|
| 2 | 2.5级 |
|
||||||
|
| 3 | 1.6(1.5)级 |
|
||||||
|
| 4 | 1.0级 |
|
||||||
|
| 5 | 0.4级 |
|
||||||
|
| 6 | 0.25级 |
|
||||||
|
| 0 | 无精度等级 |
|
||||||
|
|
||||||
|
### 特殊介质和特殊要求
|
||||||
|
|
||||||
|
| 代码 | 介质/要求 |
|
||||||
|
|------|----------|
|
||||||
|
| TA | 氨 |
|
||||||
|
| TO | 氧气 |
|
||||||
|
| TH | 氢气 |
|
||||||
|
| TY | 乙炔 |
|
||||||
|
| TQ | 其他可燃气体 |
|
||||||
|
| TB | 禁油 |
|
||||||
|
| TI | 氮气 |
|
||||||
|
|
||||||
|
### 表盘套色
|
||||||
|
|
||||||
|
**注**: 表盘套色(选型软件手动输入数值)
|
||||||
|
|
||||||
|
表盘套色主要分三色:黄色(Y)、绿色(G)、红色(R)
|
||||||
|
|
||||||
|
#### 套单色
|
||||||
|
|
||||||
|
格式: `RXXX`
|
||||||
|
示例: `R0.8~1` 代表0.8~1区域套红色
|
||||||
|
|
||||||
|
#### 套双色
|
||||||
|
|
||||||
|
格式: `GXXX.RXXX`
|
||||||
|
示例: `G0~0.7.R0.7~1` 代表0~0.7区域绿色,0.7~1区域红色
|
||||||
|
|
||||||
|
#### 套三色
|
||||||
|
|
||||||
|
格式: `YXXX.GXXX.RXXX`
|
||||||
|
示例: `Y0~0.2.G0.2~0.8.R0.8~1` 代表:
|
||||||
|
- 0~0.2区域套黄色
|
||||||
|
- 0.2~0.8区域套绿色
|
||||||
|
- 0.8~1区域套红色
|
||||||
|
|
||||||
|
### 双刻度盘刻度线颜色
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| nr | 标配,内红外黑 |
|
||||||
|
| wr | 内黑外红 |
|
||||||
|
|
||||||
|
### 刻度线红色标记
|
||||||
|
|
||||||
|
格式: `rxxx`
|
||||||
|
示例: `r0.35` 代表0.35刻度线为红色刻度线
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 附件
|
||||||
|
|
||||||
|
**示例格式**:
|
||||||
|
* `R3.M20F.M20.1`
|
||||||
|
|
||||||
|
说明:
|
||||||
|
- **R3**: 散热器
|
||||||
|
- **M20F**: 仪表接口(M20×1.5内螺纹)
|
||||||
|
- **M20**: 过程接口(M20×1.5外螺纹)
|
||||||
|
- **1**: 接液材质(316L)
|
||||||
|
|
||||||
|
* `WHP.70X20X1.3`
|
||||||
|
|
||||||
|
说明:
|
||||||
|
- **WHP**: 位号牌
|
||||||
|
- **70X20X1.3**: 长度X高度X厚度
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 法兰隔膜
|
||||||
|
|
||||||
|
### 隔膜化学密封附件型号
|
||||||
|
|
||||||
|
| 代码 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| F0 | 螺纹隔膜 |
|
||||||
|
| F1 | 焊接式螺纹隔膜 |
|
||||||
|
| F5 | 探入式螺纹隔膜 |
|
||||||
|
| F6A | 卫生型隔膜 |
|
||||||
|
| F6B | 散热卫生型隔膜 |
|
||||||
|
| F7A | 内螺纹螺母式卫生型隔膜 |
|
||||||
|
| F7B | 外螺纹螺母式卫生型隔膜 |
|
||||||
|
| F9 | 管道型隔膜化学密封 |
|
||||||
|
| F10 | 在线式隔膜化学密封 |
|
||||||
|
| FA | 螺纹压紧式法兰隔膜 |
|
||||||
|
| FB | 膜片整体平铺式法兰隔膜 |
|
||||||
|
| FC | 缩颈式法兰隔膜 |
|
||||||
|
| FD | 膜片中心内嵌式法兰隔膜 |
|
||||||
|
| FG | 探入式法兰隔膜 |
|
||||||
|
| FK | 安装空法兰 |
|
||||||
|
| FM | 工字式法兰隔膜 |
|
||||||
|
|
||||||
|
#### 特殊处理标记
|
||||||
|
|
||||||
|
- **P为喷涂式**: 例如 `FBP` = 膜片整体平铺式法兰隔膜喷涂PTFE
|
||||||
|
- **C为衬套式**: 例如 `FAC` = 螺纹压紧式法兰隔膜衬套PTFE
|
||||||
|
|
||||||
|
|
||||||
|
### 隔膜充油
|
||||||
|
|
||||||
|
| 代码 | 充油类型及温度范围 |
|
||||||
|
|------|-------------------|
|
||||||
|
| A | 硅油A,-55℃~220℃(低温专用) |
|
||||||
|
| B | 硅油B,-40℃~220℃(常规) |
|
||||||
|
| F | 硅油F,-30℃~200℃(食品级) |
|
||||||
|
| G | 硅油G,-10℃~300℃(高温) |
|
||||||
|
| J | 硅油J,-10℃~360℃(超高温) |
|
||||||
|
| N | 乙二醇,-50℃~100℃ |
|
||||||
|
| P | 甘油,0℃~95℃ |
|
||||||
|
| Q | 甘油水,-30℃~95℃ |
|
||||||
|
| R | 氟油R,-50℃~150℃ |
|
||||||
|
| 0 | 其他(其他油脂特殊说明) |
|
||||||
|
|
||||||
|
**注**: 高温硅油价格高,报价时提前咨询。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 选型代码格式说明
|
||||||
|
|
||||||
|
完整的产品选型代码由以下部分组成:
|
||||||
|
|
||||||
|
```
|
||||||
|
[型号] - [公称外径] . [安装形式] . [壳体形式] . [过程连接&接液材质] . [量程范围] . [仪表特性] | [表盘] | [附件] | [法兰隔膜]
|
||||||
|
```
|
||||||
|
|
||||||
|
例子:
|
||||||
|
* 表头 | 表盘 | 附件(多个) | 法兰隔膜
|
||||||
|
|
||||||
|
```
|
||||||
|
PYTHN-100.A0.541.M201.M06.N2,N3.Y3|BP-088.2312.M06.0A3|WHP.70X20X1.3^GYBHQ-FW.M20F.M20.3.M06|FB-5020.RF3.049.1.M20F.B
|
||||||
|
```
|
||||||
|
|
||||||
|
* 表头 | 表盘 | 附件 | 法兰隔膜
|
||||||
|
|
||||||
|
```
|
||||||
|
PYTHN-100.A0.541.M201.M06.N2,N3.Y3|BP-088.2312.M06.0A3|GYBHQ-FW.M20F.M20.3.M06|FB-5020.RF3.049.1.M20F.B
|
||||||
|
```
|
||||||
|
|
||||||
|
* 表头 | 表盘 | 附件
|
||||||
|
|
||||||
|
```
|
||||||
|
PYTHN-100.A0.541.M201.M06.N2,N3.Y3|BP-088.2312.M06.0A3|GYBHQ-FW.M20F.M20.3.M06
|
||||||
|
```
|
||||||
|
|
||||||
|
* 表头 | 表盘 | 法兰隔膜
|
||||||
|
|
||||||
|
```
|
||||||
|
PYTHN-100.A0.541.M201.M06.N2,N3.Y3|BP-088.2312.M06.0A3|FB-5020.RF3.049.1.M20F.B
|
||||||
|
```
|
||||||
|
|
||||||
|
* 表头 | 表盘
|
||||||
|
|
||||||
|
```
|
||||||
|
PYTHN-100.A0.541.M201.M06.N2,N3.Y3|BP-088.2312.M06.0A3
|
||||||
|
```
|
||||||
|
|
||||||
|
### 代码位数说明
|
||||||
|
|
||||||
|
- **型号**: 字母组合
|
||||||
|
- **公称外径**: 3或4位数码
|
||||||
|
- **安装形式**: 2位字母/数字组合
|
||||||
|
- **壳体形式**: 2位数码(表壳) + 1位数码(罩壳)
|
||||||
|
- **过程连接**: 3位数码
|
||||||
|
- **量程范围**: 8位以内数码
|
||||||
|
- **仪表特性**: 2位数码或3位数码
|
||||||
|
- **表盘**: n位数码
|
||||||
|
- **附件**: n位数码
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 版本信息
|
||||||
|
|
||||||
|
**文档版本**: 20250806
|
||||||
|
**文档性质**: 公司内部资料,严禁外传
|
||||||
|
**编制单位**: 布莱迪公司
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*注: 本文档中未详细列出的代码和规格请参考选型软件获取完整信息。*
|
||||||
635
订单物料提取实现计划.md
Normal file
635
订单物料提取实现计划.md
Normal file
@@ -0,0 +1,635 @@
|
|||||||
|
# 订单物料提取功能实现计划
|
||||||
|
|
||||||
|
## 一、项目概述
|
||||||
|
|
||||||
|
### 1.1 目标
|
||||||
|
实现从产品型号中提取选择条件,并根据条件匹配 BOM 库中对应的物料,生成订单物料清单。
|
||||||
|
|
||||||
|
### 1.2 核心功能
|
||||||
|
1. **型号解析**:从产品型号中提取选择条件变量
|
||||||
|
2. **条件匹配引擎**:解析并匹配物料的选择条件表达式
|
||||||
|
3. **物料清单生成**:整合上述功能,生成符合产品配置的物料清单
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、产品型号编码规则
|
||||||
|
|
||||||
|
### 2.1 型号结构
|
||||||
|
```
|
||||||
|
[型号] - [公称外径] . [安装形式] . [壳体形式] . [过程连接&接液材质] . [量程范围] . [仪表特性] | [表盘] | [附件] | [法兰隔膜]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 示例分析
|
||||||
|
**输入**: `YTHN-100.A0.532.M203.M16.Y3|BP-095.2312.M16.PA3`
|
||||||
|
|
||||||
|
**表头部分**: `YTHN-100.A0.532.M203.M16.Y3`
|
||||||
|
|
||||||
|
| 部位 | 代码 | 含义 |
|
||||||
|
|------|------|------|
|
||||||
|
| 型号 | YTHN | 不锈钢耐震压力表 |
|
||||||
|
| 公称外径 | 100 | 100mm |
|
||||||
|
| 安装形式 | A0 | 径向无边 |
|
||||||
|
| 壳体形式 | 532 | 532系列(304外壳、内卡式) |
|
||||||
|
| 过程连接&接液材质 | M203 | M20螺纹 + 3号材质(304) |
|
||||||
|
| 量程范围 | M16 | 0~60 MPa |
|
||||||
|
| 仪表特性 | Y3 | 硅油C充油 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、需求分析
|
||||||
|
|
||||||
|
### 3.1 提取的选择条件
|
||||||
|
|
||||||
|
| 变量名 | 变量标签 | 提取位置 | 提取规则 |
|
||||||
|
|--------|----------|----------|----------|
|
||||||
|
| gclj | 过程连接 | 过程连接&接液材质 | 除最后一位外的字符 |
|
||||||
|
| jycz | 接液材质 | 过程连接&接液材质 | 最后一位数字 |
|
||||||
|
| lcfw | 量程范围 | 量程范围 | 完整代码 |
|
||||||
|
|
||||||
|
### 3.2 提取示例
|
||||||
|
|
||||||
|
**输入**: `M203`
|
||||||
|
- 过程连接(gclj): `M20`
|
||||||
|
- 接液材质(jycz): `3`
|
||||||
|
|
||||||
|
**输入**: `M16`
|
||||||
|
- 量程范围(lcfw): `M16`
|
||||||
|
|
||||||
|
### 3.3 匹配逻辑
|
||||||
|
|
||||||
|
#### 物料选择条件类型
|
||||||
|
1. **无条件**:条件为空,表示该物料适用于所有配置
|
||||||
|
2. **简单条件**:单个条件判断
|
||||||
|
- 例: `lcfw=M01`
|
||||||
|
3. **AND 条件**:多个条件同时满足
|
||||||
|
- 例: `lcfw=M02 AND gclj=M20`
|
||||||
|
4. **OR 条件**:任一条件满足即可
|
||||||
|
- 例: `lcfw=M01 OR lcfw=M02 OR lcfw=M03`
|
||||||
|
5. **NOT 条件**:排除特定条件
|
||||||
|
- 例: `lcfw=M02 AND gclj!=M20`
|
||||||
|
6. **复杂条件**:AND、OR、NOT 混合
|
||||||
|
- 例: `gclj=Z12 AND (lcfw=M01 OR lcfw=M02 OR lcfw=M03)`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、技术架构设计
|
||||||
|
|
||||||
|
### 4.1 模块结构
|
||||||
|
|
||||||
|
```
|
||||||
|
VBA/
|
||||||
|
├── ClassModules/
|
||||||
|
│ ├── clsBOMManager.cls # (已有)BOM管理器
|
||||||
|
│ ├── clsCategory.cls # (已有)类别类
|
||||||
|
│ ├── clsMaterialItem.cls # (已有)物料项类
|
||||||
|
│ ├── clsModelParser.cls # (新增)型号解析器
|
||||||
|
│ ├── clsConditionEvaluator.cls # (新增)条件表达式求值器
|
||||||
|
│ └── clsOrderMaterialList.cls # (新增)订单物料清单管理器
|
||||||
|
└── Modules/
|
||||||
|
└── modOrderProcessor.bas # (新增)订单处理模块
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 类设计
|
||||||
|
|
||||||
|
#### 4.2.1 clsModelParser(型号解析器)
|
||||||
|
|
||||||
|
**职责**: 解析产品型号,提取选择条件
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
```vba
|
||||||
|
Public ModelCode As String ' 完整型号代码
|
||||||
|
Public HeaderPart As String ' 表头部分
|
||||||
|
Public DialPart As String ' 表盘部分
|
||||||
|
Public AccessoryPart As String ' 附件部分
|
||||||
|
Public FlangePart As String ' 法兰隔膜部分
|
||||||
|
```
|
||||||
|
|
||||||
|
**方法**:
|
||||||
|
```vba
|
||||||
|
' 解析型号
|
||||||
|
Public Sub ParseModel(modelCode As String)
|
||||||
|
|
||||||
|
' 提取表头部分
|
||||||
|
Public Function ExtractHeader() As String
|
||||||
|
|
||||||
|
' 提取过程连接代码
|
||||||
|
Public Function GetProcessConnection() As String
|
||||||
|
|
||||||
|
' 提取接液材质代码
|
||||||
|
Public Function GetWettedMaterial() As String
|
||||||
|
|
||||||
|
' 提取量程范围代码
|
||||||
|
Public Function GetRangeCode() As String
|
||||||
|
|
||||||
|
' 获取所有选择条件
|
||||||
|
Public Function GetSelectionConditions() As Object
|
||||||
|
```
|
||||||
|
|
||||||
|
**示例数据结构**:
|
||||||
|
```vba
|
||||||
|
' 返回字典对象
|
||||||
|
' Key: 变量名 (如 "gclj", "jycz", "lcfw")
|
||||||
|
' Value: 变量值 (如 "M20", "3", "M16")
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 4.2.2 clsConditionEvaluator(条件表达式求值器)
|
||||||
|
|
||||||
|
**职责**: 解析和求值物料选择条件表达式
|
||||||
|
|
||||||
|
**方法**:
|
||||||
|
```vba
|
||||||
|
' 求值条件表达式
|
||||||
|
' 参数:
|
||||||
|
' conditionExpr - 条件表达式 (如 "lcfw=M02 AND gclj=M20")
|
||||||
|
' conditionsDict - 从型号提取的条件字典
|
||||||
|
' 返回: Boolean - 是否匹配
|
||||||
|
Public Function Evaluate(conditionExpr As String, _
|
||||||
|
conditionsDict As Object) As Boolean
|
||||||
|
|
||||||
|
' 解析条件表达式为抽象语法树(AST)
|
||||||
|
Private Function ParseExpression(expr As String) As Object
|
||||||
|
|
||||||
|
' 求值单个条件
|
||||||
|
' 例: "lcfw=M02" -> True/False
|
||||||
|
Private Function EvaluateSingleCondition(condition As String, _
|
||||||
|
conditionsDict As Object) As Boolean
|
||||||
|
|
||||||
|
' 求值 AND 表达式
|
||||||
|
Private Function EvaluateAndExpression(conditions As Collection, _
|
||||||
|
conditionsDict As Object) As Boolean
|
||||||
|
|
||||||
|
' 求值 OR 表达式
|
||||||
|
Private Function EvaluateOrExpression(conditions As Collection, _
|
||||||
|
conditionsDict As Object) As Boolean
|
||||||
|
|
||||||
|
' 求值 NOT 表达式
|
||||||
|
Private Function EvaluateNotExpression(condition As String, _
|
||||||
|
conditionsDict As Object) As Boolean
|
||||||
|
```
|
||||||
|
|
||||||
|
**支持的运算符**:
|
||||||
|
- `=` : 等于
|
||||||
|
- `!=` 或 `<>` : 不等于
|
||||||
|
- `AND` : 逻辑与
|
||||||
|
- `OR` : 逻辑或
|
||||||
|
- `()` : 分组优先级
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 4.2.3 clsOrderMaterialList(订单物料清单管理器)
|
||||||
|
|
||||||
|
**职责**: 管理单个订单的物料清单
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
```vba
|
||||||
|
Public OrderModel As String ' 订单型号
|
||||||
|
Public OrderConditions As Object ' 订单选择条件字典
|
||||||
|
Public SelectedMaterials As Collection ' 匹配的物料集合
|
||||||
|
```
|
||||||
|
|
||||||
|
**方法**:
|
||||||
|
```vba
|
||||||
|
' 根据订单型号生成物料清单
|
||||||
|
Public Sub GenerateMaterialList(modelCode As String, _
|
||||||
|
bomMgr As clsBOMManager)
|
||||||
|
|
||||||
|
' 筛选符合条件的物料
|
||||||
|
' 参数:
|
||||||
|
' categoryName - 类别名称
|
||||||
|
' bomMgr - BOM管理器
|
||||||
|
Private Function FilterMaterialsByCategory(categoryName As String, _
|
||||||
|
bomMgr As clsBOMManager) As Collection
|
||||||
|
|
||||||
|
' 获取物料汇总信息
|
||||||
|
Public Function GetMaterialSummary() As String
|
||||||
|
|
||||||
|
' 导出物料清单到工作表
|
||||||
|
Public Sub ExportToWorksheet(ws As Worksheet)
|
||||||
|
|
||||||
|
' 打印物料清单到立即窗口
|
||||||
|
Public Sub PrintToImmediateWindow()
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 4.2.4 clsBOMManager 扩展
|
||||||
|
|
||||||
|
**新增方法**:
|
||||||
|
```vba
|
||||||
|
' 根据选择条件获取物料清单
|
||||||
|
' 参数:
|
||||||
|
' categoryName - 类别名称
|
||||||
|
' conditionsDict - 选择条件字典
|
||||||
|
' 返回: 匹配的物料集合
|
||||||
|
Public Function GetMaterialsByConditions(categoryName As String, _
|
||||||
|
conditionsDict As Object) As Collection
|
||||||
|
|
||||||
|
' 获取整个订单的物料清单
|
||||||
|
' 参数:
|
||||||
|
' conditionsDict - 从型号提取的选择条件字典
|
||||||
|
' useParent - 是否使用父类别领料方式
|
||||||
|
' 返回: 所有类别的匹配物料汇总
|
||||||
|
Public Function GetOrderMaterials(conditionsDict As Object, _
|
||||||
|
Optional useParent As Boolean = True) As Collection
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、实现步骤
|
||||||
|
|
||||||
|
### 阶段一:型号解析器(clsModelParser)
|
||||||
|
**优先级**: 高
|
||||||
|
|
||||||
|
**任务清单**:
|
||||||
|
1. 创建 `clsModelParser.cls` 类模块
|
||||||
|
2. 实现型号分段解析(表头、表盘、附件、法兰隔膜)
|
||||||
|
3. 实现表头部分的详细解析
|
||||||
|
4. 实现选择条件提取方法
|
||||||
|
5. 编写单元测试用例
|
||||||
|
|
||||||
|
**测试用例**:
|
||||||
|
```vba
|
||||||
|
Sub TestModelParser()
|
||||||
|
Dim parser As New clsModelParser
|
||||||
|
Dim conditions As Object
|
||||||
|
|
||||||
|
' 测试1: 标准型号
|
||||||
|
parser.ParseModel "YTHN-100.A0.532.M203.M16.Y3|BP-095.2312.M16.PA3"
|
||||||
|
Set conditions = parser.GetSelectionConditions()
|
||||||
|
|
||||||
|
Debug.Assert conditions("gclj") = "M20"
|
||||||
|
Debug.Assert conditions("jycz") = "3"
|
||||||
|
Debug.Assert conditions("lcfw") = "M16"
|
||||||
|
|
||||||
|
' 测试2: 不同过程连接
|
||||||
|
parser.ParseModel "YTHN-100.A0.532.Z121.M06.Y3"
|
||||||
|
Set conditions = parser.GetSelectionConditions()
|
||||||
|
|
||||||
|
Debug.Assert conditions("gclj") = "Z12"
|
||||||
|
Debug.Assert conditions("jycz") = "1"
|
||||||
|
Debug.Assert conditions("lcfw") = "M06"
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 阶段二:条件表达式求值器(clsConditionEvaluator)
|
||||||
|
**优先级**: 高
|
||||||
|
|
||||||
|
**任务清单**:
|
||||||
|
1. 创建 `clsConditionEvaluator.cls` 类模块
|
||||||
|
2. 实现条件表达式词法分析(分词)
|
||||||
|
3. 实现条件表达式语法分析(构建 AST)
|
||||||
|
4. 实现各种运算符的求值逻辑
|
||||||
|
5. 处理括号优先级
|
||||||
|
6. 编写单元测试用例
|
||||||
|
|
||||||
|
**测试用例**:
|
||||||
|
```vba
|
||||||
|
Sub TestConditionEvaluator()
|
||||||
|
Dim evaluator As New clsConditionEvaluator
|
||||||
|
Dim conditions As Object
|
||||||
|
Set conditions = CreateObject("Scripting.Dictionary")
|
||||||
|
|
||||||
|
conditions("gclj") = "M20"
|
||||||
|
conditions("jycz") = "3"
|
||||||
|
conditions("lcfw") = "M16"
|
||||||
|
|
||||||
|
' 测试1: 简单条件
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M16", conditions) = True
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M02", conditions) = False
|
||||||
|
|
||||||
|
' 测试2: AND 条件
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M16 AND gclj=M20", conditions) = True
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M02 AND gclj=M20", conditions) = False
|
||||||
|
|
||||||
|
' 测试3: OR 条件
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M16 OR lcfw=M02", conditions) = True
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M01 OR lcfw=M02", conditions) = False
|
||||||
|
|
||||||
|
' 测试4: NOT 条件
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M16 AND gclj!=M20", conditions) = False
|
||||||
|
Debug.Assert evaluator.Evaluate("lcfw=M16 AND gclj!=Z12", conditions) = True
|
||||||
|
|
||||||
|
' 测试5: 复杂条件
|
||||||
|
Debug.Assert evaluator.Evaluate("gclj=Z12 AND (lcfw=M01 OR lcfw=M02 OR lcfw=M16)", conditions) = False
|
||||||
|
|
||||||
|
' 测试6: 空条件
|
||||||
|
Debug.Assert evaluator.Evaluate("", conditions) = True
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 阶段三:BOM管理器扩展
|
||||||
|
**优先级**: 中
|
||||||
|
|
||||||
|
**任务清单**:
|
||||||
|
1. 在 `clsBOMManager.cls` 中添加 `GetMaterialsByConditions()` 方法
|
||||||
|
2. 在 `clsBOMManager.cls` 中添加 `GetOrderMaterials()` 方法
|
||||||
|
3. 集成条件求值器
|
||||||
|
4. 编写单元测试用例
|
||||||
|
|
||||||
|
**测试用例**:
|
||||||
|
```vba
|
||||||
|
Sub TestBOMManagerConditions()
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
Dim conditions As Object
|
||||||
|
Dim materials As Collection
|
||||||
|
|
||||||
|
' 加载数据
|
||||||
|
bomMgr.LoadData _
|
||||||
|
ThisWorkbook.Worksheets("领料配置"), _
|
||||||
|
ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
|
||||||
|
' 准备条件
|
||||||
|
Set conditions = CreateObject("Scripting.Dictionary")
|
||||||
|
conditions("gclj") = "M20"
|
||||||
|
conditions("lcfw") = "M16"
|
||||||
|
|
||||||
|
' 测试: 获取部件类别的匹配物料
|
||||||
|
Set materials = bomMgr.GetMaterialsByConditions("部件", conditions)
|
||||||
|
|
||||||
|
' 验证结果
|
||||||
|
Debug.Print "匹配物料数量: " & materials.Count
|
||||||
|
' 应该只有 01011019018 (高压接头部件) 匹配
|
||||||
|
|
||||||
|
Dim mat As clsMaterialItem
|
||||||
|
For Each mat In materials
|
||||||
|
Debug.Print mat.code & " - " & mat.Name
|
||||||
|
Next mat
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 阶段四:订单物料清单管理器(clsOrderMaterialList)
|
||||||
|
**优先级**: 中
|
||||||
|
|
||||||
|
**任务清单**:
|
||||||
|
1. 创建 `clsOrderMaterialList.cls` 类模块
|
||||||
|
2. 实现物料清单生成逻辑
|
||||||
|
3. 实现物料汇总统计
|
||||||
|
4. 实现多种输出格式(工作表、立即窗口)
|
||||||
|
5. 编写单元测试用例
|
||||||
|
|
||||||
|
**测试用例**:
|
||||||
|
```vba
|
||||||
|
Sub TestOrderMaterialList()
|
||||||
|
Dim orderList As New clsOrderMaterialList
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
|
||||||
|
' 加载 BOM 数据
|
||||||
|
bomMgr.LoadData _
|
||||||
|
ThisWorkbook.Worksheets("领料配置"), _
|
||||||
|
ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
|
||||||
|
' 生成物料清单
|
||||||
|
orderList.GenerateMaterialList "YTHN-100.A0.532.M203.M16.Y3", bomMgr
|
||||||
|
|
||||||
|
' 打印到立即窗口
|
||||||
|
orderList.PrintToImmediateWindow
|
||||||
|
|
||||||
|
' 导出到工作表
|
||||||
|
Dim ws As Worksheet
|
||||||
|
Set ws = ThisWorkbook.Worksheets.Add
|
||||||
|
orderList.ExportToWorksheet ws
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 阶段五:订单处理模块(modOrderProcessor)
|
||||||
|
**优先级**: 低
|
||||||
|
|
||||||
|
**任务清单**:
|
||||||
|
1. 创建 `modOrderProcessor.bas` 模块
|
||||||
|
2. 实现批量订单处理过程
|
||||||
|
3. 实现单订单物料清单生成
|
||||||
|
4. 实现订单物料清单打印和导出
|
||||||
|
5. 编写用户界面宏
|
||||||
|
|
||||||
|
**示例宏**:
|
||||||
|
```vba
|
||||||
|
' 主入口:生成订单物料清单
|
||||||
|
Sub GenerateOrderMaterialList()
|
||||||
|
Dim modelCode As String
|
||||||
|
modelCode = InputBox("请输入产品型号:", "生成订单物料清单")
|
||||||
|
|
||||||
|
If modelCode = "" Then Exit Sub
|
||||||
|
|
||||||
|
Dim orderList As New clsOrderMaterialList
|
||||||
|
Dim bomMgr As New clsBOMManager
|
||||||
|
|
||||||
|
bomMgr.LoadData _
|
||||||
|
ThisWorkbook.Worksheets("领料配置"), _
|
||||||
|
ThisWorkbook.Worksheets("平台配置清单")
|
||||||
|
|
||||||
|
orderList.GenerateMaterialList modelCode, bomMgr
|
||||||
|
|
||||||
|
' 输出到工作表
|
||||||
|
Dim ws As Worksheet
|
||||||
|
Application.DisplayAlerts = False
|
||||||
|
On Error Resume Next
|
||||||
|
ThisWorkbook.Worksheets("订单物料清单").Delete
|
||||||
|
On Error GoTo 0
|
||||||
|
Application.DisplayAlerts = True
|
||||||
|
|
||||||
|
Set ws = ThisWorkbook.Worksheets.Add
|
||||||
|
ws.Name = "订单物料清单"
|
||||||
|
orderList.ExportToWorksheet ws
|
||||||
|
|
||||||
|
MsgBox "订单物料清单生成完成!", vbInformation
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' 快速打印到立即窗口
|
||||||
|
Sub QuickPrintOrderMaterials()
|
||||||
|
Dim modelCode As String
|
||||||
|
modelCode = InputBox("请输入产品型号:", "快速打印订单物料")
|
||||||
|
|
||||||
|
If modelCode = "" Then Exit Sub
|
||||||
|
|
||||||
|
' ... 实现逻辑
|
||||||
|
End Sub
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、数据流程图
|
||||||
|
|
||||||
|
```
|
||||||
|
用户输入产品型号
|
||||||
|
↓
|
||||||
|
[clsModelParser] 解析型号
|
||||||
|
↓
|
||||||
|
提取选择条件字典 {gclj: M20, jycz: 3, lcfw: M16}
|
||||||
|
↓
|
||||||
|
[clsOrderMaterialList] 生成物料清单
|
||||||
|
↓
|
||||||
|
遍历所有根类别
|
||||||
|
↓
|
||||||
|
对每个类别调用 [clsBOMManager.GetMaterialsByConditions()]
|
||||||
|
↓
|
||||||
|
遍历类别下的所有物料
|
||||||
|
↓
|
||||||
|
对每个物料使用 [clsConditionEvaluator.Evaluate()]
|
||||||
|
↓
|
||||||
|
匹配成功 → 添加到结果集合
|
||||||
|
匹配失败 → 跳过
|
||||||
|
↓
|
||||||
|
汇总所有匹配物料
|
||||||
|
↓
|
||||||
|
输出到工作表 / 立即窗口
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、关键技术难点
|
||||||
|
|
||||||
|
### 7.1 条件表达式解析
|
||||||
|
|
||||||
|
**难点**:
|
||||||
|
- 支持括号嵌套
|
||||||
|
- 运算符优先级处理
|
||||||
|
- 复杂逻辑组合
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
- 使用递归下降分析法
|
||||||
|
- 构建抽象语法树(AST)
|
||||||
|
- 后序遍历求值
|
||||||
|
|
||||||
|
### 7.2 型号格式多样性
|
||||||
|
|
||||||
|
**难点**:
|
||||||
|
- 部分型号可能缺少某些部分
|
||||||
|
- 附件和法兰隔膜数量不固定
|
||||||
|
- 过程连接代码长度不固定
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
- 使用正则表达式(如果 VBA 支持)
|
||||||
|
- 分段解析,容错处理
|
||||||
|
- 提供默认值
|
||||||
|
|
||||||
|
### 7.3 性能优化
|
||||||
|
|
||||||
|
**难点**:
|
||||||
|
- 大量物料匹配可能导致性能问题
|
||||||
|
- 复杂条件表达式求值耗时
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
- 缓存求值结果
|
||||||
|
- 优先筛选简单条件
|
||||||
|
- 减少不必要的条件求值
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、测试计划
|
||||||
|
|
||||||
|
### 8.1 单元测试
|
||||||
|
|
||||||
|
每个类都需要独立的单元测试模块:
|
||||||
|
|
||||||
|
1. **TestModelParser**: 测试型号解析功能
|
||||||
|
2. **TestConditionEvaluator**: 测试条件求值功能
|
||||||
|
3. **TestBOMManagerConditions**: 测试 BOM 管理器扩展功能
|
||||||
|
4. **TestOrderMaterialList**: 测试订单物料清单生成功能
|
||||||
|
|
||||||
|
### 8.2 集成测试
|
||||||
|
|
||||||
|
测试完整的订单物料生成流程:
|
||||||
|
|
||||||
|
1. 测试标准型号
|
||||||
|
2. 测试特殊配置型号
|
||||||
|
3. 测试边界条件
|
||||||
|
4. 测试异常输入
|
||||||
|
|
||||||
|
### 8.3 测试数据集
|
||||||
|
|
||||||
|
基于真实订单数据准备测试用例:
|
||||||
|
|
||||||
|
| 测试用例 | 型号 | 预期匹配物料数 |
|
||||||
|
|----------|------|----------------|
|
||||||
|
| 标准配置 | YTHN-100.A0.532.M203.M16.Y3 | 待定 |
|
||||||
|
| 不同螺纹 | YTHN-100.A0.532.Z121.M06.Y3 | 待定 |
|
||||||
|
| 小量程 | YTHN-100.A0.532.M201.M02.Y3 | 待定 |
|
||||||
|
| 大量程 | YTHN-100.A0.532.M201.M16.Y3 | 待定 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、文档需求
|
||||||
|
|
||||||
|
### 9.1 代码注释
|
||||||
|
- 所有类模块需要详细的中文注释
|
||||||
|
- 关键算法需要解释说明
|
||||||
|
- 复杂逻辑需要举例说明
|
||||||
|
|
||||||
|
### 9.2 使用说明
|
||||||
|
创建 `订单物料清单使用说明.md`,包括:
|
||||||
|
- 功能概述
|
||||||
|
- 使用方法
|
||||||
|
- API 文档
|
||||||
|
- 常见问题
|
||||||
|
|
||||||
|
### 9.3 开发文档
|
||||||
|
- 类设计文档
|
||||||
|
- 接口定义文档
|
||||||
|
- 测试报告
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十、实施时间表
|
||||||
|
|
||||||
|
| 阶段 | 任务 | 预计工作量 |
|
||||||
|
|------|------|------------|
|
||||||
|
| 1 | 型号解析器 | 2-3 天 |
|
||||||
|
| 2 | 条件表达式求值器 | 3-4 天 |
|
||||||
|
| 3 | BOM管理器扩展 | 1-2 天 |
|
||||||
|
| 4 | 订单物料清单管理器 | 2-3 天 |
|
||||||
|
| 5 | 订单处理模块 | 1-2 天 |
|
||||||
|
| 6 | 测试与调试 | 2-3 天 |
|
||||||
|
| 7 | 文档编写 | 1-2 天 |
|
||||||
|
|
||||||
|
**总计**: 约 12-19 天
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十一、风险评估
|
||||||
|
|
||||||
|
### 11.1 技术风险
|
||||||
|
- **风险**: VBA 不支持复杂的字符串处理
|
||||||
|
- **应对**: 使用 VBScript Regular Expression 对象
|
||||||
|
|
||||||
|
### 11.2 数据风险
|
||||||
|
- **风险**: BOM 数据不完整或格式错误
|
||||||
|
- **应对**: 增加数据验证和容错处理
|
||||||
|
|
||||||
|
### 11.3 性能风险
|
||||||
|
- **风险**: 大量物料匹配导致响应缓慢
|
||||||
|
- **应对**: 优化算法,增加缓存机制
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十二、后续扩展方向
|
||||||
|
|
||||||
|
1. **批量订单处理**: 支持从 Excel 列表批量生成物料清单
|
||||||
|
2. **条件配置化**: 将提取规则配置化,支持动态调整
|
||||||
|
3. **物料替代方案**: 支持物料替代品推荐
|
||||||
|
4. **库存集成**: 与库存系统集成,实时查询可用库存
|
||||||
|
5. **成本计算**: 根据物料清单计算订单成本
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 附录:参考资料
|
||||||
|
|
||||||
|
- 布莱迪公司压力表产品选型大表.md
|
||||||
|
- clsBOMManager使用说明.md
|
||||||
|
- VBA 编程规范
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档版本**: 1.0
|
||||||
|
**创建日期**: 2025-01-20
|
||||||
|
**编制人**: Claude Code
|
||||||
|
**审核状态**: 待审核
|
||||||
Reference in New Issue
Block a user