Files
AutoBOM-BOMForge/VBA/ClassModules/cBOMRow.cls
Misaka_Company 76a75c9a05 Add BOM repository module and enhance code formatting
- Add new mBOMRepository.bas module for data access layer with LoadAll/SaveAll/InsertNewBOMRow functions
- Refactor cBOMRow.cls property methods for better readability and formatting
- Add comprehensive unit tests for BOM repository functionality in mTestEngine

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 12:45:04 +08:00

163 lines
6.5 KiB
OpenEdge ABL
Raw Permalink 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.
' ==============================================================================
' 模块名称: cBOMRow
' 模块类别: 类模块 (Class Module)
' 所属项目: BOMForge
' 模块职责: 封装单行 BOM 数据,提供属性访问,并内置状态跟踪 (脏标记) 机制
' ==============================================================================
Option Explicit
' 内部变量:映射 Excel 数据列
Private pExcelRowIndex As Long ' 记录该对象对应 Excel 表中的物理行号,保存时定位用
Private pRowNo As Long ' 行号 (如 10, 20)
Private pModuleType As String ' 模块 (如 表壳, 罩壳, 接头)
Private pCode As String ' 代号
Private pItemName As String ' 名称 (使用 ItemName 避免与内部 Name 关键字冲突)
Private pQuantity As Double ' 数量
Private pCondition As String ' 选择条件 (核心修改字段)
Private pRemark As String ' 备注
Private pCategory As String ' 类别
Private pParentCategory As String ' 上层类别
Private pCategoryCondition As String ' 类别选用条件
Private pCode66 As String ' 66代码
Private pBIPBaseRowNo As String ' BIP行号基数
' 内部变量:状态追踪
Private pIsDirty As Boolean ' 脏标记True 表示对象数据被修改过,需要写回 Excel
' 初始化对象时,默认状态为干净 (未修改)
Private Sub Class_Initialize()
pIsDirty = False
End Sub
' ------------------------------------------------------------------------------
' 属性: ExcelRowIndex (物理行号)
' ------------------------------------------------------------------------------
Public Property Get ExcelRowIndex() As Long: ExcelRowIndex = pExcelRowIndex: End Property
Public Property Let ExcelRowIndex(ByVal vNewValue As Long): pExcelRowIndex = vNewValue: End Property
' ------------------------------------------------------------------------------
' 属性: RowNo (BOM行号)
' ------------------------------------------------------------------------------
Public Property Get RowNo() As Long: RowNo = pRowNo: End Property
Public Property Let RowNo(ByVal vNewValue As Long)
If pRowNo <> vNewValue Then pRowNo = vNewValue: pIsDirty = True
End Property
' ------------------------------------------------------------------------------
' 属性: ModuleType (模块)
' ------------------------------------------------------------------------------
Public Property Get ModuleType() As String: ModuleType = pModuleType: End Property
Public Property Let ModuleType(ByVal vNewValue As String)
If pModuleType <> vNewValue Then pModuleType = vNewValue: pIsDirty = True
End Property
' ------------------------------------------------------------------------------
' 属性: Code (代号)
' ------------------------------------------------------------------------------
Public Property Get Code() As String: Code = pCode: End Property
Public Property Let Code(ByVal vNewValue As String)
If pCode <> vNewValue Then pCode = vNewValue: pIsDirty = True
End Property
' ------------------------------------------------------------------------------
' 属性: ItemName (名称)
' ------------------------------------------------------------------------------
Public Property Get ItemName() As String: ItemName = pItemName: End Property
Public Property Let ItemName(ByVal vNewValue As String)
If pItemName <> vNewValue Then pItemName = vNewValue: pIsDirty = True
End Property
' ------------------------------------------------------------------------------
' 属性: Quantity (数量)
' ------------------------------------------------------------------------------
Public Property Get Quantity() As Double: Quantity = pQuantity: End Property
Public Property Let Quantity(ByVal vNewValue As Double)
If pQuantity <> vNewValue Then pQuantity = vNewValue: pIsDirty = True
End Property
' ------------------------------------------------------------------------------
' 属性: Condition (选择条件) - 这是本工具最核心要修改的字段
' ------------------------------------------------------------------------------
Public Property Get Condition() As String: Condition = pCondition: End Property
Public Property Let Condition(ByVal vNewValue As String)
' 只有当新写入的值和原有的值不一样时,才判定为被修改,打上脏标记
If pCondition <> vNewValue Then
pCondition = vNewValue
pIsDirty = True
End If
End Property
' ------------------------------------------------------------------------------
' 其他次要属性的 Get/Let
' ------------------------------------------------------------------------------
Public Property Get Remark() As String
Remark = pRemark
End Property
Public Property Let Remark(ByVal vNewValue As String)
If pRemark <> vNewValue Then
pRemark = vNewValue
pIsDirty = True
End If
End Property
Public Property Get Category() As String
Category = pCategory
End Property
Public Property Let Category(ByVal vNewValue As String)
If pCategory <> vNewValue Then
pCategory = vNewValue
pIsDirty = True
End If
End Property
Public Property Get ParentCategory() As String
ParentCategory = pParentCategory
End Property
Public Property Let ParentCategory(ByVal vNewValue As String)
If pParentCategory <> vNewValue Then
pParentCategory = vNewValue
pIsDirty = True
End If
End Property
Public Property Get CategoryCondition() As String
CategoryCondition = pCategoryCondition
End Property
Public Property Let CategoryCondition(ByVal vNewValue As String)
If pCategoryCondition <> vNewValue Then
pCategoryCondition = vNewValue
pIsDirty = True
End If
End Property
Public Property Get Code66() As String
Code66 = pCode66
End Property
Public Property Let Code66(ByVal vNewValue As String)
If pCode66 <> vNewValue Then
pCode66 = vNewValue
pIsDirty = True
End If
End Property
Public Property Get BIPBaseRowNo() As String
BIPBaseRowNo = pBIPBaseRowNo
End Property
Public Property Let BIPBaseRowNo(ByVal vNewValue As String)
If pBIPBaseRowNo <> vNewValue Then
pBIPBaseRowNo = vNewValue
pIsDirty = True
End If
End Property
' ------------------------------------------------------------------------------
' 状态追踪:只读的 IsDirty 和重置方法
' ------------------------------------------------------------------------------
Public Property Get IsDirty() As Boolean
IsDirty = pIsDirty
End Property
' Excel
Public Sub ResetDirtyFlag()
pIsDirty = False
End Sub