🎨 style: standardize parameter naming to camelCase
Refactor parameter and property names from PascalCase to camelCase for consistent naming conventions across VBA modules. Changes: - Conditions → conditions (property and parameters) - Update all references across 7 modules - Maintain functional behavior while improving code readability Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,7 +39,7 @@ End Function
|
||||
' conditions - 条件字典
|
||||
' 返回: Boolean
|
||||
'=====================================================================
|
||||
Private Function EvaluateExpression(expr As String, Conditions As Object) As Boolean
|
||||
Private Function EvaluateExpression(expr As String, conditions As Object) As Boolean
|
||||
expr = Trim(expr)
|
||||
|
||||
' 处理最外层括号
|
||||
@@ -52,7 +52,7 @@ Private Function EvaluateExpression(expr As String, Conditions As Object) As Boo
|
||||
|
||||
' 处理OR运算符(优先级最低)
|
||||
Dim orResult As Variant
|
||||
orResult = SplitByOperator(expr, " OR ", Conditions)
|
||||
orResult = SplitByOperator(expr, " OR ", conditions)
|
||||
If Not IsEmpty(orResult) Then
|
||||
EvaluateExpression = orResult
|
||||
Exit Function
|
||||
@@ -60,14 +60,14 @@ Private Function EvaluateExpression(expr As String, Conditions As Object) As Boo
|
||||
|
||||
' 处理AND运算符
|
||||
Dim andResult As Variant
|
||||
andResult = SplitByOperator(expr, " AND ", Conditions)
|
||||
andResult = SplitByOperator(expr, " AND ", conditions)
|
||||
If Not IsEmpty(andResult) Then
|
||||
EvaluateExpression = andResult
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
' 处理单个条件
|
||||
EvaluateExpression = EvaluateSingleCondition(expr, Conditions)
|
||||
EvaluateExpression = EvaluateSingleCondition(expr, conditions)
|
||||
End Function
|
||||
|
||||
'=====================================================================
|
||||
@@ -78,7 +78,7 @@ End Function
|
||||
' conditions - 条件字典
|
||||
' 返回: Variant - 评估结果或Empty
|
||||
'=====================================================================
|
||||
Private Function SplitByOperator(expr As String, operator As String, Conditions As Object) As Variant
|
||||
Private Function SplitByOperator(expr As String, operator As String, conditions As Object) As Variant
|
||||
Dim pos As Long
|
||||
Dim leftPart As String
|
||||
Dim rightPart As String
|
||||
@@ -103,11 +103,11 @@ Private Function SplitByOperator(expr As String, operator As String, Conditions
|
||||
|
||||
' 根据运算符类型评估
|
||||
If operator = " OR " Then
|
||||
SplitByOperator = EvaluateExpression(leftPart, Conditions) Or _
|
||||
EvaluateExpression(rightPart, Conditions)
|
||||
SplitByOperator = EvaluateExpression(leftPart, conditions) Or _
|
||||
EvaluateExpression(rightPart, conditions)
|
||||
ElseIf operator = " AND " Then
|
||||
SplitByOperator = EvaluateExpression(leftPart, Conditions) And _
|
||||
EvaluateExpression(rightPart, Conditions)
|
||||
SplitByOperator = EvaluateExpression(leftPart, conditions) And _
|
||||
EvaluateExpression(rightPart, conditions)
|
||||
End If
|
||||
Exit Function
|
||||
End If
|
||||
@@ -125,7 +125,7 @@ End Function
|
||||
' conditions - 条件字典
|
||||
' 返回: Boolean
|
||||
'=====================================================================
|
||||
Private Function EvaluateSingleCondition(condition As String, Conditions As Object) As Boolean
|
||||
Private Function EvaluateSingleCondition(condition As String, conditions As Object) As Boolean
|
||||
Dim varName As String
|
||||
Dim operator As String
|
||||
Dim value As String
|
||||
@@ -142,10 +142,10 @@ Private Function EvaluateSingleCondition(condition As String, Conditions As Obje
|
||||
value = Trim(parts(1))
|
||||
|
||||
' 特殊规则:如果产品条件中不存在该变量,视为满足!=条件
|
||||
If Not Conditions.Exists(varName) Then
|
||||
If Not conditions.Exists(varName) Then
|
||||
EvaluateSingleCondition = True
|
||||
Else
|
||||
actualValue = Conditions(varName)
|
||||
actualValue = conditions(varName)
|
||||
|
||||
' fjgn字段特殊处理(多值匹配)
|
||||
If varName = "fjgn" Then
|
||||
@@ -168,10 +168,10 @@ Private Function EvaluateSingleCondition(condition As String, Conditions As Obje
|
||||
varName = Trim(eqParts(0))
|
||||
value = Trim(eqParts(1))
|
||||
|
||||
If Not Conditions.Exists(varName) Then
|
||||
If Not conditions.Exists(varName) Then
|
||||
EvaluateSingleCondition = False
|
||||
Else
|
||||
actualValue = Conditions(varName)
|
||||
actualValue = conditions(varName)
|
||||
|
||||
' fjgn字段特殊处理(多值匹配)
|
||||
If varName = "fjgn" Then
|
||||
|
||||
@@ -31,8 +31,8 @@ End Property
|
||||
'=====================================================================
|
||||
' 属性: Conditions - 提取的条件字典
|
||||
'=====================================================================
|
||||
Public Property Get Conditions() As Object
|
||||
Set Conditions = pConditions
|
||||
Public Property Get conditions() As Object
|
||||
Set conditions = pConditions
|
||||
End Property
|
||||
|
||||
'=====================================================================
|
||||
|
||||
@@ -198,8 +198,8 @@ End Sub
|
||||
' 过程: ProcessSingleOrder
|
||||
' 功能: 处理单个订单,提取BOM并将数据添加到输出集合
|
||||
' 参数: orderNumber - 生产订单号
|
||||
' productModel - 产品型号
|
||||
' quantity - 生产数量
|
||||
' ProductModel - 产品型号
|
||||
' Quantity - 生产数量
|
||||
' productCode - 产品编码
|
||||
' componentPriority - 部件优先标志("是"或"否")
|
||||
' BomExtractor - BOM提取器对象
|
||||
@@ -234,7 +234,7 @@ Private Sub ProcessSingleOrder(orderNumber As String, _
|
||||
|
||||
' 提取BOM
|
||||
Dim matchedItems As Collection
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.Conditions)
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.conditions)
|
||||
|
||||
' 输出结果
|
||||
If matchedItems.count = 0 Then
|
||||
@@ -280,10 +280,10 @@ End Sub
|
||||
' 功能:创建 BIP 上传模板一行数据的数组
|
||||
' 参数:orderNumber - 生产订单号
|
||||
' productCode - 产品编码
|
||||
' quantity - 生产数量
|
||||
' Quantity - 生产数量
|
||||
' actualRowNumber - 实际行号(BIP 行号基数 + 组内序号)
|
||||
' materialCode - 材料编码(66 编码)
|
||||
' 返回:Variant() - 包含 10 个元素的数组
|
||||
' 返回:Variant() - 包含 9 个元素的数组
|
||||
'=====================================================================
|
||||
Private Function CreateBIPRowArray(orderNumber As String, _
|
||||
productCode As String, _
|
||||
|
||||
@@ -299,7 +299,7 @@ Private Sub ParseOrderBOM(ByRef orderInfo As Object, BomExtractor As BomExtracto
|
||||
|
||||
' 提取BOM
|
||||
Dim matchedItems As Collection
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.Conditions)
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.conditions)
|
||||
|
||||
' 查找"部件"类别物料
|
||||
Dim item As BomItem
|
||||
|
||||
@@ -184,13 +184,13 @@ Private Sub ProcessSingleModel(totalQueueNum As String, _
|
||||
If Not parser.Parse(modelString) Then
|
||||
' 解析失败
|
||||
extractNote = "解析失败: " & parser.ErrorMessage
|
||||
outputData.Add CreateOutputRowArray(totalQueueNum, orderNumber, modelString, parser.Conditions, extractNote, Nothing)
|
||||
outputData.Add CreateOutputRowArray(totalQueueNum, orderNumber, modelString, parser.conditions, extractNote, Nothing)
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
' 提取BOM
|
||||
Dim matchedItems As Collection
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.Conditions)
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.conditions)
|
||||
|
||||
' 获取错误信息
|
||||
Dim bomErrors As String
|
||||
@@ -205,7 +205,7 @@ Private Sub ProcessSingleModel(totalQueueNum As String, _
|
||||
If extractNote = "" Then
|
||||
extractNote = "未匹配到任何物料"
|
||||
End If
|
||||
outputData.Add CreateOutputRowArray(totalQueueNum, orderNumber, modelString, parser.Conditions, extractNote, Nothing)
|
||||
outputData.Add CreateOutputRowArray(totalQueueNum, orderNumber, modelString, parser.conditions, extractNote, Nothing)
|
||||
Else
|
||||
' 输出每个匹配的物料
|
||||
Dim item As BomItem
|
||||
@@ -224,11 +224,11 @@ Private Sub ProcessSingleModel(totalQueueNum As String, _
|
||||
|
||||
If isFirst Then
|
||||
' 首行保留总排号和订单号
|
||||
outputData.Add CreateOutputRowArray(totalQueueNum, orderNumber, modelString, parser.Conditions, itemNote, item)
|
||||
outputData.Add CreateOutputRowArray(totalQueueNum, orderNumber, modelString, parser.conditions, itemNote, item)
|
||||
isFirst = False
|
||||
Else
|
||||
' 同一个型号的后续BOM项,总排号和订单号留空以保持报表整洁
|
||||
outputData.Add CreateOutputRowArray("", "", modelString, parser.Conditions, itemNote, item)
|
||||
outputData.Add CreateOutputRowArray("", "", modelString, parser.conditions, itemNote, item)
|
||||
End If
|
||||
Next item
|
||||
End If
|
||||
@@ -249,12 +249,12 @@ Private Sub WriteOutputHeader(ws As Worksheet)
|
||||
ws.Cells(1, col).value = "产品型号": col = col + 1
|
||||
|
||||
' 写入条件字段表头
|
||||
Dim Conditions() As String
|
||||
Dim conditions() As String
|
||||
Dim labels() As String
|
||||
GetConditionConfig Conditions, labels
|
||||
GetConditionConfig conditions, labels
|
||||
|
||||
Dim i As Long
|
||||
For i = LBound(Conditions) To UBound(Conditions)
|
||||
For i = LBound(conditions) To UBound(conditions)
|
||||
ws.Cells(1, col).value = labels(i)
|
||||
col = col + 1
|
||||
Next i
|
||||
@@ -283,7 +283,7 @@ End Sub
|
||||
Private Function CreateOutputRowArray(totalQueueNum As String, _
|
||||
orderNumber As String, _
|
||||
FullModel As String, _
|
||||
Conditions As Object, _
|
||||
conditions As Object, _
|
||||
note As String, _
|
||||
item As BomItem) As Variant()
|
||||
' 获取条件配置
|
||||
@@ -309,8 +309,8 @@ Private Function CreateOutputRowArray(totalQueueNum As String, _
|
||||
' 写入条件值
|
||||
Dim i As Long
|
||||
For i = LBound(condNames) To UBound(condNames)
|
||||
If Conditions.Exists(condNames(i)) Then
|
||||
rowData(col) = Conditions(condNames(i))
|
||||
If conditions.Exists(condNames(i)) Then
|
||||
rowData(col) = conditions(condNames(i))
|
||||
Else
|
||||
rowData(col) = ""
|
||||
End If
|
||||
|
||||
@@ -166,7 +166,7 @@ Private Function IsInvalidOrderBOM(modelString As String, _
|
||||
|
||||
' 3. 提取BOM
|
||||
Dim matchedItems As Collection
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.Conditions)
|
||||
Set matchedItems = BomExtractor.ExtractBom(parser.conditions)
|
||||
|
||||
' 4. 检查 BOM 提取器全局错误日志
|
||||
If BomExtractor.GetErrorSummary <> "" Then
|
||||
|
||||
@@ -116,21 +116,21 @@ Public Sub TestConditionEvaluator()
|
||||
Set evaluator = New ConditionEvaluator
|
||||
|
||||
' 创建测试条件字典
|
||||
Dim Conditions As Object
|
||||
Set Conditions = CreateObject("Scripting.Dictionary")
|
||||
Conditions.Add "azxs", "A0"
|
||||
Conditions.Add "bkxs", "531"
|
||||
Conditions.Add "gclj", "M20"
|
||||
Conditions.Add "jycz", "3"
|
||||
Conditions.Add "lcfw", "M06"
|
||||
Dim conditions As Object
|
||||
Set conditions = CreateObject("Scripting.Dictionary")
|
||||
conditions.Add "azxs", "A0"
|
||||
conditions.Add "bkxs", "531"
|
||||
conditions.Add "gclj", "M20"
|
||||
conditions.Add "jycz", "3"
|
||||
conditions.Add "lcfw", "M06"
|
||||
|
||||
' 测试用例1: 简单等式
|
||||
Debug.Print "测试用例1: 简单等式"
|
||||
Dim expr1 As String
|
||||
expr1 = "azxs=A0"
|
||||
Debug.Print " 表达式: " & expr1
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr1, Conditions)
|
||||
AssertTrue "简单等式", evaluator.Evaluate(expr1, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr1, conditions)
|
||||
AssertTrue "简单等式", evaluator.Evaluate(expr1, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
' 测试用例2: AND运算
|
||||
@@ -138,8 +138,8 @@ Public Sub TestConditionEvaluator()
|
||||
Dim expr2 As String
|
||||
expr2 = "azxs=A0 AND bkxs=531"
|
||||
Debug.Print " 表达式: " & expr2
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr2, Conditions)
|
||||
AssertTrue "AND运算", evaluator.Evaluate(expr2, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr2, conditions)
|
||||
AssertTrue "AND运算", evaluator.Evaluate(expr2, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
' 测试用例3: OR运算
|
||||
@@ -147,8 +147,8 @@ Public Sub TestConditionEvaluator()
|
||||
Dim expr3 As String
|
||||
expr3 = "azxs=AT OR azxs=A0"
|
||||
Debug.Print " 表达式: " & expr3
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr3, Conditions)
|
||||
AssertTrue "OR运算", evaluator.Evaluate(expr3, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr3, conditions)
|
||||
AssertTrue "OR运算", evaluator.Evaluate(expr3, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
' 测试用例4: !=运算
|
||||
@@ -156,8 +156,8 @@ Public Sub TestConditionEvaluator()
|
||||
Dim expr4 As String
|
||||
expr4 = "azxs!=AH"
|
||||
Debug.Print " 表达式: " & expr4
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr4, Conditions)
|
||||
AssertTrue "!=运算", evaluator.Evaluate(expr4, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr4, conditions)
|
||||
AssertTrue "!=运算", evaluator.Evaluate(expr4, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
' 测试用例5: 复杂嵌套
|
||||
@@ -165,8 +165,8 @@ Public Sub TestConditionEvaluator()
|
||||
Dim expr5 As String
|
||||
expr5 = "(azxs=A0 OR azxs=AT) AND (bkxs=531 OR bkxs=541)"
|
||||
Debug.Print " 表达式: " & expr5
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr5, Conditions)
|
||||
AssertTrue "复杂嵌套", evaluator.Evaluate(expr5, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr5, conditions)
|
||||
AssertTrue "复杂嵌套", evaluator.Evaluate(expr5, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
' 测试用例6: 不存在的变量(!=情况)
|
||||
@@ -174,8 +174,8 @@ Public Sub TestConditionEvaluator()
|
||||
Dim expr6 As String
|
||||
expr6 = "tsyq!=SCRJ"
|
||||
Debug.Print " 表达式: " & expr6
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr6, Conditions)
|
||||
AssertTrue "不存在的变量!=", evaluator.Evaluate(expr6, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr6, conditions)
|
||||
AssertTrue "不存在的变量!=", evaluator.Evaluate(expr6, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
' 测试用例7: 实际BOM条件
|
||||
@@ -183,9 +183,9 @@ Public Sub TestConditionEvaluator()
|
||||
Dim expr7 As String
|
||||
expr7 = "gclj=M20 AND jycz=1 AND lcfw=M01 AND (azxs=A0 OR azxs=AT OR azxs=AH)"
|
||||
Debug.Print " 表达式: " & expr7
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr7, Conditions)
|
||||
Debug.Print " 结果: " & evaluator.Evaluate(expr7, conditions)
|
||||
' 这个应该是False,因为jycz=3,不是1
|
||||
AssertFalse "实际BOM条件(应该False)", evaluator.Evaluate(expr7, Conditions)
|
||||
AssertFalse "实际BOM条件(应该False)", evaluator.Evaluate(expr7, conditions)
|
||||
Debug.Print ""
|
||||
|
||||
Debug.Print "<<< ConditionEvaluator 测试完成"
|
||||
|
||||
Reference in New Issue
Block a user