feat(clsBOMManager): add optional autoFallback param
Added the `autoFallback` optional parameter to `GetMaterialsByModel`. This flag controls whether the search automatically descends to subcategories when no matches are found in the target category. - Defaults to True to maintain previous recursive behavior. - When False, the search is restricted strictly to the specified category. - Updated documentation with usage examples and logic explanations.
This commit is contained in:
@@ -374,4 +374,129 @@ Sub Example5_ValidateMaterialConditions()
|
||||
wsValidation.Columns("A:D").AutoFit
|
||||
|
||||
MsgBox "条件验证完成!", vbInformation
|
||||
End Sub
|
||||
|
||||
' ========================================
|
||||
' 示例6: 对比启用/禁用自动降级的效果
|
||||
' ========================================
|
||||
Sub Example6_CompareAutoFallback()
|
||||
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
|
||||
|
||||
' 产品型号(使用可能导致类别缺失的型号)
|
||||
Dim modelStr As String
|
||||
modelStr = "YTHN-100.A0.532.M203.M17.Y3|BP-095.2312.M16.PA3"
|
||||
|
||||
' 创建对比结果表
|
||||
Dim wsCompare As Worksheet
|
||||
On Error Resume Next
|
||||
Application.DisplayAlerts = False
|
||||
ThisWorkbook.Worksheets("降级模式对比").Delete
|
||||
Application.DisplayAlerts = True
|
||||
On Error GoTo 0
|
||||
|
||||
Set wsCompare = ThisWorkbook.Worksheets.Add
|
||||
wsCompare.Name = "降级模式对比"
|
||||
|
||||
' 表头
|
||||
Dim row As Long
|
||||
row = 1
|
||||
wsCompare.Cells(row, 1).value = "型号"
|
||||
wsCompare.Cells(row, 2).value = modelStr
|
||||
row = row + 2
|
||||
|
||||
' 测试1: 启用自动降级
|
||||
wsCompare.Cells(row, 1).value = "模式1: 启用自动降级 (autoFallback=True)"
|
||||
wsCompare.Cells(row, 1).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
wsCompare.Cells(row, 1).value = "类别"
|
||||
wsCompare.Cells(row, 2).value = "代号"
|
||||
wsCompare.Cells(row, 3).value = "名称"
|
||||
wsCompare.Cells(row, 4).value = "数量"
|
||||
wsCompare.Cells(row, 5).value = "选择条件"
|
||||
wsCompare.Range("A" & row & ":E" & row).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
Dim materials As collection
|
||||
Dim mat As clsMaterialItem
|
||||
Dim i As Long
|
||||
|
||||
' 获取启用自动降级的物料
|
||||
Set materials = bomMgr.GetMaterialsByModel(modelStr, "部件", True)
|
||||
|
||||
If materials.Count = 0 Then
|
||||
wsCompare.Cells(row, 1).value = "(无物料)"
|
||||
row = row + 1
|
||||
Else
|
||||
For i = 1 To materials.Count
|
||||
Set mat = materials(i)
|
||||
wsCompare.Cells(row, 1).value = mat.Category
|
||||
wsCompare.Cells(row, 2).value = mat.code
|
||||
wsCompare.Cells(row, 3).value = mat.Name
|
||||
wsCompare.Cells(row, 4).value = mat.Quantity
|
||||
wsCompare.Cells(row, 5).value = IIf(mat.Condition = "", "(无)", mat.Condition)
|
||||
row = row + 1
|
||||
Next i
|
||||
End If
|
||||
|
||||
row = row + 1
|
||||
|
||||
' 测试2: 禁用自动降级
|
||||
wsCompare.Cells(row, 1).value = "模式2: 禁用自动降级 (autoFallback=False)"
|
||||
wsCompare.Cells(row, 1).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
wsCompare.Cells(row, 1).value = "类别"
|
||||
wsCompare.Cells(row, 2).value = "代号"
|
||||
wsCompare.Cells(row, 3).value = "名称"
|
||||
wsCompare.Cells(row, 4).value = "数量"
|
||||
wsCompare.Cells(row, 5).value = "选择条件"
|
||||
wsCompare.Range("A" & row & ":E" & row).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
' 获取禁用自动降级的物料
|
||||
Set materials = bomMgr.GetMaterialsByModel(modelStr, "部件", False)
|
||||
|
||||
If materials.Count = 0 Then
|
||||
wsCompare.Cells(row, 1).value = "(无物料 - 因为禁用降级)"
|
||||
wsCompare.Cells(row, 2).value = "说明"
|
||||
wsCompare.Cells(row, 3).value = "当父类别无匹配物料时,不会降级到子类别查找"
|
||||
row = row + 1
|
||||
Else
|
||||
For i = 1 To materials.Count
|
||||
Set mat = materials(i)
|
||||
wsCompare.Cells(row, 1).value = mat.Category
|
||||
wsCompare.Cells(row, 2).value = mat.code
|
||||
wsCompare.Cells(row, 3).value = mat.Name
|
||||
wsCompare.Cells(row, 4).value = mat.Quantity
|
||||
wsCompare.Cells(row, 5).value = IIf(mat.Condition = "", "(无)", mat.Condition)
|
||||
row = row + 1
|
||||
Next i
|
||||
End If
|
||||
|
||||
' 添加说明
|
||||
row = row + 1
|
||||
wsCompare.Cells(row, 1).value = "说明:"
|
||||
wsCompare.Cells(row, 1).Font.Bold = True
|
||||
row = row + 1
|
||||
wsCompare.Cells(row, 1).value = "• autoFallback=True (默认): 当""部件""类别无匹配物料时,自动降级到子类别""接头""、""弹性元件""等查找"
|
||||
row = row + 1
|
||||
wsCompare.Cells(row, 1).value = "• autoFallback=False: 仅在""部件""类别查找,即使有子类别也不降级,可能返回空集合"
|
||||
|
||||
' 格式化
|
||||
wsCompare.Columns("A:E").AutoFit
|
||||
wsCompare.Range("A1").Font.Bold = True
|
||||
|
||||
MsgBox "降级模式对比完成!" & vbCrLf & _
|
||||
"请查看工作表: 降级模式对比" & vbCrLf & vbCrLf & _
|
||||
"启用降级: " & bomMgr.GetMaterialsByModel(modelStr, "部件", True).Count & " 个物料" & vbCrLf & _
|
||||
"禁用降级: " & bomMgr.GetMaterialsByModel(modelStr, "部件", False).Count & " 个物料", _
|
||||
vbInformation
|
||||
End Sub
|
||||
Reference in New Issue
Block a user