391 lines
15 KiB
VB.net
391 lines
15 KiB
VB.net
|
|
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
|