From c204a8878e8a5d8e56a984ba7603270bbcc55f93 Mon Sep 17 00:00:00 2001 From: Misaka_Company Date: Thu, 12 Feb 2026 13:03:56 +0800 Subject: [PATCH] docs: add BOM extraction requirements and minor code fixes - 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 --- VBA_BOMConverter/Modules/M05_PreProcessor.bas | 10 +- ...莱迪压力表BOM自动提取系统需求规格说明书.md | 310 ++++++++++++++++++ 2 files changed, 315 insertions(+), 5 deletions(-) create mode 100644 reference_docs/布莱迪压力表BOM自动提取系统需求规格说明书.md diff --git a/VBA_BOMConverter/Modules/M05_PreProcessor.bas b/VBA_BOMConverter/Modules/M05_PreProcessor.bas index bfef866..17e3db8 100644 --- a/VBA_BOMConverter/Modules/M05_PreProcessor.bas +++ b/VBA_BOMConverter/Modules/M05_PreProcessor.bas @@ -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) @@ -629,4 +629,4 @@ Public Function GetAzxsMappedValue(key As String) As String Else GetAzxsMappedValue = "" End If -End Function +End Function \ No newline at end of file diff --git a/reference_docs/布莱迪压力表BOM自动提取系统需求规格说明书.md b/reference_docs/布莱迪压力表BOM自动提取系统需求规格说明书.md new file mode 100644 index 0000000..99344b7 --- /dev/null +++ b/reference_docs/布莱迪压力表BOM自动提取系统需求规格说明书.md @@ -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,N2,BOM库中是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` | + +--- + +**文档结束**