Files
Desktop_WT_DMS/WT-DMS/Form_QueryStorage.vb
2025-12-11 11:43:00 +08:00

379 lines
15 KiB
VB.net
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Public Class Form_QueryStorage
Dim m_Table As New System.Data.DataTable
Dim 仓库列表 As New ArrayList
Dim m_PartNumber As New CPartNumber
Dim m_InitOver As Boolean = False
Public Enum COLS
序号
料号
物料名称
规格描述
总数量
START
End Enum
Private Function GetStoreList() As Boolean
Dim m_Store As New CStore
仓库列表.Clear()
m_Table.Rows.Clear()
m_Table.Columns.Clear()
If m_Store.QueryAll(m_Table) = ERROR_CODE.SUCCESS Then
For i As Integer = 0 To m_Table.Rows.Count - 1
仓库列表.Add(m_Table.Rows(i).Item(CStore.COLS.仓库名称))
Next
Return True
End If
Return False
End Function
Private Sub Set_GridTitles()
Grid1.Rows = 500
Grid1.Cols = 5
Grid1.Cell(0, COLS.序号).Text = "序号"
Grid1.Cell(0, COLS.料号).Text = "料号"
Grid1.Cell(0, COLS.物料名称).Text = "物料名称"
Grid1.Cell(0, COLS.规格描述).Text = "规格描述"
Grid1.Cell(0, COLS.总数量).Text = "总数量"
Dim col As Integer = COLS.START
For Each pItem As String In 仓库列表
Grid1.Cols += 1
Grid1.Cell(0, col).Text = pItem
col += 1
'V1.6.0.0 Momo: 查库存同时查库位
Grid1.Cols += 1
Grid1.Cell(0, col).Text = "库位" 'V1.6.0.0 Momo: 查库存同时查库位
col += 1
Next
Grid1.FixedRows = 1
Grid1.FixedCols = 1
End Sub
Private Sub Form_QueryStorage_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Width = My.Settings.FORM_QUERYSTORAGE_WIDTH
Me.Height = My.Settings.FORM_QUERYSTORAGE_HEIGHT
Me.Left = My.Settings.FORM_QUERYSTORAGE_X
Me.Top = My.Settings.FORM_QUERYSTORAGE_Y
Me.WindowState = My.Settings.FORM_QUERYSTORAGE_WINSTATE
If CBool(Current_Rights(COL_RIGHTS.料号管理) And RIGHTS.READ) = False OrElse
CBool(Current_Rights(COL_RIGHTS.原料库存管理) And RIGHTS.READ) = False Then
bt_Query.Enabled = False
bt_Add.Enabled = False
End If
If GetStoreList() = False Then
MsgBox("无法获取仓库列表,请检查网络连接!")
End If
Set_GridTitles()
CGirdInfo.LoadGridInfo("物料库存查询", Grid1)
m_InitOver = True
End Sub
Private Sub bt_Add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_Add.Click
Grid1.NewFile()
Set_GridTitles()
If Not m_Table Is Nothing Then
m_Table.Dispose()
End If
m_Table = New DataTable
QueryData_Quick()
Grid1.AllowUserSort = False
Grid1.DisplayFocusRect = False
Grid1.ExtendLastCol = True
Grid1.DisplayRowArrow = True
Grid1.BoldFixedCell = False
Grid1.SortIndicatorStyle = FlexCell.SortIndicatorStyleEnum.Light3D
'Grid1.SetDataBinding(m_Table, "", True, 1)
If m_Table.Rows.Count < 500 Then
Grid1.Rows = 500
Else
Grid1.Rows = m_Table.Rows.Count
End If
For i As Integer = 0 To m_Table.Rows.Count - 1
Grid1.Cell(i + 1, COLS.料号).Text = m_Table.Rows(i).Item(0)
Next
For i As Integer = 1 To Grid1.Rows - 1
Grid1.Cell(i, 0).Text = i
Next
CGirdInfo.LoadGridInfo("料号查询", Grid1)
Grid1.AllowUserSort = True
'Grid1.Locked = True
End Sub
Private Sub bt_Clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_Clear.Click
Grid1.Rows = 1
End Sub
Private Sub bt_Delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_Delete.Click
If Grid1.Selection.FirstRow >= 1 Then
Grid1.RemoveItem(Grid1.Selection.FirstRow)
Grid1.Selection.ClearAll()
End If
End Sub
Private Function QueryStorageCount(ByVal storeIndex As Integer, 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 & "' "
strSelect &= "AND `" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.仓库) & "` = '" & 仓库列表.Item(storeIndex) & "' "
'查询入库数量
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 Function QueryStorageLocation(ByVal storeIndex As Integer, ByVal PartNumber As String, ByRef dataTable As System.Data.DataTable) As Boolean
Dim strSelect As String = "SELECT DISTINCT `" & 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 & "' "
strSelect &= "AND `" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.仓库) & "` = '" & 仓库列表.Item(storeIndex) & "' "
'查询入库数量
Dim result As Boolean = False
Dim strSQL As String = strSelect
strSQL &= "AND `" & CMaterialInOut.m_COLS_NAME(CMaterialInOut.COLS.库位库存) & "` > '0'"
dataTable.Rows.Clear()
dataTable.Columns.Clear()
If SQL_Query(COL_RIGHTS.原料库存管理, strSQL, dataTable) = True Then
result = True
End If
Return result
End Function
Private Sub bt_Query_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_Query.Click
lbl_Result.Text = ""
Grid1.AutoRedraw = False
'检测查询列是否有效
If Grid1.Rows > 1 Then
Dim col As Integer
Dim row As Integer
'清除每行的颜色
For row = 1 To Grid1.Rows - 1
Grid1.Cell(row, 1).BackColor = Grid1.Cell(0, 0).BackColor
Next
Dim result As Boolean
Dim rCount As Integer = 0
Dim TotalCount As Integer = 0
Dim OK_Cnt As Integer = 0
Dim Fail_Cnt As Integer = 0
Dim m_物料名称 As String = ""
Dim m_规格描述 As String = ""
Dim m_单位 As String = ""
Dim m_单重 As Double = 0.0
Dim m_供应商ID As String = ""
For row = 1 To Grid1.Rows - 1
Grid1.Cell(row, 0).Text = row
result = False
TotalCount = 0
col = COLS.START
For i As Integer = 0 To 仓库列表.Count - 1
'V1.6.0.0 Momo 增加对空白栏的检测
Dim temp_tb_PN = Grid1.Cell(row, COLS.料号).Text
If temp_tb_PN.Length > 0 Then
'检测料号是否有效
Dim isExist As Boolean = True
If m_PartNumber.CheckPartNumber(temp_tb_PN, isExist) = ERROR_CODE.SUCCESS Then
If isExist = False Then
'MsgBox("当前料号不存在: " & tb_PN.Text)
result = False
Else
'查询料号信息
m_物料名称 = ""
m_规格描述 = ""
m_单位 = ""
m_单重 = 0.0
m_供应商ID = ""
If m_PartNumber.QueryItem(temp_tb_PN, m_物料名称, m_规格描述, m_单位, m_单重, m_供应商ID) = ERROR_CODE.SUCCESS Then
Grid1.Cell(row, COLS.物料名称).Text = m_物料名称
Grid1.Cell(row, COLS.规格描述).Text = m_规格描述
End If
If QueryStorageCount(i, Grid1.Cell(row, COLS.料号).Text, rCount) = True Then
Grid1.Cell(row, col).Text = rCount
TotalCount += rCount
Grid1.Cell(row, 1).ForeColor = Color.Green
result = True
Else
Grid1.Cell(row, 1).ForeColor = Color.Red
result = False
End If
Dim strLoc As String = ""
If QueryStorageLocation(i, Grid1.Cell(row, COLS.料号).Text, m_Table) = True Then
If m_Table.Rows.Count > 0 Then
For k As Integer = 0 To m_Table.Rows.Count - 1
Dim isExit As Boolean
If m_PartNumber.GetStockSum(仓库列表.Item(i), m_Table.Rows(k).Item(0), isExit) <= 0 Then '若库位库存量为0则跳过本次循环
Continue For
End If
If strLoc.Length > 0 Then
strLoc &= ","
End If
strLoc &= m_Table.Rows(k).Item(0)
Next
End If
End If
Grid1.Cell(row, col + 1).Text = strLoc
Grid1.Cell(row, 4).Font = New Font("Arial", 8)
Grid1.Cell(row, 4).FontSize = 11
Grid1.Cell(row, 4).Alignment = FlexCell.AlignmentEnum.CenterCenter
Grid1.Cell(row, 4).FontBold = True
Grid1.Cell(row, 4).ForeColor = Color.Blue
Grid1.Cell(row, 5).Alignment = FlexCell.AlignmentEnum.CenterCenter
Grid1.Cell(row, 6).Alignment = FlexCell.AlignmentEnum.CenterCenter
Grid1.Cell(row, 7).Alignment = FlexCell.AlignmentEnum.CenterCenter
Grid1.Cell(row, 8).Alignment = FlexCell.AlignmentEnum.CenterCenter
End If
Else
'MsgBox("访问数据库失败: 请检查网络连接或联系管理员!")
result = False
End If
Else
result = False
End If
col += 2
Next i
If result = True Then
Grid1.Cell(row, COLS.总数量).Text = TotalCount
OK_Cnt += 1
Else
Fail_Cnt += 1
End If
Next row
lbl_Result.Text = "查询完成: 共" & OK_Cnt + Fail_Cnt & "条, 成功" & OK_Cnt & ""
End If
'Format
Grid1.Refresh()
Grid1.AutoRedraw = True
End Sub
Private Sub Grid1_ColWidthChange(ByVal Sender As System.Object, ByVal e As FlexCell.Grid.ColWidthChangeEventArgs) Handles Grid1.ColWidthChange
CGirdInfo.SaveGirdInfo("物料库存查询", Grid1)
End Sub
Private Sub Form_QueryStorage_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
If m_InitOver = True Then
My.Settings.FORM_QUERYSTORAGE_WIDTH = Me.Width
My.Settings.FORM_QUERYSTORAGE_HEIGHT = Me.Height
My.Settings.FORM_QUERYSTORAGE_WINSTATE = Me.WindowState
My.Settings.Save()
End If
End Sub
Private Sub Form_QueryStorage_LocationChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LocationChanged
If m_InitOver = True Then
My.Settings.FORM_QUERYSTORAGE_X = Me.Left
My.Settings.FORM_QUERYSTORAGE_Y = Me.Top
My.Settings.Save()
End If
End Sub
' V1.6.0.0 Momo 库存页面增加模糊查询
Private Sub QueryData_Quick()
Dim strSQL As String = "SELECT `" &
CPartNumber.m_COLS_NAME(CPartNumber.COLS.料号PN) & "`"
strSQL &= " FROM `" & CPartNumber.cst_TABLE_NAME & "`"
If tb_PN.Text.Length > 0 Then
strSQL &= " WHERE "
Dim strSplit() As String
Dim firstLike As Boolean = True
If tb_PN.Text.Length > 0 Then
strSplit = Split(tb_PN.Text, ",")
For i As Integer = 0 To strSplit.Length - 1
If firstLike = True Then
firstLike = False
Else
strSQL &= " AND "
End If
strSQL &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.料号PN) & "`"
strSQL &= " COLLATE gbk_chinese_ci "
strSQL &= " LIKE '%"
strSQL &= form_QuerySim.GetLikeString(strSplit(i)) & "%'"
strSQL &= " escape '/'"
Next
End If
End If
SQL_Query(COL_RIGHTS.料号管理, strSQL, m_Table)
End Sub
Private Sub btn_SaveAs_Click(sender As Object, e As EventArgs) Handles btn_SaveAs.Click
Dim dlg As New SaveFileDialog()
dlg.DefaultExt = "xls"
dlg.Filter = "Excel File|*.xls"
If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Return
If Grid1.ExportToExcel(dlg.FileName, True, True) Then
MsgBox("保存为Excel成功" & dlg.FileName)
Else
MsgBox("保存失败!")
End If
End Sub
End Class