docs: add BOM extraction requirements and minor code fixes
All checks were successful
NTFY Notification / notify (push) Successful in 2s

- Add BOM auto-extraction system requirements specification
- Minor property name fixes in M05_PreProcessor (.Pattern -> .pattern)
- Fix .Row property references to .row for consistency

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-02-12 13:03:56 +08:00
parent 093a2d0a3b
commit c204a8878e
2 changed files with 315 additions and 5 deletions

View File

@@ -71,7 +71,7 @@ End Function
' ------------------------------------------------------------------------------
Private Sub LoadLcfwMapping(wsMapping As Worksheet)
Dim lastRow As Long
lastRow = wsMapping.Cells(wsMapping.Rows.count, 1).End(xlUp).Row
lastRow = wsMapping.Cells(wsMapping.Rows.count, 1).End(xlUp).row
Dim i As Long
Dim key As String, val As String
@@ -94,7 +94,7 @@ End Sub
' ------------------------------------------------------------------------------
Private Sub LoadAzxsMapping(wsMapping As Worksheet)
Dim lastRow As Long
lastRow = wsMapping.Cells(wsMapping.Rows.count, 4).End(xlUp).Row
lastRow = wsMapping.Cells(wsMapping.Rows.count, 4).End(xlUp).row
Dim i As Long
Dim key As String, val As String
@@ -265,7 +265,7 @@ Private Function ApplyRegexMapping( _
With regex
.Global = True ' 全局匹配
.IgnoreCase = True ' 不区分大小写
.Pattern = pattern
.pattern = pattern
End With
' 执行匹配
@@ -309,7 +309,7 @@ Private Function ApplyRegexMapping( _
With exactRegex
.Global = False ' 只替换第一个匹配(从后向前,每次只处理一个)
.IgnoreCase = True
.Pattern = exactPattern
.pattern = exactPattern
End With
result = exactRegex.Replace(result, replacementStr)

View File

@@ -0,0 +1,310 @@
# 布莱迪压力表产品BOM自动提取系统
# 需求规格说明书
---
**文档版本**: V1.0
**创建日期**: 2025年2月
**编制部门**: 信息技术部
---
## 1. 项目概述
### 1.1 项目背景
布莱迪公司在压力表产品生产过程中需要根据客户订单的产品型号提取对应的BOM物料清单。当前手工提取流程存在效率低、易出错等问题。为提高工作效率减少人为错误需要开发一套基于Excel VBA的自动化BOM提取系统。
### 1.2 项目目标
本系统旨在实现以下目标:
1. 自动解析产品型号,提取关键参数
2. 基于提取参数自动匹配BOM库中的物料
3. 输出标准化的BOM清单便于物料领用
4. 记录异常情况,便于人工复核
5. 提供代码接口,支持未来功能扩展
---
## 2. 功能需求
### 2.1 产品型号解析功能
#### 2.1.1 型号结构识别
系统需要从完整产品型号中识别并提取表头部分。产品型号的完整格式为:
```
[表头]|[表盘]|[附件]|[法兰隔膜]
```
其中,仅提取表头部分,其余部分暂时丢弃。表头部分的标准结构为:
```
[型号]-[公称外径].[安装形式].[壳体形式].[过程连接&接液材质].[量程范围].[仪表特性]
```
#### 2.1.2 参数提取规则
系统需要按照以下规则提取各项参数:
| 参数名称 | 变量名 | 提取规则 |
|---------|--------|---------|
| 型号 | xh | '-'符号之前的字母组合预留暂不参与BOM匹配 |
| 公称外径 | gcwj | '-'符号之后,第一个'.'之前的数字预留暂不参与BOM匹配 |
| 安装形式 | azxs | 第一段A0 |
| 表壳形式 | bkxs | 第二段531包含表壳和罩壳代码 |
| 过程连接 | gclj | 第三段去除最后一位数字M203→M20 |
| 接液材质 | jycz | 第三段的最后一位数字M203→3 |
| 量程范围 | lcfw | 第四段M06 |
| 附加功能 | fjgn | 量程范围之后的所有段(用','或'.'分隔N3,N2 |
#### 2.1.3 型号完整性验证
系统需要验证表头型号是否包含完整的结构。如果型号缺少必要的段落,应记录为异常情况,并在提取备注中说明。
#### 2.1.4 测试用例
系统需要能够正确处理以下测试型号:
- `YTHN-100.A0.531.G123.M04.Y3|BP-088.2312.B09.0A3`
- `YTHN-100.BZ.531.M201.M09.Y3|BP-088.2312.M37.0A3`
- `YTHN-100.A0.531.M203.M06.Y3|BP-088.2312.M06.0A3|LSG-1.14x2.M20F.M20.3^HDJ.M20F.BW.14×2×60.3^TSFJ^WHP.70X20X1.3`
- `YTHN-100.A0.531.M203.P21.Y3|BP-088.2312.M39.0A3|HDJ.M20F.BW.14×2×60.3^LSG-1.14x2.M20F.M20.3^TSFJ^WHP.70X20X1.3`
- `YTHN-100.A0.531.M201.M03.N1.Y3|BP-088.2312.M31.0A4`
- `YTHN-100.A0.531.M201.M04.N1,N2.Y3|BP-088.2312.M32.0A3`
- `YTHN-100.A0.531.M201.M04.N1.N2.Y3|BP-088.2312.M32.0A3`
- `YTHN-100.A0.531.Z121.M07.Y3|BP-088.2312.M07.0A3`
- `YTHN-100.A0.531.Z121.M08.Y3|BP-088.2312.M08.0A3`
---
### 2.2 BOM匹配功能
#### 2.2.1 BOM库文件结构
BOM库数据保存在与当前工作簿同目录下的**BOM库.xlsx**文件中。该文件包含多个工作表,每个工作表代表一类物料,常见的工作表包括:
- 接头
- 弹性元件
- 机芯
- 部件
-
#### 2.2.2 匹配规则
系统采用AND逻辑进行匹配即BOM库记录中的所有条件列都必须满足才算匹配成功。具体规则如下
| 规则类型 | 说明 |
|---------|------|
| 空值匹配 | BOM库单元格为空时视为通配符Match All条件成立 |
| 否定匹配 | BOM库单元格以'!='开头(如:!=SCRJ则提取值不等于该值时条件成立 |
| 精确匹配 | BOM库单元格为普通值时提取值必须完全相等 |
| 包含匹配fjgn | 对于附加功能字段只要提取的功能列表包含BOM库中的值即可提取出N3,N2BOM库中是N3则匹配成功 |
#### 2.2.3 部件物料特殊处理
'部件'工作表中的记录比较特殊,每条记录包含三个物料的数据:
1. 部件物料本身
2. 接头物料
3. 弹性元件物料
**选择策略:**
- 优先选择'部件'物料
- 当'部件'物料库存不足时,选择'接头'和'弹性元件'物料
- 库存检查接口预留当前默认库存充足返回True
**部件物料验证规则:**
针对"部件"这个物料和其子物料"接头"和"弹性元件",在提取出的物料中,只有满足以下两种情况的一种,才算正常:
- 一条"部件"物料
- 一条"接头"物料 + 一条"弹性元件"物料
如果出现其他组合(如:只有接头没有弹性元件,或同时有部件和接头),则视为异常,需要在提取备注中记录。
#### 2.2.4 匹配结果验证
对于每个产品型号在各个物料类别工作表中应该匹配到恰好1条记录。以下情况视为异常
- 某个类别未匹配到任何记录0条
- 某个类别匹配到多条记录(>1条
所有异常情况需要记录到**提取备注**字段中,便于后续人工复核。
---
### 2.3 数据输入输出
#### 2.3.1 输入数据源
订单数据来源于当前工作簿中的某个工作表。该工作表应包含产品型号列,系统需要能够识别并读取该列数据。
#### 2.3.2 输出结果格式
系统将提取结果输出到当前工作簿的新工作表中。输出采用纵向展开格式,即每个物料一行,一个订单可能对应多行记录。
**输出字段包括:**
| 字段名称 | 说明 |
|---------|------|
| 原始产品型号 | 完整的产品型号字符串 |
| 提取条件值 | azxs、bkxs、gclj、jycz、lcfw、fjgn等参数的值 |
| 物料类型 | 如:机芯、部件、接头、弹性元件、边等 |
| 物料名称 | 从BOM库中提取的物料名称 |
| 物料编码 | 从BOM库中提取的物料编码 |
| 物料数量 | 从BOM库中提取的物料数量 |
| 提取备注 | 记录提取过程中的异常信息,如:型号不完整、匹配失败、匹配多条等 |
---
## 3. 技术规格要求
### 3.1 代码架构要求
#### 3.1.1 模块化设计
系统采用模块化设计,各功能模块之间保持解耦。主要模块包括:
- **型号解析模块**:负责解析产品型号,提取参数
- **BOM匹配模块**负责根据参数匹配BOM库中的物料
- **数据输出模块**:负责将结果写入工作表
- **库存查询模块**:负责查询物料库存状态(预留接口)
#### 3.1.2 接口设计
所有关键函数需要明确定义输入和输出接口。接口定义应包括:
- 函数名称和用途说明
- 输入参数:名称、类型、说明
- 输出结果:类型、说明
- 异常处理:可能的错误情况及处理方式
#### 3.1.3 代码注释
所有函数、过程必须包含详细的注释,说明:
- 功能描述
- 参数说明
- 返回值说明
- 使用示例
- 注意事项
---
### 3.2 质量保证要求
#### 3.2.1 单元测试
关键接口需要编写单元测试。测试应覆盖:
- 正常输入情况
- 边界值情况
- 异常输入情况
- 特殊字符处理
#### 3.2.2 异常处理
系统采用容错设计,遇到异常时继续运行,将异常信息记录在提取备注中。异常情况包括但不限于:
- 型号格式不完整
- BOM库文件不存在或无法打开
- 某类物料匹配失败0条或多条
- 数据类型不匹配
- 部件物料组合异常(不符合验证规则)
---
### 3.3 扩展性要求
#### 3.3.1 参数扩展
系统设计应支持未来新增提取参数。当前提取的参数包括azxs、bkxs、gclj、jycz、lcfw、fjgn。
未来可能需要提取的参数包括但不限于:
- lcdw量程单位
- btcy表头充油
- bp表盘
- dskd单双刻度
- 其他业务参数
#### 3.3.2 接口预留
系统需要预留以下接口:
| 接口名称 | 功能说明 |
|---------|---------|
| 库存查询接口 | 输入物料编码输出布尔值True=有库存False=无库存。当前默认返回True |
| 部件选择接口 | 输入:部件库存状态;输出:选择结果(部件或接头+弹性元件) |
---
## 4. 非功能性需求
### 4.1 性能要求
系统应能够在合理时间内完成BOM提取任务。对于包含100条订单记录的工作表处理时间应控制在1分钟以内。
### 4.2 可维护性
代码结构清晰,注释完整,便于后续维护和功能扩展。变量命名规范,使用有意义的名称。
### 4.3 可靠性
系统采用容错设计,即使遇到异常数据也能继续运行,确保已处理的数据不会丢失。所有异常情况都应被记录,便于追溯和排查问题。
---
## 5. 附录
### 5.1 可能的选择条件字段
以下是BOM库工作表中可能出现的所有选择条件字段系统在识别条件列时应灵活处理
| 变量名 | 变量标签 |
|-------|---------|
| azxs | 安装形式 |
| bkxs | 表壳形式 |
| gclj | 过程连接 |
| jycz | 接液材质 |
| lcdw | 量程单位 |
| lcfw | 量程范围 |
| fjgn | 附加功能 |
| btcy | 表头充油 |
| bp | 表盘 |
| dskd | 单双刻度 |
| nqlc | 内圈量程 |
| bptx | 表盘特性 |
| jddj | 精度等级 |
| cpdm | 产品代码 |
| tsjz | 特殊介质 |
| tsyq | 特殊要求 |
| bpts | 表盘套色 |
| kdxh | 刻度线红色 |
---
### 5.2 测试型号示例
以下测试型号可用于验证系统功能:
| 编号 | 产品型号 |
|-----|---------|
| 1 | `YTHN-100.A0.531.G123.M04.Y3|BP-088.2312.B09.0A3` |
| 2 | `YTHN-100.BZ.531.M201.M09.Y3|BP-088.2312.M37.0A3` |
| 3 | `YTHN-100.A0.531.M203.M06.Y3|BP-088.2312.M06.0A3|LSG-1.14x2.M20F.M20.3^HDJ.M20F.BW.14×2×60.3^TSFJ^WHP.70X20X1.3` |
| 4 | `YTHN-100.A0.531.M203.P21.Y3|BP-088.2312.M39.0A3|HDJ.M20F.BW.14×2×60.3^LSG-1.14x2.M20F.M20.3^TSFJ^WHP.70X20X1.3` |
| 5 | `YTHN-100.A0.531.M201.M03.N1.Y3|BP-088.2312.M31.0A4` |
| 6 | `YTHN-100.A0.531.M201.M04.N1,N2.Y3|BP-088.2312.M32.0A3` |
| 7 | `YTHN-100.A0.531.M201.M04.N1.N2.Y3|BP-088.2312.M32.0A3` |
| 8 | `YTHN-100.A0.531.Z121.M07.Y3|BP-088.2312.M07.0A3` |
| 9 | `YTHN-100.A0.531.Z121.M08.Y3|BP-088.2312.M08.0A3` |
---
**文档结束**