Files
Desktop_WT_DMS/WT-DMS/Form_合并备料查询.vb

391 lines
15 KiB
VB.net
Raw Normal View History

2025-12-11 11:43:00 +08:00
Public Class Form_合并备料查询
Dim m_Table As New System.Data.DataTable
Dim m_InitOver As Boolean = False
Dim m_PartNumber As New CPartNumber
Dim validBomPnList As New ArrayList
Dim validBomBackupCountList As New ArrayList
Public Enum COLS_INPUT
序号
料号PN
数量
max
End Enum
Public Shared m_COLS_NAME_INPUT(,) As String = {
{"序号", "0"},
{"料号PN", "1"},
{"数量", "1"}
}
Public Enum COLS_QUERYINFO
序号
料号PN
物料名称
规格描述
单位
总数量
库存数量
剩余数量
max
End Enum
Public Shared m_COLS_NAME_QUERYINFO(,) As String = {
{"序号", "0"},
{"料号PN", "1"},
{"物料名称", "0"},
{"规格描述", "0"},
{"单位", "0"},
{"总数量", "0"},
{"库存数量", "0"},
{"剩余数量", "0"}
}
Private Sub Form_合并备料查询_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitGrid_Input()
End Sub
Private Sub InitGrid_Input()
Grid_Input.NewFile()
Grid_Input.AllowUserSort = False
Grid_Input.DisplayFocusRect = False
Grid_Input.ExtendLastCol = True
Grid_Input.DisplayRowArrow = True
Grid_Input.BoldFixedCell = False
Grid_Input.SortIndicatorStyle = FlexCell.SortIndicatorStyleEnum.Light3D
Grid_Input.Cols = COLS_INPUT.max
For col As Integer = 0 To COLS_INPUT.max - 1
Grid_Input.Cell(0, col).Text = m_COLS_NAME_INPUT(col, 0)
Next
'调整宽度
Grid_Input.Column(COLS_INPUT.序号).Width = 50
Grid_Input.Column(COLS_INPUT.料号PN).Width = 100
Grid_Input.Column(COLS_INPUT.数量).Width = 50
Grid_Input.AllowUserSort = True
Grid_Input.Locked = False
Grid_Input.Column(COLS_INPUT.序号).Locked = True
Grid_Input.Rows = 500
Application.DoEvents()
End Sub
Private Sub InitGrid_QueryInfo(ByVal BomPnCount As Integer, ByRef bomArray As ArrayList)
Grid_QueryInfo.NewFile()
Grid_QueryInfo.AllowUserSort = False
Grid_QueryInfo.DisplayFocusRect = False
Grid_QueryInfo.ExtendLastCol = True
Grid_QueryInfo.DisplayRowArrow = True
Grid_QueryInfo.BoldFixedCell = False
Grid_QueryInfo.SortIndicatorStyle = FlexCell.SortIndicatorStyleEnum.Light3D
Grid_QueryInfo.Cols = COLS_QUERYINFO.max
For col As Integer = 0 To COLS_QUERYINFO.max - 1
Grid_QueryInfo.Cell(0, col).Text = m_COLS_NAME_QUERYINFO(col, 0)
Next
If BomPnCount > 0 Then
For i = 0 To BomPnCount - 1
Grid_QueryInfo.Cols += 1
Grid_QueryInfo.Cell(0, Grid_QueryInfo.Cols - 1).Text = bomArray.Item(i)
Next
End If
'调整宽度
Grid_QueryInfo.Column(COLS_QUERYINFO.序号).Width = My.Settings.FORM_合并用料查询_COL_WIDTH_序号
Grid_QueryInfo.Column(COLS_QUERYINFO.料号PN).Width = My.Settings.FORM_合并用料查询_COL_WIDTH_料号PN
Grid_QueryInfo.Column(COLS_QUERYINFO.物料名称).Width = My.Settings.FORM_合并用料查询_COL_WIDTH_物料名称
Grid_QueryInfo.Column(COLS_QUERYINFO.规格描述).Width = My.Settings.FORM_合并用料查询_COL_WIDTH_规格描述
Grid_QueryInfo.Column(COLS_QUERYINFO.单位).Width = My.Settings.FORM_合并用料查询_COL_WIDTH_单位
Me.Height = My.Settings.FORM_合并用料查询_HEIGHT
Me.Width = My.Settings.FORM_合并用料查询_WIDTH
Grid_QueryInfo.AllowUserSort = True
Grid_QueryInfo.Locked = True
Grid_QueryInfo.Rows = 1
Application.DoEvents()
End Sub
Private Function QueryBom(ByVal BomName As String, ByRef dataTable As Data.DataTable) As Boolean
Dim strSelect As String = "SELECT * FROM `" & "bom_" & BomName & "`"
'查询入库数量
Dim result As Boolean = False
Dim strSQL As String = strSelect
dataTable.Rows.Clear()
dataTable.Columns.Clear()
If SQL_Query(COL_RIGHTS.BOM管理, strSQL, dataTable) = True Then
result = True
End If
Return result
End Function
Private Function CheckBomExist(ByVal bomName As String, ByRef isExist As Boolean) As Boolean
Dim strSQL As String = "CHECK TABLE `" & "bom_" & bomName & "`" 'CHECK TABLE `BOM_U01-ATMEGA328P-TQFP32`
Dim result As Boolean = False
m_Table.Rows.Clear()
m_Table.Columns.Clear()
isExist = False
If SQL_Query(COL_RIGHTS.BOM管理, strSQL, m_Table) = True Then
If m_Table.Rows.Count > 0 Then
If m_Table.Rows(0).Item(3) = "OK" Then
isExist = True
End If
End If
result = True
End If
Return result
End Function
Private Sub bt_Go_Click(sender As Object, e As EventArgs) Handles bt_Go.Click
'检测Input表格是否存在错误
Dim inputSn As String = ""
Dim validBomPnCount As Integer = 0
validBomPnList.Clear()
validBomBackupCountList.Clear()
Dim notEmptyCount As Integer = 0
Dim curRowResult As Boolean = False
For row = 1 To Grid_Input.Rows - 1
Grid_Input.Cell(row, COLS_INPUT.序号).Text = ""
Grid_Input.Cell(row, COLS_INPUT.料号PN).BackColor = Color.White
Grid_Input.Cell(row, COLS_INPUT.数量).BackColor = Color.White
Next
For row = 1 To Grid_Input.Rows - 1
inputSn = Grid_Input.Cell(row, COLS_INPUT.料号PN).Text
If inputSn.Length > 0 Then
notEmptyCount += 1
'检查输入料号是否有效
curRowResult = True
Dim isExist As Boolean = False
If m_PartNumber.CheckPartNumber(inputSn, isExist) = ERROR_CODE.SUCCESS Then
If isExist = False Then
Grid_Input.Cell(row, COLS_INPUT.料号PN).BackColor = Color.Red
curRowResult = False
End If
Else
MsgBox("查询BOM料号错误!")
Return
End If
'检测输入料号的料表是否已经存在
If CheckBomExist(inputSn, isExist) = True Then
If isExist = False Then
Grid_Input.Cell(row, COLS_INPUT.料号PN).BackColor = Color.Red
curRowResult = False
End If
Else
MsgBox("无法查询输入料号对应的料表是否存在,请检查网络连接!")
Return
End If
If curRowResult = True Then
Grid_Input.Cell(row, COLS_INPUT.料号PN).BackColor = Color.Green
'检查数量是否正确
Dim numStr As String = Grid_Input.Cell(row, COLS_INPUT.数量).Text
Dim numNum As Integer = 0
Try
numNum = numStr
validBomPnCount += 1
validBomPnList.Add(inputSn)
validBomBackupCountList.Add(numNum)
Grid_Input.Cell(row, COLS_INPUT.数量).BackColor = Color.Green
Catch ex As Exception
Grid_Input.Cell(row, COLS_INPUT.数量).BackColor = Color.Red
End Try
Else
Grid_Input.Cell(row, COLS_INPUT.料号PN).BackColor = Color.Red
End If
Grid_Input.Cell(row, COLS_INPUT.序号).Text = validBomPnCount
End If
Next
If notEmptyCount > 0 Then
If validBomPnCount <> notEmptyCount Then
MsgBox("输入BOM料号列表存在错误")
Return
End If
Else
MsgBox("输入不能为空")
Return
End If
'重新设置QueryInfo表格内容
InitGrid_QueryInfo(validBomPnCount, validBomPnList)
'逐个机种查询-----------------------------
For bomIndex = 0 To validBomPnCount - 1
'查询物料列表
Dim queryBomName As String = validBomPnList.Item(bomIndex)
If QueryBom(queryBomName, m_Table) = True Then
CompareAndFillToGridByDataTable(bomIndex)
End If
Next
'查询物料其它信息
For rowIndex = 1 To Grid_QueryInfo.Rows - 1
If Grid_QueryInfo.Cell(rowIndex, COLS_QUERYINFO.料号PN).Text.Length > 0 Then
If GetPNItemInfo(rowIndex) = False Then
Return
End If
End If
Next
'查询库存数量
For rowIndex = 1 To Grid_QueryInfo.Rows - 1
Dim strPN As String = Grid_QueryInfo.Cell(rowIndex, COLS_QUERYINFO.料号PN).Text
If strPN.Length > 0 Then
Dim countInStore As Integer = 0
Dim usageCount As Integer = Grid_QueryInfo.Cell(rowIndex, COLS_QUERYINFO.总数量).Text
If QueryStorageCount(strPN, countInStore) = True Then
Grid_QueryInfo.Cell(rowIndex, COLS_QUERYINFO.库存数量).Text = countInStore
Grid_QueryInfo.Cell(rowIndex, COLS_QUERYINFO.剩余数量).Text = countInStore - usageCount
Else
Return
End If
End If
Next
MsgBox("查询完成.")
End Sub
Private Function QueryStorageCount(ByVal PartNumber As String, ByRef rCount As Integer) As Boolean
Dim strSelect As String = "SELECT SUM(`" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.数量) & "`) FROM "
strSelect &= "`" & CMaterialInOut.cst_TABLE_NAME & "` "
strSelect &= " WHERE `" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.料号PN) & "` COLLATE gbk_chinese_ci = '" & PartNumber & "' "
'查询入库数量
Dim result As Boolean = False
Dim Count_In As Integer = 0
Dim strSQL As String = strSelect
strSQL &= "AND `" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.入库出库) & "` = '0'"
m_Table.Rows.Clear()
m_Table.Columns.Clear()
If SQL_Query(COL_RIGHTS.原料库存管理, strSQL, m_Table) = True Then
Try
Count_In = m_Table.Rows(0).Item(0)
Catch ex As Exception
Count_In = 0
End Try
result = True
End If
'查询出库数量
Dim Count_Out As Integer = 0
strSQL = strSelect
strSQL &= "AND `" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.入库出库) & "` = '1'"
If result Then
result = False
m_Table.Rows.Clear()
m_Table.Columns.Clear()
If SQL_Query(COL_RIGHTS.原料库存管理, strSQL, m_Table) = True Then
Try
Count_Out = m_Table.Rows(0).Item(0)
Catch ex As Exception
Count_Out = 0
End Try
result = True
End If
End If
rCount = Count_In - Count_Out
Return result
End Function
Private Sub CompareAndFillToGridByDataTable(ByVal bomIndex As Integer)
Dim existRows As Integer = Grid_QueryInfo.Rows
Dim insertRow As Integer = 0
Dim queryPn As String = ""
Dim queryCount As Integer = 0
Dim curCount As Integer = 0
Dim CountForBackup As Integer = validBomBackupCountList.Item(bomIndex)
Dim MultiCount As Integer = 0
If m_Table.Rows.Count > 0 Then
For row = 0 To m_Table.Rows.Count - 1
queryPn = m_Table.Rows.Item(row).Item(2)
queryCount = m_Table.Rows.Item(row).Item(3)
MultiCount = queryCount * CountForBackup
Dim findIndex As Integer = -1
For rowIndex = 1 To Grid_QueryInfo.Rows - 1
If Grid_QueryInfo.Cell(rowIndex, COLS_QUERYINFO.料号PN).Text.ToUpper = queryPn.ToUpper Then
findIndex = rowIndex
Exit For
End If
Next
If findIndex > 0 Then
Try
curCount = Grid_QueryInfo.Cell(findIndex, COLS_QUERYINFO.总数量).Text
Catch ex As Exception
curCount = 0
End Try
curCount += MultiCount
Grid_QueryInfo.Cell(findIndex, COLS_QUERYINFO.总数量).Text = curCount
Else
Grid_QueryInfo.Rows += 1
findIndex = Grid_QueryInfo.Rows - 1
Grid_QueryInfo.Cell(findIndex, COLS_QUERYINFO.料号PN).Text = queryPn
Grid_QueryInfo.Cell(findIndex, COLS_QUERYINFO.总数量).Text = MultiCount
End If
Grid_QueryInfo.Cell(findIndex, COLS_QUERYINFO.max + bomIndex).Text = MultiCount
Next
End If
End Sub
Private Function GetPNItemInfo(ByVal gridRowIndex As Integer) As Boolean
Dim 物料名称 As String = ""
Dim 规格描述 As String = ""
Dim 单位 As String = ""
Dim 单重 As Double = 0
Dim 图片(0) As Byte
Dim 供应商ID As String = ""
Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.物料名称).Text = ""
Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.规格描述).Text = ""
Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.单位).Text = ""
Dim result As Boolean = False
Dim strPn As String = Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.料号PN).Text
If m_PartNumber.QueryItem(strPn, 物料名称, 规格描述, 单位, 单重, 供应商ID) = ERROR_CODE.SUCCESS Then
Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.物料名称).Text = 物料名称
Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.规格描述).Text = 规格描述
Grid_QueryInfo.Cell(gridRowIndex, COLS_QUERYINFO.单位).Text = 单位
result = True
Else
MsgBox("查询物料信息错误,料号:" & strPn)
End If
Return result
End Function
Private Sub bt_ExportResult_Click(sender As Object, e As EventArgs) Handles bt_ExportResult.Click
Dim dlg As New SaveFileDialog()
dlg.DefaultExt = "xls"
dlg.Filter = "Excel File|*.xls"
If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Return
If Grid_QueryInfo.ExportToExcel(dlg.FileName, True, True) Then
MsgBox("保存为Excel成功" & dlg.FileName)
Else
MsgBox("保存失败!")
End If
End Sub
End Class