feat: track and return missing material categories in BOM
- Update GetValidMaterialsByModel to aggregate and return missing category names under the "MissingCategories" key. - Remove debug print statements and unused variables to improve code cleanliness. - Enhance result visualization to display completeness status with color formatting and detailed material tables.
This commit is contained in:
@@ -502,7 +502,7 @@ Sub Example6_CompareAutoFallback()
|
||||
End Sub
|
||||
|
||||
' ========================================
|
||||
' 示例7: 测试GetValidMaterialsByModel方法
|
||||
' 示例7: 测试GetValidMaterialsByModel方法 (使用内置的缺失列表)
|
||||
' ========================================
|
||||
Sub Example7_TestGetValidMaterialsByModel()
|
||||
Dim bomMgr As New clsBOMManager
|
||||
@@ -533,13 +533,11 @@ Sub Example7_TestGetValidMaterialsByModel()
|
||||
wsTest.Cells(row, 1).Font.Size = 14
|
||||
row = row + 2
|
||||
|
||||
' 测试多个型号
|
||||
' 定义测试型号
|
||||
Dim testModels() As Variant
|
||||
testModels = Array( _
|
||||
Array("YTHN-100.A0.532.M203.M16.Y3|BP-095.2312.M16.PA3", "完整型号测试1"), _
|
||||
Array("YTHN-100.A0.532.M203.M02.Y3|BP-095.2312.M02.PA3", "完整型号测试2"), _
|
||||
Array("YTHN-100.A0.532.M203.M12.Y3|BP-095.2312.M12.PA3", "完整型号测试3"), _
|
||||
Array("YTHN-100.A0.532.M203.M17.Y3", "可能不完整的型号") _
|
||||
Array("YTHN-100.A0.532.M203.M17.Y3", "缺失子类别测试") _
|
||||
)
|
||||
|
||||
Dim i As Long
|
||||
@@ -549,18 +547,22 @@ Sub Example7_TestGetValidMaterialsByModel()
|
||||
modelStr = testModels(i)(0)
|
||||
testName = testModels(i)(1)
|
||||
|
||||
' 调用GetValidMaterialsByModel
|
||||
' 1. 调用方法获取结果
|
||||
Dim result As collection
|
||||
Set result = bomMgr.GetValidMaterialsByModel(modelStr)
|
||||
|
||||
Dim materials As collection
|
||||
Dim missingCats As collection
|
||||
Dim isComplete As Boolean
|
||||
|
||||
Set materials = result("Materials")
|
||||
Set missingCats = result("MissingCategories") ' 直接获取缺失列表
|
||||
isComplete = result("IsComplete")
|
||||
|
||||
' 写入测试名称和型号
|
||||
' 2. 写入头部信息
|
||||
wsTest.Cells(row, 1).value = "测试 " & (i + 1) & ": " & testName
|
||||
wsTest.Cells(row, 1).Font.Bold = True
|
||||
wsTest.Cells(row, 1).Interior.Color = RGB(240, 240, 240)
|
||||
row = row + 1
|
||||
|
||||
wsTest.Cells(row, 1).value = "型号:"
|
||||
@@ -568,41 +570,58 @@ Sub Example7_TestGetValidMaterialsByModel()
|
||||
row = row + 1
|
||||
|
||||
wsTest.Cells(row, 1).value = "完整性:"
|
||||
wsTest.Cells(row, 2).value = IIf(isComplete, "?? 完整", "?? 不完整")
|
||||
wsTest.Cells(row, 2).value = IIf(isComplete, "✓ 完整", "✕ 不完整")
|
||||
If isComplete Then
|
||||
wsTest.Cells(row, 2).Font.Color = RGB(0, 128, 0) ' 绿色
|
||||
wsTest.Cells(row, 2).Font.Color = RGB(0, 128, 0)
|
||||
Else
|
||||
wsTest.Cells(row, 2).Font.Color = RGB(255, 0, 0) ' 红色
|
||||
wsTest.Cells(row, 2).Font.Color = RGB(255, 0, 0)
|
||||
End If
|
||||
wsTest.Cells(row, 2).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
wsTest.Cells(row, 1).value = "物料数量:"
|
||||
wsTest.Cells(row, 2).value = materials.count
|
||||
|
||||
' 3. 打印匹配到的物料
|
||||
wsTest.Cells(row, 1).value = "【已匹配物料】"
|
||||
wsTest.Cells(row, 1).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
' 写入物料明细表头
|
||||
|
||||
wsTest.Cells(row, 1).value = "类别"
|
||||
wsTest.Cells(row, 2).value = "代号"
|
||||
wsTest.Cells(row, 3).value = "名称"
|
||||
wsTest.Cells(row, 4).value = "数量"
|
||||
wsTest.Cells(row, 5).value = "选择条件"
|
||||
wsTest.Range(wsTest.Cells(row, 1), wsTest.Cells(row, 5)).Font.Bold = True
|
||||
wsTest.Range(wsTest.Cells(row, 1), wsTest.Cells(row, 5)).Interior.Color = RGB(200, 200, 200)
|
||||
wsTest.Range(wsTest.Cells(row, 1), wsTest.Cells(row, 4)).Font.Bold = True
|
||||
wsTest.Range(wsTest.Cells(row, 1), wsTest.Cells(row, 4)).Interior.Color = RGB(220, 220, 220)
|
||||
row = row + 1
|
||||
|
||||
' 写入每个物料
|
||||
|
||||
Dim mat As clsMaterialItem
|
||||
Dim j As Long
|
||||
For j = 1 To materials.count
|
||||
Set mat = materials(j)
|
||||
wsTest.Cells(row, 1).value = mat.Category
|
||||
wsTest.Cells(row, 2).value = mat.code
|
||||
wsTest.Cells(row, 3).value = mat.Name
|
||||
wsTest.Cells(row, 4).value = mat.Quantity
|
||||
wsTest.Cells(row, 5).value = IIf(mat.Condition = "", "(无条件)", mat.Condition)
|
||||
If materials.count > 0 Then
|
||||
For Each mat In materials
|
||||
wsTest.Cells(row, 1).value = mat.Category
|
||||
wsTest.Cells(row, 2).value = mat.code
|
||||
wsTest.Cells(row, 3).value = mat.Name
|
||||
wsTest.Cells(row, 4).value = mat.Quantity
|
||||
row = row + 1
|
||||
Next mat
|
||||
Else
|
||||
wsTest.Cells(row, 1).value = "(无)"
|
||||
row = row + 1
|
||||
Next j
|
||||
End If
|
||||
|
||||
' 4. 打印缺失的类别 (新增核心功能)
|
||||
If missingCats.count > 0 Then
|
||||
row = row + 1
|
||||
wsTest.Cells(row, 1).value = "【缺失类别】"
|
||||
wsTest.Cells(row, 1).Font.Color = RGB(255, 0, 0)
|
||||
wsTest.Cells(row, 1).Font.Bold = True
|
||||
row = row + 1
|
||||
|
||||
Dim catName As Variant
|
||||
For Each catName In missingCats
|
||||
wsTest.Cells(row, 1).value = "❌ " & catName
|
||||
wsTest.Cells(row, 1).Font.Color = RGB(255, 0, 0)
|
||||
wsTest.Cells(row, 2).value = "未找到匹配物料"
|
||||
row = row + 1
|
||||
Next catName
|
||||
End If
|
||||
|
||||
' 添加分隔行
|
||||
row = row + 1
|
||||
@@ -610,45 +629,6 @@ Sub Example7_TestGetValidMaterialsByModel()
|
||||
row = row + 2
|
||||
Next i
|
||||
|
||||
' 添加统计汇总
|
||||
wsTest.Cells(row, 1).value = "测试汇总"
|
||||
wsTest.Cells(row, 1).Font.Bold = True
|
||||
wsTest.Cells(row, 1).Font.Size = 12
|
||||
row = row + 1
|
||||
|
||||
Dim completeCount As Long
|
||||
Dim incompleteCount As Long
|
||||
completeCount = 0
|
||||
incompleteCount = 0
|
||||
|
||||
For i = LBound(testModels) To UBound(testModels)
|
||||
modelStr = testModels(i)(0)
|
||||
Set result = bomMgr.GetValidMaterialsByModel(modelStr)
|
||||
If result("IsComplete") Then
|
||||
completeCount = completeCount + 1
|
||||
Else
|
||||
incompleteCount = incompleteCount + 1
|
||||
End If
|
||||
Next i
|
||||
|
||||
wsTest.Cells(row, 1).value = "总测试数:"
|
||||
wsTest.Cells(row, 2).value = UBound(testModels) - LBound(testModels) + 1
|
||||
row = row + 1
|
||||
|
||||
wsTest.Cells(row, 1).value = "完整:"
|
||||
wsTest.Cells(row, 2).value = completeCount
|
||||
wsTest.Cells(row, 2).Font.Color = RGB(0, 128, 0)
|
||||
row = row + 1
|
||||
|
||||
wsTest.Cells(row, 1).value = "不完整:"
|
||||
wsTest.Cells(row, 2).value = incompleteCount
|
||||
wsTest.Cells(row, 2).Font.Color = RGB(255, 0, 0)
|
||||
|
||||
' 格式化
|
||||
wsTest.Columns("A:E").AutoFit
|
||||
|
||||
MsgBox "物料完整性测试完成!" & vbCrLf & _
|
||||
"完整: " & completeCount & " 个" & vbCrLf & _
|
||||
"不完整: " & incompleteCount & " 个" & vbCrLf & vbCrLf & _
|
||||
"请查看工作表: 物料完整性测试", vbInformation
|
||||
wsTest.Columns("A:D").AutoFit
|
||||
MsgBox "测试完成!", vbInformation
|
||||
End Sub
|
||||
Reference in New Issue
Block a user