'Append_OutSPackAndOthers_Process_In_Process") '增加例如包装、校直工序
'基本说明:
'1) 从补充工序中增加未完成委外工序的包装等工序;
Dim s1 As Date = Date.Now
Dim yn1, yn2, yn3 As Integer
Try
'1) 基于工序计划表未完工工单零件号组合==>读取补充工序零件号对应工序列表;
'2) 在INISecondarySchedule 表中循环,
'WorkorderStatus, INISecondarySchedule 中新增数据行
If Not DataTables.Contains("WOrkOrderStatus") Then
DataTables.Load("WOrkOrderStatus")
End If
DataTables("WorkOrderStatus").SQLDeleteFor("WO is Null")
If Not DataTables.Contains("INISecondarySchedule") Then
DataTables.Load("INISecondarySchedule")
End If
DataTables("INISecondarySchedule").SQLDeleteFor("WO is Null")
DataTables("INISecondarySchedule").LoadFilter = "WOStatus <>'C'"
DataTables("INISecondarySchedule").Load
Dim PNs As String = DataTables("INISecondarySchedule").GetComboListString("PartNumber", "WOStatus<>'C' and WOStatus<>'N'").Replace("|", "','")
If PNs > "" Then
PNs = "('" & PNs & "')" '未完工的工单,对应的产品明细
End If
If Not DataTables.Contains("Special_OP") Then
DataTables.Load("Special_OP")
End If
DataTables("Special_OP").LoadFilter = "PartNumber in " & PNs
DataTables("Special_OP").Load
Dim PN3s As List(Of String) = DataTables("Special_OP").GetValues("PartNumber", "PartNumber in " & PNs, "PartNumber") '存在需要补充工序的产品集合
'按制定产品测试
'PN3s.Clear
'PN3s.Add("M463000B114")
'***********
Dim PNOP As String
'MessageBox.Show("PN3s.Count:" & PN3s.Count)
'将存在补充工序的不同产品进行展开, 然后到INISecondarySchedule中
Dim d2 As New Dictionary(Of String, DataRow) 'INISecondarySchedule
Dim d2n As New Dictionary(Of DataRow, DataRow)
Dim d2w As New Dictionary(Of DataRow, DataRow)
Dim d1n As New Dictionary(Of DataRow, DataRow) 'WOrkOrderStatus
Dim d1w As New Dictionary(Of DataRow, DataRow)
'Return Nothing
SystemReady = False
For Each PN As String In PN3s
Dim dr3s As List(Of DataRow) = DataTables("Special_Op").Select("PartNumber ='" & PN & "'", "OP")
Dim WOs As List(Of String) = DataTables("INISecondarySchedule").GetValues("WO", "PartNumber = '" & PN & "' and WOStatus<>'C'", "WO")
'Output.Show("SpecialOP 中, " & PN & "的工序有" & dr3s.Count & "条, 在INISecondarySchedule中存在该产品的工单有" & WOs.Count & "条")
Dim n As Integer
For Each wo As String In WOs
'Output.Show("接下来进行 " & wo & " " & PN & "的数据处理")
Dim WORs2 As List(Of DataRow) = DataTables("INISecondarySchedule").Select("Wo ='" & wo & "'" , "OP Desc")
For Each dr2 As DataRow In WORs2
PNOP = dr2("PartNumber") & "|" & dr2("OP")
If Not d2.ContainsKey(PNOP) Then
d2.Add(pnop, dr2)
End If
Next
If WORs2.Count > 3 Then '工序数>3 , 这是为了防错而设
For Each dr3 As DataRow In dr3s 'SpecialOP
PNOP = dr3("PartNumber") & "|" & dr3("OP")
If Not d2.ContainsKey(PNOP) Then
'Output.Show("新增数据行:" & wo & " : " & PNOP)
Dim dr2n As DataRow = DataTables("INISecondarySchedule").AddNew
d2n.Add(dr2n, dr3)
Dim dr2_Next As DataRow = DataTables("INISecondarySchedule").Find("WO = '" & wo & "' and OP> " & dr3("OP"), "OP")
If dr2_Next Is Nothing Then
'MessageBox.Show(PNOP & "数据行不正常")
Else
'MessageBox.Show("当前插入行OP" & dr3("OP") & "的下一行为 " & dr2_Next("OP") & " " & dr2_Next("ResID"))
End If
d2w.Add(dr2n, dr2_next) 'dr2_next,下一工序信息
Dim dr1n As DataRow = DataTables("WorkOrderStatus").AddNew
d1n.Add(dr1n, dr3)
d1w.Add(dr1n, dr2_next) '
End If
Next
End If
' If n > 10 Then GoTo 1
Next
Next
'Return Nothing '************************
1:
'INISecondarySchedule 的处理
If d2n.Keys.Count > 0 Then
For Each dr2n As DataRow In d2n.Keys
Dim dr3 As DataRow = d2n(dr2n)
Dim dr2w As DataRow = d2w(dr2n)
dr2n("PartNumber") = dr3("PartNumber")
dr2n("WO") = dr2w("WO")
dr2n("EST_QTY_IN") = dr2w("EST_QTY_IN")
dr2n("EST_QTY_OUT") = dr2w("EST_QTY_OUT")
dr2n("ACT_IN_QTY") = dr2w("ACT_IN_QTY")
dr2n("ESTHrs_SETUP") = dr3("调试时间_Hrs")
Dim Cyt As Double = dr3("装夹和机器时间_Min")
Dim Unit As String = dr3("工时单位")
If Unit = "MIN/PC" Then
dr2n("Calculated_TotalHours_Required") = Round2(Cyt * dr2n("Act_IN_Qty") / 60, 2) '需求小时
Else
dr2n("Calculated_TotalHours_Required") = 2
End If
dr2n("NPI") = dr2w("NPI")
'dr2n("OPCategory") = dr3("OPDes")
'dr2n("STD_LT_Days") = dr2w("")
dr2n("OP") = dr3("OP")
dr2n("ResID") = dr3("ResID")
dr2n("OPQty") = dr2w("OPQty")
'dr2n("ShiftWorkingSystem") = dr2w("")
' dr2n("EfficiencyFactor") =dr2w("")
dr2n("DeliveryDate") = dr2w("DeliveryDate")
dr2n("Adj_Remark") = "增加过程"
If dr2w("OPStatus").contains("C") Then
dr2n("OPstatus") = "CM"
Else
dr2n("OPStatus") = "F"
End If
dr2n("ShippingRowSign") = dr2w("ShippingRowSign")
dr2n("BomLevel") = dr2w("BomLevel")
dr2n("SalesOrder") = dr2w("SalesOrder")
dr2n("WOStatus") = dr2w("WOStatus")
Next
'WOrkOrderStatus的处理
For Each dr1n As DataRow In d1n.Keys
Dim dr3 As DataRow = d1n(dr1n)
Dim dr2w As DataRow = d1w(dr1n)
dr1n("PartNumber") = dr3("PartNumber")
dr1n("WO") = dr2w("WO")
dr1n("ESTQTY_IN") = dr2w("EST_QTY_IN")
dr1n("ESTQTY_OUT") = dr2w("EST_QTY_OUT")
dr1n("ACTQty_IN") = dr2w("ACT_IN_QTY")
dr1n("ESTHrs_SETUP") = dr3("调试时间_Hrs")
dr1n("OP") = dr3("OP")
dr1n("ResID") = dr3("ResID")
dr1n("DeliveryDate") = dr2w("DeliveryDate")
dr1n("ProcessRunDescription") = "增加过程"
If dr2w("OPStatus").contains("C") Then
dr1n("OPstatus") = "CM"
Else
dr1n("OPStatus") = "F"
End If
dr1n("WOStatus") = dr2w("WOStatus")
Next
End If
DataTables("WorkOrderstatus").Save
DataTables("INISecondarySchedule").Save
SystemReady = True
Dim s2 As Date = Date.now
Dim s3 As TimeSpan = S2 - S1
Output.Show(s1 & "--------" & s2 & ",程序 (Append_OutSPackAndOthers_Process_In_Process) 运行期间经历时间:" & s3.TotalSeconds)
Catch ex As Exception
MessageBox.Show("程序运行异常Append_OutSPackAndOthers_Process_In_Process,已终止")
End Try
MessageBox.Show(SystemReady)
黄色的程序段均是我后加的, 此前运行没有出现问题,我已经将Bin 目录下的文件清空尝试了好几次, 也没有办法, 此外我用系统管理员身份登录也尝试了,也没有用.
程序版本为高级开发版, 项目文件存储在硬盘上, 数据库为Sql Server 2019 商业版