1736 lines
65 KiB
VB.net
1736 lines
65 KiB
VB.net
Imports System.Text
|
||
|
||
Public Class form_BomManage
|
||
Dim m_Table As New System.Data.DataTable
|
||
Dim m_InitOver As Boolean = False
|
||
Dim m_PartNumber As New CPartNumber
|
||
|
||
Dim m_BomTemplateName As String = "模板"
|
||
Dim m_CurrentBomPN As String = ""
|
||
Dim m_BomPath As New ArrayList
|
||
|
||
Public Enum COLS
|
||
序号
|
||
工艺流程
|
||
料号PN
|
||
物料名称
|
||
规格描述
|
||
单位
|
||
用量
|
||
使用位置
|
||
父料号
|
||
图片
|
||
备注
|
||
单价 'V2.4
|
||
单位总价 'V2.4
|
||
max
|
||
End Enum
|
||
|
||
Public Shared m_COLS_NAME(,) As String = {
|
||
{"序号", "0"},
|
||
{"工艺流程", "1"},
|
||
{"料号PN", "1"},
|
||
{"物料名称", "0"},
|
||
{"规格描述", "0"},
|
||
{"单位", "0"},
|
||
{"用量", "1"},
|
||
{"使用位置", "1"},
|
||
{"父料号", "1"},
|
||
{"图片", "0"},
|
||
{"备注", "1"},
|
||
{"单价", "1"},
|
||
{"单位总价", "1"}
|
||
}
|
||
|
||
Public Shared m_ProcessRoutingTable() As String = {
|
||
"Bonding",
|
||
"SMT",
|
||
"DIP",
|
||
"成品组装",
|
||
"成品包装",
|
||
"线外加工",
|
||
"其它-1",
|
||
"其它-2",
|
||
"其它-3",
|
||
"其它-4",
|
||
"其它-5"
|
||
}
|
||
|
||
Private Sub FillGridHeaderByDataTable()
|
||
Grid1.NewFile()
|
||
|
||
Grid1.AllowUserSort = False
|
||
Grid1.DisplayFocusRect = False
|
||
Grid1.ExtendLastCol = True
|
||
Grid1.DisplayRowArrow = True
|
||
Grid1.BoldFixedCell = False
|
||
Grid1.SortIndicatorStyle = FlexCell.SortIndicatorStyleEnum.Light3D
|
||
|
||
Grid1.Cols = COLS.max
|
||
For col As Integer = 0 To COLS.max - 1
|
||
Grid1.Cell(0, col).Text = m_COLS_NAME(col, 0)
|
||
Next
|
||
|
||
Grid1.Column(COLS.父料号).CellType = FlexCell.CellTypeEnum.CheckBox
|
||
Grid1.Column(COLS.工艺流程).CellType = FlexCell.CellTypeEnum.ComboBox
|
||
With Grid1.ComboBox(COLS.工艺流程)
|
||
.DataSource = m_ProcessRoutingTable
|
||
.Locked = False
|
||
.AutoComplete = True
|
||
End With
|
||
|
||
'调整宽度
|
||
Grid1.Column(COLS.序号).Width = My.Settings.FORM_BOM_COL_WIDTH_序号
|
||
Grid1.Column(COLS.工艺流程).Width = My.Settings.FORM_BOM_COL_WIDTH_工艺流程
|
||
Grid1.Column(COLS.料号PN).Width = My.Settings.FORM_BOM_COL_WIDTH_料号PN
|
||
Grid1.Column(COLS.物料名称).Width = My.Settings.FORM_BOM_COL_WIDTH_物料名称
|
||
Grid1.Column(COLS.规格描述).Width = My.Settings.FORM_BOM_COL_WIDTH_规格描述
|
||
Grid1.Column(COLS.单位).Width = My.Settings.FORM_BOM_COL_WIDTH_单位
|
||
Grid1.Column(COLS.用量).Width = My.Settings.FORM_BOM_COL_WIDTH_用量
|
||
Grid1.Column(COLS.使用位置).Width = My.Settings.FORM_BOM_COL_WIDTH_使用位置
|
||
Grid1.Column(COLS.父料号).Width = My.Settings.FORM_BOM_COL_WIDTH_父料号
|
||
Grid1.Column(COLS.图片).Width = My.Settings.FORM_BOM_COL_WIDTH_图片
|
||
Grid1.Column(COLS.备注).Width = My.Settings.FORM_BOM_COL_WIDTH_备注
|
||
Me.Height = My.Settings.FORM_BOM_HEIGHT
|
||
Me.Width = My.Settings.FORM_BOM_WIDTH
|
||
|
||
''Dim row As Integer
|
||
'Dim col As Integer
|
||
'If m_Table.Columns.Count > 0 Then
|
||
' Grid1.Cols = m_Table.Columns.Count
|
||
' For col = 0 To m_Table.Columns.Count - 1
|
||
' If m_Table.Columns(col).DataType.Name = "Boolean" Then
|
||
' Grid1.Column(col).CellType = FlexCell.CellTypeEnum.CheckBox
|
||
' End If
|
||
' Grid1.Cell(0, col).Text = m_Table.Columns(col).ColumnName
|
||
' Next
|
||
'End If
|
||
|
||
'For i As Integer = 1 To Grid1.Rows - 1
|
||
' Grid1.Cell(i, 0).Text = i
|
||
'Next
|
||
|
||
Grid1.AllowUserSort = True
|
||
Grid1.Locked = False
|
||
Grid1.Column(COLS.序号).Locked = True
|
||
|
||
Grid1.Rows = 500
|
||
|
||
Application.DoEvents()
|
||
End Sub
|
||
|
||
Private Sub FillGridByDataTable()
|
||
Dim row As Integer
|
||
Dim col As Integer
|
||
|
||
'Grid1.AutoRedraw = False
|
||
If Grid1.Rows < m_Table.Rows.Count Then
|
||
Grid1.Rows = m_Table.Rows.Count + 100
|
||
End If
|
||
|
||
Dim insertRow As Integer = 0
|
||
|
||
If m_Table.Rows.Count > 0 Then
|
||
For row = 0 To m_Table.Rows.Count - 1
|
||
insertRow = row + 1
|
||
|
||
Grid1.Cell(insertRow, COLS.序号).Text = insertRow
|
||
'Dim queryCol As Integer = 1
|
||
Dim queryCol As Integer = 0
|
||
For col = 0 To COLS.max - 1
|
||
If m_COLS_NAME(col, 1) = "1" Then
|
||
Try
|
||
Grid1.Cell(insertRow, col).Text = m_Table.Rows.Item(row).Item(queryCol)
|
||
Catch ex As Exception
|
||
Grid1.Cell(insertRow, col).Text = ""
|
||
End Try
|
||
|
||
queryCol += 1
|
||
End If
|
||
Next
|
||
Next
|
||
End If
|
||
|
||
'Grid1.AutoRedraw = True
|
||
'Grid1.Refresh()
|
||
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 Function DropBom(ByVal bomName As String) As Boolean
|
||
Dim strSQL As String = "DROP TABLE IF EXISTS `" & "bom_" & bomName & "`"
|
||
Dim result As Boolean = False
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, strSQL) = True Then
|
||
result = True
|
||
End If
|
||
|
||
Return result
|
||
End Function
|
||
|
||
Private Function CreateBom(ByVal bomName As String) As Boolean
|
||
Dim strSQL As String = "CREATE TABLE IF NOT EXISTS `" & "bom_" & bomName & "` Like `" & "bom_" & m_BomTemplateName & "`"
|
||
Dim result As Boolean = False
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, strSQL) = True Then
|
||
result = True
|
||
End If
|
||
|
||
Return result
|
||
End Function
|
||
|
||
Private Function CreateContextBom(ByVal bomName As String) As Boolean
|
||
Dim strSQL As String = "CREATE TABLE IF NOT EXISTS `" & "bom_" & bomName & "` Like `" & "bom_" & m_BomTemplateName & "_context`"
|
||
Dim result As Boolean = False
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, strSQL) = True Then
|
||
result = True
|
||
End If
|
||
|
||
Return result
|
||
End Function
|
||
|
||
Private Function RenameBom(ByVal oldName As String, ByVal newName As String) As Boolean
|
||
Dim strSQL As String = "ALTER TABLE `" & "bom_" & oldName & "`" & " RENAME TO `" & "bom_" & newName & "`"
|
||
Dim result As Boolean = False
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, strSQL) = True Then
|
||
result = True
|
||
End If
|
||
|
||
Return result
|
||
End Function
|
||
|
||
Private Sub btNew_Click(sender As Object, e As EventArgs)
|
||
Dim inputDlg As New dlg_Input
|
||
inputDlg.Text = "请输入新建的料号"
|
||
inputDlg.tb_Input.MaxLength = 32
|
||
inputDlg.tb_Input.CharacterCasing = CharacterCasing.Upper
|
||
If inputDlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Return
|
||
|
||
m_CurrentBomPN = ""
|
||
If inputDlg.tb_Input.Text.Length = 0 Then
|
||
MsgBox("输入料号不能为空")
|
||
Return
|
||
End If
|
||
|
||
Dim inputBomSn As String = inputDlg.tb_Input.Text
|
||
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(inputBomSn, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return
|
||
End If
|
||
|
||
'检测输入料号的料表是否已经存在
|
||
If CheckBomExist(inputBomSn, isExist) = True Then
|
||
If isExist = True Then
|
||
MsgBox("输入料号料表已经存在")
|
||
Return
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号对应的料表是否存在,请检查网络连接!")
|
||
Return
|
||
End If
|
||
|
||
m_CurrentBomPN = inputBomSn
|
||
lbl_CurrentPN.Text = "当前料表料号:" & m_CurrentBomPN
|
||
|
||
'查询料表模板
|
||
If QueryBom(m_BomTemplateName, m_Table) = True Then
|
||
FillGridHeaderByDataTable()
|
||
End If
|
||
End Sub
|
||
|
||
'Private Sub Grid1_LeaveRow(Sender As Object, e As FlexCell.Grid.LeaveRowEventArgs) Handles Grid1.LeaveRow
|
||
' If e.Row > 0 Then
|
||
' If Grid1.Cell(e.Row, COLS.料号PN).Text.Length > 0 Then
|
||
' Grid1.Cell(e.Row, COLS.序号).Text = e.Row
|
||
' End If
|
||
' End If
|
||
'End Sub
|
||
|
||
|
||
Private Sub btSave_Click(sender As Object, e As EventArgs) Handles btSave.Click
|
||
If m_CurrentBomPN.Length = 0 Then
|
||
MsgBox("未指定当前BOM料号!")
|
||
Return
|
||
End If
|
||
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(m_CurrentBomPN, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return
|
||
End If
|
||
|
||
'检测内容中的PN字段有效性
|
||
If CheckPNValid() = False Then
|
||
MsgBox("输入信息存在错误,不能进行保存!")
|
||
Return
|
||
End If
|
||
|
||
'创建料号表
|
||
If SaveBom(m_CurrentBomPN) = False Then
|
||
MsgBox("保存料表失败")
|
||
Return
|
||
End If
|
||
|
||
MsgBox("保存料表:" & m_CurrentBomPN & "成功")
|
||
End Sub
|
||
|
||
|
||
Private Function CheckPNValid() As Boolean
|
||
Dim row As Integer
|
||
'清除背景颜色
|
||
For row = 1 To Grid1.Rows - 1
|
||
Grid1.Cell(row, COLS.料号PN).BackColor = Color.White
|
||
Grid1.Cell(row, COLS.用量).BackColor = Color.White
|
||
Grid1.Cell(row, COLS.序号).Text = ""
|
||
Next
|
||
|
||
|
||
'检测料表输入数据是否有效
|
||
Dim strPN As String
|
||
Dim isExist As Boolean = False
|
||
Dim checkResult As Boolean = True
|
||
Dim m_SN As Integer = 1
|
||
Dim m_Number As Long
|
||
For row = 1 To Grid1.Rows - 1
|
||
strPN = Grid1.Cell(row, COLS.料号PN).Text
|
||
If strPN.Length > 0 Then
|
||
'检测料号有效性
|
||
If m_PartNumber.CheckPartNumber(strPN, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = True Then
|
||
Grid1.Cell(row, COLS.料号PN).BackColor = Color.Green
|
||
Else
|
||
checkResult = False
|
||
Grid1.Cell(row, COLS.料号PN).BackColor = Color.Red
|
||
End If
|
||
Else
|
||
checkResult = False
|
||
Grid1.Cell(row, COLS.料号PN).BackColor = Color.Red
|
||
End If
|
||
|
||
'检测“用量”列,是否为数据
|
||
Try
|
||
m_Number = Grid1.Cell(row, COLS.用量).Text
|
||
Grid1.Cell(row, COLS.用量).BackColor = Color.Green
|
||
Catch ex As Exception
|
||
Grid1.Cell(row, COLS.用量).BackColor = Color.Red
|
||
checkResult = False
|
||
End Try
|
||
|
||
Grid1.Cell(row, COLS.序号).Text = m_SN
|
||
m_SN += 1
|
||
End If
|
||
Next
|
||
|
||
Return checkResult
|
||
End Function
|
||
|
||
Private Function SaveBomItems(ByVal bomName As String) As Boolean
|
||
Dim row As Integer
|
||
Dim col As Integer
|
||
Dim result As Boolean = True
|
||
|
||
'INSERT INTO table_name(col_name,...) values(expr,...)
|
||
Dim strInsert As String = "INSERT INTO `" & "bom_" & bomName & "` "
|
||
Dim insertItems As String = ""
|
||
For col = 0 To COLS.max - 3
|
||
If m_COLS_NAME(col, 1) = "1" Then
|
||
If insertItems.Length > 0 Then
|
||
insertItems &= ","
|
||
End If
|
||
insertItems &= "`" & m_COLS_NAME(col, 0) & "`"
|
||
End If
|
||
Next
|
||
|
||
For row = 1 To Grid1.Rows - 1
|
||
If Grid1.Cell(row, COLS.料号PN).BackColor = Color.Green Then
|
||
Dim insertValues As String = ""
|
||
|
||
For col = 0 To COLS.max - 3
|
||
If m_COLS_NAME(col, 1) = "1" Then
|
||
If insertValues.Length > 0 Then
|
||
insertValues &= ","
|
||
End If
|
||
|
||
If Grid1.Column(col).CellType = FlexCell.CellTypeEnum.CheckBox Then
|
||
If Grid1.Cell(row, col).BooleanValue = True Then
|
||
insertValues &= "'1'"
|
||
Else
|
||
insertValues &= "'0'"
|
||
End If
|
||
Else
|
||
insertValues &= "'" & Grid1.Cell(row, col).Text & "'"
|
||
End If
|
||
End If
|
||
Next
|
||
|
||
Dim strSQL As String = strInsert & "(" & insertItems & ") values(" & insertValues & ")"
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, strSQL) = False Then
|
||
result = False
|
||
Exit For
|
||
End If
|
||
End If
|
||
Next
|
||
|
||
Return result
|
||
End Function
|
||
|
||
Private Function SaveBom(ByVal bomName As String) As Boolean
|
||
'删除原Bom
|
||
'If DropBom(bomName) = False Then Return False
|
||
'MsgBox("DropBOM OK!")
|
||
|
||
'创建新Bom
|
||
Dim tempBom As String = bomName & "_temp"
|
||
If CreateBom(tempBom) = False Then Return False
|
||
'MsgBox("CreateBom OK!")
|
||
|
||
'保存Bom内容
|
||
If SaveBomItems(tempBom) = False Then Return False
|
||
'MsgBox("SaveBomItems OK!")
|
||
|
||
'删除原Bom
|
||
If DropBom(bomName) = False Then Return False
|
||
|
||
'重命名新BOM
|
||
If RenameBom(tempBom, bomName) = False Then Return False
|
||
|
||
Return True
|
||
End Function
|
||
|
||
|
||
Private Function SaveBomItems2(tempBom) As Boolean
|
||
Dim result As Boolean = True
|
||
|
||
Dim cmdText As New StringBuilder
|
||
Dim insertStr As New StringBuilder
|
||
insertStr.Append($"INSERT INTO `bom_{tempBom}` ")
|
||
insertStr.Append("(")
|
||
insertStr.Append($"`{SourceGridCols.使用位置}`,")
|
||
insertStr.Append($"`{SourceGridCols.用量}`,")
|
||
insertStr.Append($"`{SourceGridCols.工艺流程}`,")
|
||
insertStr.Append($"`{SourceGridCols.料号PN}`")
|
||
insertStr.Append(")")
|
||
insertStr.Append(" values")
|
||
|
||
For i = 1 To GrdSourceBom.Rows - 1
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(i, SourceGridCols.注释).Text) Then
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(i, SourceGridCols.料号PN).Text) Then
|
||
Continue For
|
||
End If
|
||
End If
|
||
|
||
cmdText.Clear()
|
||
cmdText.Append(insertStr.ToString)
|
||
cmdText.Append("(")
|
||
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.使用位置).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.用量).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.工艺流程).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.料号PN).Text}'")
|
||
|
||
cmdText.Append(")")
|
||
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, cmdText.ToString) = False Then
|
||
result = False
|
||
Exit For
|
||
End If
|
||
Next
|
||
|
||
Return result
|
||
End Function
|
||
|
||
|
||
''' <summary>
|
||
''' 保存BOM临时表
|
||
''' </summary>
|
||
''' <param name="bomName"></param>
|
||
''' <returns></returns>
|
||
Private Function SaveBom2(bomName As String) As Boolean
|
||
|
||
'创建新Bom
|
||
Dim tempBom As String = bomName & "_temp"
|
||
If CreateBom(tempBom) = False Then Return False
|
||
|
||
'保存Bom内容
|
||
If SaveBomItems2(tempBom) = False Then Return False
|
||
|
||
'删除原Bom
|
||
If DropBom(bomName) = False Then Return False
|
||
|
||
'重命名新BOM
|
||
If RenameBom(tempBom, bomName) = False Then Return False
|
||
|
||
Return True
|
||
End Function
|
||
|
||
|
||
Private Function SaveBomContextItems(tempBom) As Boolean
|
||
Dim result As Boolean = True
|
||
|
||
'INSERT INTO table_name(col_name,...) values(expr,...)
|
||
Dim cmdText As New StringBuilder
|
||
Dim insertStr As New StringBuilder
|
||
insertStr.Append($"INSERT INTO `bom_{tempBom}` ")
|
||
insertStr.Append("(")
|
||
insertStr.Append($"`{SourceGridCols.注释}`,")
|
||
insertStr.Append($"`{SourceGridCols.使用位置}`,")
|
||
insertStr.Append($"`{SourceGridCols.型号}`,")
|
||
insertStr.Append($"`{SourceGridCols.用量}`,")
|
||
insertStr.Append($"`{SourceGridCols.校验}`,")
|
||
insertStr.Append($"`{SourceGridCols.工艺流程}`,")
|
||
insertStr.Append($"`{SourceGridCols.料号PN}`")
|
||
insertStr.Append(")")
|
||
insertStr.Append(" values")
|
||
|
||
For i = 1 To GrdSourceBom.Rows - 1
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(i, SourceGridCols.注释).Text) Then
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(i, SourceGridCols.料号PN).Text) Then
|
||
Continue For
|
||
End If
|
||
End If
|
||
|
||
cmdText.Clear()
|
||
cmdText.Append(insertStr.ToString)
|
||
cmdText.Append("(")
|
||
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.注释).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.使用位置).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.型号).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.用量).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.校验).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.工艺流程).Text}',")
|
||
cmdText.Append($"'{GrdSourceBom.Cell(i, SourceGridCols.料号PN).Text}'")
|
||
|
||
cmdText.Append(")")
|
||
|
||
If SQL_ExeCommand(COL_RIGHTS.BOM管理, cmdText.ToString) = False Then
|
||
result = False
|
||
Exit For
|
||
End If
|
||
Next
|
||
|
||
Return result
|
||
End Function
|
||
|
||
|
||
''' <summary>
|
||
''' 保存BOM临时表
|
||
''' </summary>
|
||
''' <param name="bomName"></param>
|
||
''' <returns></returns>
|
||
Private Function SaveBomContext(bomName As String) As Boolean
|
||
'创建新Bom
|
||
Dim oldBom As String = bomName & "_context"
|
||
Dim tempBom As String = bomName & "_context" & "_temp"
|
||
If CreateContextBom(tempBom) = False Then Return False
|
||
|
||
'保存Bom内容
|
||
If SaveBomContextItems(tempBom) = False Then Return False
|
||
|
||
'删除原Bom
|
||
If DropBom(oldBom) = False Then Return False
|
||
|
||
'重命名新BOM
|
||
If RenameBom(tempBom, oldBom) = False Then Return False
|
||
|
||
Return True
|
||
End Function
|
||
|
||
|
||
|
||
|
||
Private Sub PushToBomPath(ByVal bomName As String)
|
||
m_BomPath.Add(m_CurrentBomPN)
|
||
RefreshBomPath()
|
||
End Sub
|
||
|
||
Private Function PopFromBomPath() As String
|
||
Dim backBomName As String = ""
|
||
|
||
If m_BomPath.Count >= 2 Then
|
||
m_BomPath.RemoveAt(m_BomPath.Count - 1)
|
||
backBomName = m_BomPath.Item(m_BomPath.Count - 1)
|
||
m_BomPath.RemoveAt(m_BomPath.Count - 1)
|
||
End If
|
||
|
||
RefreshBomPath()
|
||
|
||
Return backBomName
|
||
End Function
|
||
|
||
Private Sub RefreshBomPath()
|
||
Dim tempPath As String = ""
|
||
|
||
For Each pItem As String In m_BomPath
|
||
If tempPath.Length > 0 Then
|
||
tempPath &= "\"
|
||
End If
|
||
tempPath &= pItem
|
||
Next
|
||
|
||
lblBomPath.Text = tempPath
|
||
|
||
If m_BomPath.Count >= 2 Then
|
||
btOpenBack.Enabled = True
|
||
Else
|
||
btOpenBack.Enabled = False
|
||
End If
|
||
|
||
btOpenNext.Enabled = False
|
||
|
||
Application.DoEvents()
|
||
End Sub
|
||
|
||
Private Function OpenBom(ByVal bomName As String) As Boolean
|
||
Dim result As Boolean = False
|
||
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(bomName, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return False
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return False
|
||
End If
|
||
|
||
'检测输入料号的料表是否已经存在
|
||
If CheckBomExist(bomName, isExist) = True Then
|
||
If isExist = True Then
|
||
m_CurrentBomPN = bomName
|
||
lbl_CurrentPN.Text = "当前料表料号:" & m_CurrentBomPN
|
||
|
||
'查询料表模板
|
||
If QueryBom(m_CurrentBomPN, m_Table) = True Then
|
||
PushToBomPath(m_CurrentBomPN)
|
||
|
||
FillGridHeaderByDataTable()
|
||
FillGridByDataTable()
|
||
If chk_ShowPnInfo.Checked = True Then
|
||
GetAllPNItemInfo()
|
||
End If
|
||
|
||
result = True
|
||
End If
|
||
Else
|
||
If MessageBox.Show("输入料号BOM不存在,是否新建BOM?" & vbNewLine & "选择""是""新建, 否则""取消""", "新建BOM?", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
|
||
m_CurrentBomPN = bomName
|
||
lbl_CurrentPN.Text = "当前料表料号:" & m_CurrentBomPN
|
||
|
||
'查询料表模板
|
||
If QueryBom(m_BomTemplateName, m_Table) = True Then
|
||
PushToBomPath(m_CurrentBomPN)
|
||
FillGridHeaderByDataTable()
|
||
|
||
result = True
|
||
End If
|
||
End If
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号对应的BOM是否存在,请检查网络连接!")
|
||
End If
|
||
|
||
Return result
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' 加载临时Bom表
|
||
''' </summary>
|
||
''' <param name="bomName"></param>
|
||
''' <returns></returns>
|
||
Private Function OpenBomContext(bomName As String) As Boolean
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(bomName, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return False
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return False
|
||
End If
|
||
|
||
'检测输入料号的料表是否已经存在
|
||
If CheckBomExist(bomName, isExist) = False Then
|
||
MsgBox("无法查询输入料号对应的BOM是否存在,请检查网络连接!")
|
||
Return False
|
||
End If
|
||
|
||
Dim tbName As String '数据表名
|
||
If isExist = False Then
|
||
If MessageBox.Show($"输入料号BOM不存在,是否新建BOM?{vbNewLine}选择""是""新建, 否则""取消""", "新建BOM?", MessageBoxButtons.YesNo) <> Windows.Forms.DialogResult.Yes Then
|
||
Return False
|
||
End If
|
||
tbName = $"bom_模板_context"
|
||
Else
|
||
tbName = $"bom_{bomName}_context"
|
||
End If
|
||
|
||
lbl_CurrentPN.Text = "当前料表料号:" & bomName
|
||
|
||
|
||
'查询云端数据
|
||
Dim strSQL As String = $"Select * From `{tbName}` order by `ID` asc"
|
||
Dim dtTable As New DataTable
|
||
If SQL_Query(COL_RIGHTS.BOM管理, strSQL, dtTable) = False Then Return False
|
||
|
||
'名称有所变化(不明作用)
|
||
' PushToBomPath(bomName)
|
||
|
||
'填充至表格
|
||
InitSourceGrid() '初始化表格
|
||
GrdSourceBom.AutoRedraw = False
|
||
For i = 0 To dtTable.Rows.Count - 1
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.注释).Text = dtTable(i)($"{SourceGridCols.注释}").ToString
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.使用位置).Text = dtTable(i)($"{SourceGridCols.使用位置}").ToString
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.型号).Text = dtTable(i)($"{SourceGridCols.型号}").ToString
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.用量).Text = dtTable(i)($"{SourceGridCols.用量}").ToString
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.校验).Text = dtTable(i)($"{SourceGridCols.校验}").ToString
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.工艺流程).Text = dtTable(i)($"{SourceGridCols.工艺流程}").ToString
|
||
GrdSourceBom.Cell(i + 1, SourceGridCols.料号PN).Text = dtTable(i)($"{SourceGridCols.料号PN}").ToString
|
||
Next
|
||
GrdSourceBom.AutoRedraw = True
|
||
GrdSourceBom.Refresh()
|
||
|
||
If chk_ShowPnInfo.Checked Then
|
||
GetAllPnInfo()
|
||
End If
|
||
|
||
Return True
|
||
End Function
|
||
|
||
|
||
Private Sub btQueryBom_Click(sender As Object, e As EventArgs) Handles btQueryBom.Click
|
||
m_CurrentBomPN = ""
|
||
m_BomPath.Clear()
|
||
|
||
If tbBomPN.Text.Length = 0 Then
|
||
MsgBox("输入料号不能为空")
|
||
Return
|
||
End If
|
||
|
||
If TabControl1.SelectedIndex = 0 Then
|
||
OpenBom(tbBomPN.Text)
|
||
ElseIf TabControl1.SelectedIndex = 2 Then
|
||
OpenBomContext(tbBomPN.Text) '加载临时BOM
|
||
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 = ""
|
||
|
||
Dim 用量 As String = Grid1.Cell(gridRowIndex, 6).IntegerValue
|
||
|
||
|
||
'Grid1.Cell(gridRowIndex, COLS.物料名称).Text = ""
|
||
'Grid1.Cell(gridRowIndex, COLS.规格描述).Text = ""
|
||
'Grid1.Cell(gridRowIndex, COLS.单位).Text = ""
|
||
'Grid1.Cell(gridRowIndex, COLS.单价).Text = ""
|
||
'Grid1.Cell(gridRowIndex, COLS.单位总价).Text = ""
|
||
'Grid1.Cell(gridRowIndex, COLS.图片).Text = ""
|
||
|
||
Dim result As Boolean = False
|
||
Dim strPn As String = Grid1.Cell(gridRowIndex, COLS.料号PN).Text
|
||
|
||
|
||
'If chk_ShowPnImage.Checked = True Then
|
||
' If m_PartNumber.QueryItem(strPn, 物料名称, 规格描述, 单位, 单重, 图片, 供应商ID) = ERROR_CODE.SUCCESS Then
|
||
' Grid1.Cell(gridRowIndex, COLS.物料名称).Text = 物料名称
|
||
' Grid1.Cell(gridRowIndex, COLS.规格描述).Text = 规格描述
|
||
' Grid1.Cell(gridRowIndex, COLS.单位).Text = 单位
|
||
' Grid1.Cell(gridRowIndex, COLS.单价).Text = 单重
|
||
' Grid1.Cell(gridRowIndex, COLS.单位总价).Text = 单重 * 用量
|
||
|
||
' Grid1.Cell(gridRowIndex, COLS.图片).Text = ""
|
||
|
||
' Dim mImage As System.Drawing.Image = GetImageFromBytes(图片)
|
||
' If Grid1.Images.Count >= gridRowIndex Then
|
||
' Grid1.Images.Remove(gridRowIndex.ToString)
|
||
' End If
|
||
' Grid1.Images.Add(mImage, gridRowIndex.ToString)
|
||
' Grid1.Cell(gridRowIndex, COLS.图片).SetImage(gridRowIndex.ToString)
|
||
|
||
' result = True
|
||
' End If
|
||
'Else
|
||
' If m_PartNumber.QueryItem(strPn, 物料名称, 规格描述, 单位, 单重, 供应商ID) = ERROR_CODE.SUCCESS Then
|
||
' Grid1.Cell(gridRowIndex, COLS.物料名称).Text = 物料名称
|
||
' Grid1.Cell(gridRowIndex, COLS.规格描述).Text = 规格描述
|
||
' Grid1.Cell(gridRowIndex, COLS.单位).Text = 单位
|
||
' Grid1.Cell(gridRowIndex, COLS.单价).Text = 单重
|
||
' Grid1.Cell(gridRowIndex, COLS.单位总价).Text = 单重 * 用量
|
||
' Grid1.Cell(gridRowIndex, COLS.图片).Text = ""
|
||
' result = True
|
||
' End If
|
||
'End If
|
||
|
||
|
||
|
||
If chk_ShowPnImage.Checked = True Then
|
||
If m_PartNumber.QueryItem(strPn, 物料名称, 规格描述, 单位, 单重, 图片, 供应商ID) = ERROR_CODE.SUCCESS Then
|
||
'填充图像
|
||
Dim mImage As System.Drawing.Image = GetImageFromBytes(图片)
|
||
If Grid1.Images.Count >= gridRowIndex Then
|
||
Grid1.Images.Remove(gridRowIndex.ToString)
|
||
End If
|
||
Grid1.Images.Add(mImage, gridRowIndex.ToString)
|
||
Grid1.Cell(gridRowIndex, COLS.图片).SetImage(gridRowIndex.ToString)
|
||
|
||
result = True
|
||
End If
|
||
Else
|
||
If m_PartNumber.QueryItem(strPn, 物料名称, 规格描述, 单位, 单重, 供应商ID) = ERROR_CODE.SUCCESS Then
|
||
result = True
|
||
End If
|
||
End If
|
||
|
||
Grid1.Cell(gridRowIndex, COLS.物料名称).Text = 物料名称
|
||
Grid1.Cell(gridRowIndex, COLS.规格描述).Text = 规格描述
|
||
Grid1.Cell(gridRowIndex, COLS.单位).Text = 单位
|
||
Grid1.Cell(gridRowIndex, COLS.单价).Text = 单重
|
||
Grid1.Cell(gridRowIndex, COLS.单位总价).Text = 单重 * 用量
|
||
Grid1.Cell(gridRowIndex, COLS.图片).Text = ""
|
||
|
||
Return result
|
||
End Function
|
||
|
||
|
||
Private Function GetAllPNItemInfo() As Boolean
|
||
Dim TotalCost As Double = 0
|
||
Dim AvailabeRows As Integer = 0
|
||
|
||
For row As Integer = 1 To Grid1.Rows - 1
|
||
Grid1.Cell(row, COLS.物料名称).Text = ""
|
||
Grid1.Cell(row, COLS.规格描述).Text = ""
|
||
Grid1.Cell(row, COLS.单位).Text = ""
|
||
|
||
Grid1.Cell(row, COLS.单价).Text = ""
|
||
Grid1.Cell(row, COLS.单位总价).Text = ""
|
||
|
||
Grid1.Cell(row, COLS.图片).Text = ""
|
||
Next
|
||
|
||
Grid1.Images.Clear()
|
||
|
||
Dim result As Boolean = True
|
||
|
||
For row As Integer = 1 To Grid1.Rows - 1
|
||
AvailabeRows = AvailabeRows + 1
|
||
If GetPNItemInfo(row) = False Then
|
||
result = False
|
||
Exit For
|
||
End If
|
||
TotalCost = TotalCost + Grid1.Cell(row, COLS.单位总价).Text
|
||
Next
|
||
Grid1.Cell(AvailabeRows, COLS.单位总价 - 1).Text = "Total : "
|
||
Grid1.Cell(AvailabeRows, COLS.单位总价).Text = TotalCost
|
||
|
||
Return result
|
||
End Function
|
||
|
||
Private Sub Grid1_LeaveCell(Sender As Object, e As FlexCell.Grid.LeaveCellEventArgs) Handles Grid1.LeaveCell
|
||
If e.Row > 1 AndAlso e.Col = COLS.料号PN Then
|
||
If Grid1.Cell(e.Row, e.Col).Text.Length > 0 Then
|
||
Dim inputBomPn As String = Grid1.Cell(e.Row, e.Col).Text.ToUpper
|
||
Grid1.Cell(e.Row, e.Col).Text = inputBomPn
|
||
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(inputBomPn, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = True Then
|
||
If chk_ShowPnInfo.Checked = True Then
|
||
GetPNItemInfo(e.Row)
|
||
End If
|
||
Else
|
||
Grid1.Cell(e.Row, e.Col).BackColor = Color.Red
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return
|
||
End If
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub form_BomManage_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
|
||
My.Settings.FORM_BOM_COL_WIDTH_序号 = Grid1.Column(COLS.序号).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_工艺流程 = Grid1.Column(COLS.工艺流程).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_料号PN = Grid1.Column(COLS.料号PN).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_物料名称 = Grid1.Column(COLS.物料名称).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_规格描述 = Grid1.Column(COLS.规格描述).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_单位 = Grid1.Column(COLS.单位).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_用量 = Grid1.Column(COLS.用量).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_使用位置 = Grid1.Column(COLS.使用位置).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_父料号 = Grid1.Column(COLS.父料号).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_图片 = Grid1.Column(COLS.图片).Width
|
||
My.Settings.FORM_BOM_COL_WIDTH_备注 = Grid1.Column(COLS.备注).Width
|
||
My.Settings.FORM_BOM_HEIGHT = Me.Height
|
||
My.Settings.FORM_BOM_WIDTH = Me.Width
|
||
|
||
My.Settings.Save()
|
||
End Sub
|
||
|
||
Private Sub btInsertRow_Click(sender As Object, e As EventArgs) Handles btInsertRow.Click
|
||
Grid1.Selection.InsertRows()
|
||
End Sub
|
||
|
||
Private Sub btDeleteRow_Click(sender As Object, e As EventArgs) Handles btDeleteRow.Click
|
||
Grid1.Selection.DeleteByRow()
|
||
End Sub
|
||
|
||
Private Sub btUpdate_Click(sender As Object, e As EventArgs) Handles btUpdate.Click
|
||
GetAllPNItemInfo()
|
||
End Sub
|
||
|
||
Private Sub btOpenFatherPN_Click(sender As Object, e As EventArgs) Handles btOpenNext.Click
|
||
Dim selRow As Integer = Grid1.Selection.FirstRow
|
||
If selRow >= 1 Then
|
||
If Grid1.Cell(selRow, COLS.父料号).BooleanValue = True Then
|
||
tbBomPN.Text = Grid1.Cell(Grid1.Selection.FirstRow, COLS.料号PN).Text
|
||
OpenBom(tbBomPN.Text)
|
||
Else
|
||
MsgBox("选择项不是父料号,无法打开")
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub btOpenBack_Click(sender As Object, e As EventArgs) Handles btOpenBack.Click
|
||
tbBomPN.Text = PopFromBomPath()
|
||
If tbBomPN.Text.Length > 0 Then
|
||
OpenBom(tbBomPN.Text)
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub form_BomManage_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||
FillGridHeaderByDataTable()
|
||
m_BomPath.Clear()
|
||
RefreshBomPath()
|
||
btOpenNext.Enabled = False
|
||
|
||
InitSourceGrid()
|
||
End Sub
|
||
|
||
Private Sub Grid1_MouseClick(sender As Object, e As MouseEventArgs) Handles Grid1.MouseClick
|
||
btOpenNext.Enabled = False
|
||
If Grid1.Selection.FirstRow >= 1 Then
|
||
If Grid1.Cell(Grid1.Selection.FirstRow, COLS.父料号).BooleanValue = True Then
|
||
If Grid1.Cell(Grid1.Selection.FirstRow, COLS.料号PN).Text.Length > 0 Then
|
||
btOpenNext.Enabled = True
|
||
End If
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub Grid1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles Grid1.MouseDoubleClick
|
||
Dim selRow As Integer = Grid1.Selection.FirstRow
|
||
Dim selCol As Integer = Grid1.Selection.FirstCol
|
||
If Grid1.Selection.FirstRow >= 1 Then
|
||
If Grid1.Selection.FirstCol = COLS.图片 Then
|
||
Dim imageKey As String = Grid1.Cell(selRow, selCol).ImageKey
|
||
If Not imageKey Is Nothing AndAlso imageKey.Length > 0 Then
|
||
Dim mImage As System.Drawing.Image = Grid1.Images.Item(imageKey).Picture
|
||
If Not mImage Is Nothing Then
|
||
Dim dlgImage As New dlgImage
|
||
dlgImage.Text = Grid1.Cell(selRow, COLS.料号PN).Text
|
||
dlgImage.BackgroundImage = mImage
|
||
dlgImage.ShowDialog()
|
||
End If
|
||
End If
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub tbBomPN_KeyDown(sender As Object, e As KeyEventArgs) Handles tbBomPN.KeyDown
|
||
If e.KeyCode = Keys.Enter Then
|
||
btQueryBom.PerformClick()
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub chk_ShowPnImage_CheckedChanged(sender As Object, e As EventArgs) Handles chk_ShowPnImage.CheckedChanged
|
||
If chk_ShowPnImage.Checked = False Then
|
||
Grid1.Images.Clear()
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub btDelete_Click(sender As Object, e As EventArgs) Handles btDelete.Click
|
||
If m_CurrentBomPN.Length = 0 Then
|
||
MsgBox("未指定当前BOM料号!")
|
||
Return
|
||
End If
|
||
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(m_CurrentBomPN, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return
|
||
End If
|
||
|
||
'检测Bom表是否存在
|
||
isExist = False
|
||
If CheckBomExist(m_CurrentBomPN, isExist) = False Then
|
||
MsgBox("指定料号对应BOM不存在!")
|
||
Return
|
||
End If
|
||
|
||
If MessageBox.Show("确认删除指定BOM:" & m_CurrentBomPN & ",删除后无法恢复!", "BOM:" & m_CurrentBomPN & "删除确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
|
||
'删除料号表
|
||
If DropBom(m_CurrentBomPN) = False Then
|
||
MsgBox("删除料表失败")
|
||
Return
|
||
End If
|
||
|
||
MsgBox("删除料表:" & m_CurrentBomPN & "成功")
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub bt_Export_Click(sender As Object, e As EventArgs) Handles bt_Export.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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
'2021/10/06 Qizengbiao修改
|
||
#Region "数据查询"
|
||
Public Function GetLikeString(ByVal likestr As String) As String
|
||
Dim rString As String = ""
|
||
Dim ch As Char
|
||
For i As Integer = 1 To likestr.Length
|
||
ch = Strings.GetChar(likestr, i)
|
||
If ch = "%" OrElse ch = "_" OrElse ch = "/" Then
|
||
rString &= "/"
|
||
End If
|
||
rString &= ch
|
||
Next
|
||
|
||
Return rString
|
||
End Function
|
||
|
||
Private Sub QueryData_Quick(partNumber As String, partName As String, partDesc As String, hasInhaos As Boolean, hasJohao As Boolean)
|
||
Dim strSQL As String = "SELECT `" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.料号PN) & "`,`" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.物料名称) & "`,`" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.规格描述) & "`,`" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.单位) & "`,`" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.单重) & "`,`" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.供应商ID) & "`, `" &
|
||
CPartNumber.m_COLS_NAME(CPartNumber.COLS.序号) & "`"
|
||
strSQL &= " FROM `" & CPartNumber.cst_TABLE_NAME & "`"
|
||
|
||
If partNumber.Length > 0 OrElse
|
||
partName.Length > 0 OrElse
|
||
partDesc.Length > 0 OrElse
|
||
hasInhaos = True OrElse
|
||
hasJohao = True Then
|
||
|
||
strSQL &= " WHERE "
|
||
|
||
Dim strSplit() As String
|
||
Dim firstLike As Boolean = True
|
||
If partNumber.Length > 0 Then
|
||
strSplit = Split(partNumber, ",")
|
||
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 &= GetLikeString(strSplit(i)) & "%'"
|
||
strSQL &= " escape '/'"
|
||
Next
|
||
End If
|
||
|
||
If partName.Length > 0 Then
|
||
strSplit = Split(partName, ",")
|
||
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.物料名称) & "`"
|
||
strSQL &= " COLLATE gbk_chinese_ci "
|
||
strSQL &= " LIKE '%"
|
||
strSQL &= GetLikeString(strSplit(i)) & "%'"
|
||
strSQL &= " escape '/'"
|
||
Next
|
||
End If
|
||
|
||
If partDesc.Length > 0 Then
|
||
strSplit = Split(partDesc, ",")
|
||
For i As Integer = 0 To strSplit.Length - 1
|
||
Dim tmp As String = GetLikeString(strSplit(i))
|
||
If String.IsNullOrEmpty(tmp) Then Continue For
|
||
|
||
If firstLike = True Then
|
||
firstLike = False
|
||
Else
|
||
strSQL &= " AND "
|
||
End If
|
||
|
||
Select Case tmp(tmp.Length - 1)'查看是否以R或Ω结尾
|
||
Case "R"c
|
||
strSQL &= "("
|
||
|
||
strSQL &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.规格描述) & "`"
|
||
strSQL &= " COLLATE gbk_chinese_ci "
|
||
strSQL &= " LIKE '%"
|
||
strSQL &= tmp & "%'"
|
||
strSQL &= " escape '/'"
|
||
|
||
strSQL &= " or "
|
||
|
||
strSQL &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.规格描述) & "`"
|
||
strSQL &= " COLLATE gbk_chinese_ci "
|
||
strSQL &= " LIKE '%"
|
||
strSQL &= tmp.Replace("R"c, "Ω"c) & "%'"
|
||
strSQL &= " escape '/'"
|
||
|
||
strSQL &= ")"
|
||
Case "Ω"c
|
||
strSQL &= "("
|
||
|
||
strSQL &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.规格描述) & "`"
|
||
strSQL &= " COLLATE gbk_chinese_ci "
|
||
strSQL &= " LIKE '%"
|
||
strSQL &= tmp & "%'"
|
||
strSQL &= " escape '/'"
|
||
|
||
strSQL &= " or "
|
||
|
||
strSQL &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.规格描述) & "`"
|
||
strSQL &= " COLLATE gbk_chinese_ci "
|
||
strSQL &= " LIKE '%"
|
||
strSQL &= tmp.Replace("Ω"c, "R"c) & "%'"
|
||
strSQL &= " escape '/'"
|
||
|
||
strSQL &= ")"
|
||
Case Else
|
||
strSQL &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.规格描述) & "`"
|
||
strSQL &= " COLLATE gbk_chinese_ci "
|
||
strSQL &= " LIKE '%"
|
||
strSQL &= GetLikeString(strSplit(i)) & "%'"
|
||
strSQL &= " escape '/'"
|
||
End Select
|
||
Next
|
||
End If
|
||
|
||
Dim customStr As String = ""
|
||
If hasInhaos Then
|
||
customStr &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.供应商ID) & "` = '02'"
|
||
End If
|
||
|
||
If hasJohao Then
|
||
If String.IsNullOrEmpty(customStr) = False Then
|
||
customStr &= " OR "
|
||
customStr &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.供应商ID) & "` ='01'"
|
||
|
||
customStr = $"({customStr})"
|
||
Else
|
||
customStr &= "`" & CPartNumber.m_COLS_NAME(CPartNumber.COLS.供应商ID) & "` ='01'"
|
||
End If
|
||
End If
|
||
|
||
If firstLike = True Then
|
||
firstLike = False
|
||
Else
|
||
strSQL &= " AND "
|
||
End If
|
||
strSQL &= customStr
|
||
End If
|
||
|
||
SQL_Query(COL_RIGHTS.料号管理, strSQL, m_Table)
|
||
End Sub
|
||
|
||
|
||
|
||
#End Region
|
||
Enum SourceGridCols
|
||
Sn
|
||
注释
|
||
使用位置
|
||
型号
|
||
用量
|
||
校验
|
||
工艺流程
|
||
料号PN
|
||
物料名称
|
||
规格描述
|
||
单位
|
||
单价
|
||
Max
|
||
End Enum
|
||
|
||
Private Sub InitSourceGrid()
|
||
GrdSourceBom.NewFile()
|
||
|
||
GrdSourceBom.Cols = SourceGridCols.Max
|
||
GrdSourceBom.Rows = 500
|
||
|
||
GrdSourceBom.AutoRedraw = False
|
||
GrdSourceBom.DisplayRowNumber = True
|
||
GrdSourceBom.ExtendLastCol = True
|
||
|
||
For i = 0 To GrdSourceBom.Cols - 1
|
||
GrdSourceBom.Cell(0, i).Text = [Enum].GetName(GetType(SourceGridCols), i)
|
||
Next
|
||
|
||
GrdSourceBom.Column(SourceGridCols.规格描述).Width = 200
|
||
GrdSourceBom.Column(SourceGridCols.校验).CellType = FlexCell.CellTypeEnum.CheckBox
|
||
|
||
GrdSourceBom.Column(SourceGridCols.工艺流程).CellType = FlexCell.CellTypeEnum.ComboBox
|
||
With GrdSourceBom.ComboBox(SourceGridCols.工艺流程)
|
||
.DataSource = m_ProcessRoutingTable
|
||
.Locked = False
|
||
.AutoComplete = True
|
||
End With
|
||
|
||
GrdSourceBom.Range(0, SourceGridCols.校验, GrdSourceBom.Rows - 1, SourceGridCols.校验).BackColor = Color.LightBlue
|
||
|
||
GrdSourceBom.AutoRedraw = True
|
||
GrdSourceBom.Refresh()
|
||
End Sub
|
||
|
||
Enum QueueGridCols
|
||
Sn
|
||
料号PN
|
||
物料名称
|
||
规格描述
|
||
单位
|
||
单重
|
||
供应商ID
|
||
序号
|
||
End Enum
|
||
|
||
Enum DestBomGridCols
|
||
序号
|
||
工艺流程
|
||
料号PN
|
||
物料名称
|
||
规格描述
|
||
单位
|
||
用量
|
||
使用位置
|
||
单价
|
||
单位总价
|
||
MAX
|
||
End Enum
|
||
|
||
|
||
Private Sub 导出ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 导出ToolStripMenuItem.Click
|
||
Using fileDialog As New SaveFileDialog
|
||
fileDialog.Filter = "Excel文档(*.xls)|*.xls"
|
||
fileDialog.AddExtension = True
|
||
|
||
If String.IsNullOrEmpty(tbBomPN.Text) Then
|
||
fileDialog.FileName = tbBomPN.Text
|
||
Else
|
||
fileDialog.FileName = tbBomPN.Text & "-BOM"
|
||
End If
|
||
|
||
|
||
If fileDialog.ShowDialog <> DialogResult.OK Then Return
|
||
|
||
GrdSourceBom.ExportToExcel(fileDialog.FileName, True, True)
|
||
|
||
Dim tmpGrid As New FlexCell.Grid
|
||
tmpGrid.DisplayRowNumber = True
|
||
tmpGrid.Cols = DestBomGridCols.MAX + 1
|
||
tmpGrid.Rows = GrdSourceBom.Rows
|
||
|
||
tmpGrid.BackColorFixed = tmpGrid.BackColor1
|
||
|
||
tmpGrid.Cell(0, DestBomGridCols.序号).Text = "序号"
|
||
tmpGrid.Cell(0, DestBomGridCols.工艺流程).Text = "工艺流程"
|
||
tmpGrid.Cell(0, DestBomGridCols.料号PN).Text = "料号PN"
|
||
tmpGrid.Cell(0, DestBomGridCols.物料名称).Text = "物料名称"
|
||
tmpGrid.Cell(0, DestBomGridCols.规格描述).Text = "规格描述"
|
||
tmpGrid.Cell(0, DestBomGridCols.单位).Text = "单位"
|
||
tmpGrid.Cell(0, DestBomGridCols.用量).Text = "用量"
|
||
tmpGrid.Cell(0, DestBomGridCols.使用位置).Text = "使用位置"
|
||
tmpGrid.Cell(0, DestBomGridCols.单价).Text = "单价"
|
||
tmpGrid.Cell(0, DestBomGridCols.单位总价).Text = "单位总价"
|
||
|
||
tmpGrid.Cell(1, DestBomGridCols.序号 + 1).Text = "序号"
|
||
tmpGrid.Cell(1, DestBomGridCols.工艺流程 + 1).Text = "工艺流程"
|
||
tmpGrid.Cell(1, DestBomGridCols.料号PN + 1).Text = "料号PN"
|
||
tmpGrid.Cell(1, DestBomGridCols.物料名称 + 1).Text = "物料名称"
|
||
tmpGrid.Cell(1, DestBomGridCols.规格描述 + 1).Text = "规格描述"
|
||
tmpGrid.Cell(1, DestBomGridCols.单位 + 1).Text = "单位"
|
||
tmpGrid.Cell(1, DestBomGridCols.用量 + 1).Text = "用量"
|
||
tmpGrid.Cell(1, DestBomGridCols.使用位置 + 1).Text = "使用位置"
|
||
tmpGrid.Cell(1, DestBomGridCols.单价 + 1).Text = "单价"
|
||
tmpGrid.Cell(1, DestBomGridCols.单位总价 + 1).Text = "单位总价"
|
||
|
||
For i = 2 To tmpGrid.Rows - 1
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(i, SourceGridCols.料号PN).Text) Then
|
||
tmpGrid.Cell(i, DestBomGridCols.单价 + 1).Text = "Totel:"
|
||
|
||
|
||
Dim totel As Double = 0
|
||
For j = 2 To i - 1
|
||
totel += tmpGrid.Cell(j, DestBomGridCols.单位总价 + 1).DoubleValue
|
||
Next
|
||
|
||
tmpGrid.Cell(i, DestBomGridCols.单位总价 + 1).Text = totel
|
||
Continue For
|
||
End If
|
||
|
||
tmpGrid.Cell(i, DestBomGridCols.序号 + 1).Text = i - 1
|
||
tmpGrid.Cell(i, DestBomGridCols.工艺流程 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.工艺流程).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.料号PN + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.料号PN).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.物料名称 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.物料名称).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.规格描述 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.规格描述).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.单位 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.单位).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.用量 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.用量).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.使用位置 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.使用位置).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.单价 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.单价).Text
|
||
tmpGrid.Cell(i, DestBomGridCols.单位总价 + 1).Text = GrdSourceBom.Cell(i - 1, SourceGridCols.用量).IntegerValue * GrdSourceBom.Cell(i - 1, SourceGridCols.单价).DoubleValue
|
||
Next
|
||
|
||
Try
|
||
tmpGrid.ExportToExcel(fileDialog.FileName)
|
||
MsgBox($"导出BOM至{fileDialog.FileName}完成!")
|
||
Catch ex As Exception
|
||
MsgBox($"导出BOM至{fileDialog.FileName}失败,{ex.Message}")
|
||
End Try
|
||
|
||
End Using
|
||
End Sub
|
||
|
||
Private Function GetPartFootPrintNum(footPrint As String) As String
|
||
Dim result As New StringBuilder
|
||
Dim findPoint As Boolean = False
|
||
Dim findNum As Boolean = False
|
||
|
||
If footPrint.Length = 0 Then Return footPrint
|
||
For i = footPrint.Length - 1 To 0 Step -1
|
||
Select Case footPrint(i)
|
||
Case "0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c
|
||
If findNum = False Then findNum = True
|
||
result.Insert(0, footPrint(i))
|
||
Case "."c
|
||
If findNum = False Then Continue For '未查找到数字则忽略小数点
|
||
If findPoint Then Exit For '已添加小数点则退出搜索
|
||
If findPoint = False Then findPoint = True '变更状态为已添加小数点
|
||
result.Insert(0, footPrint(i))
|
||
Case Else
|
||
If findNum = False Then Continue For '未查找到数字则继续寻找数字
|
||
Exit For '已找到数字则退出搜索
|
||
End Select
|
||
Next
|
||
|
||
If findNum = False Then Return footPrint '未查找到数字则返回原字符串
|
||
|
||
If result(0) = "."c Then result.Remove(0, 1) '小数点开头则移除小数点
|
||
|
||
Return result.ToString
|
||
End Function
|
||
|
||
|
||
Private Function GetPartFootComment(footPrint As String) As String
|
||
If footPrint.Length = 0 Then Return footPrint
|
||
|
||
Select Case footPrint(footPrint.Length - 1)
|
||
Case "R"c
|
||
footPrint &= $",{footPrint.Replace("R"c, "Ω"c)}"
|
||
Case "Ω"c
|
||
footPrint &= $",{footPrint.Replace("Ω"c, "R"c)}"
|
||
End Select
|
||
|
||
Return footPrint
|
||
End Function
|
||
|
||
|
||
Private Sub QueuePart(partDesc As String)
|
||
' If String.IsNullOrWhiteSpace(partDesc) Then Return
|
||
|
||
If partDesc.EndsWith(",") Then
|
||
partDesc = partDesc.Remove(partDesc.Length - 1)
|
||
End If
|
||
|
||
QueryData_Quick(tb_PartNumber.Text, tb_Name.Text, partDesc, ckb_Pn_Inhaos.Checked, ckb_PnJohao.Checked)
|
||
|
||
'初始化表格
|
||
GrdQueueResult.DisplayRowNumber = True
|
||
GrdQueueResult.AllowUserSort = True
|
||
GrdQueueResult.DisplayFocusRect = False
|
||
GrdQueueResult.ExtendLastCol = True
|
||
GrdQueueResult.DisplayRowArrow = True
|
||
GrdQueueResult.BoldFixedCell = False
|
||
GrdQueueResult.SortIndicatorStyle = FlexCell.SortIndicatorStyleEnum.Light3D
|
||
|
||
'将查询结果与表格绑定
|
||
GrdQueueResult.SetDataBinding(m_Table, "", True, 1)
|
||
|
||
GrdQueueResult.Column(QueueGridCols.规格描述).Width = 360
|
||
End Sub
|
||
|
||
Private Sub 查询ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 查询ToolStripMenuItem.Click
|
||
If GrdSourceBom.ActiveCell Is Nothing Then Return
|
||
Dim row As Integer = GrdSourceBom.ActiveCell.Row
|
||
|
||
If Not m_Table Is Nothing Then
|
||
m_Table.Dispose()
|
||
End If
|
||
m_Table = New DataTable
|
||
|
||
'从数据库查询指定内容的物料信息
|
||
Dim partComment As String = $"{GrdSourceBom.Cell(row, SourceGridCols.注释).Text.Trim}"
|
||
|
||
Dim partFootPrint As String = $"{GrdSourceBom.Cell(row, SourceGridCols.型号).Text}"
|
||
partFootPrint = GetPartFootPrintNum(partFootPrint)
|
||
|
||
Dim partDesc As String = partComment
|
||
|
||
If ChkHasPartType.Checked Then
|
||
If partDesc.Length = 0 Then
|
||
partDesc = partFootPrint
|
||
Else
|
||
If partFootPrint.Length > 0 Then partDesc &= $",{partFootPrint}"
|
||
End If
|
||
End If
|
||
|
||
tb_Desc.Text = partDesc
|
||
|
||
QueuePart(partDesc)
|
||
End Sub
|
||
|
||
Private Sub GrdSourceBom_DoubleClick(Sender As Object, e As EventArgs) Handles GrdSourceBom.DoubleClick
|
||
If GrdSourceBom.ActiveCell Is Nothing Then Return
|
||
Dim row As Integer = GrdSourceBom.ActiveCell.Row
|
||
|
||
If Not m_Table Is Nothing Then
|
||
m_Table.Dispose()
|
||
End If
|
||
m_Table = New DataTable
|
||
|
||
'从数据库查询指定内容的物料信息
|
||
Dim partComment As String = $"{GrdSourceBom.Cell(row, SourceGridCols.注释).Text.Trim.Replace(" "c, ","c).Replace("\", ",").Replace("/", ",")}"
|
||
|
||
Dim partFootPrint As String = $"{GrdSourceBom.Cell(row, SourceGridCols.型号).Text}"
|
||
partFootPrint = GetPartFootPrintNum(partFootPrint)
|
||
|
||
Dim partDesc As String = partComment
|
||
|
||
If ChkHasPartType.Checked Then
|
||
If partDesc.Length = 0 Then
|
||
partDesc = partFootPrint
|
||
Else
|
||
If partFootPrint.Length > 0 Then partDesc &= $",{partFootPrint}"
|
||
End If
|
||
End If
|
||
|
||
tb_Desc.Text = partDesc
|
||
|
||
QueuePart(partDesc)
|
||
End Sub
|
||
|
||
Private Sub bt_QueryQuick_Click(sender As Object, e As EventArgs) Handles bt_QueryQuick.Click
|
||
QueuePart(tb_Desc.Text)
|
||
End Sub
|
||
|
||
Private Sub GrdQueueResult_DoubleClick(Sender As Object, e As EventArgs) Handles GrdQueueResult.DoubleClick
|
||
If GrdSourceBom.ActiveCell Is Nothing Then Return
|
||
|
||
If GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.校验).BooleanValue Then Return
|
||
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.校验).Text = ""
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.工艺流程).Text = ""
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.料号PN).Text = GrdQueueResult.Cell(GrdQueueResult.ActiveCell.Row, QueueGridCols.料号PN).Text
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.物料名称).Text = GrdQueueResult.Cell(GrdQueueResult.ActiveCell.Row, QueueGridCols.物料名称).Text
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.规格描述).Text = GrdQueueResult.Cell(GrdQueueResult.ActiveCell.Row, QueueGridCols.规格描述).Text
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.单位).Text = GrdQueueResult.Cell(GrdQueueResult.ActiveCell.Row, QueueGridCols.单位).Text
|
||
GrdSourceBom.Cell(GrdSourceBom.ActiveCell.Row, SourceGridCols.单价).Text = GrdQueueResult.Cell(GrdQueueResult.ActiveCell.Row, QueueGridCols.单重).Text
|
||
End Sub
|
||
|
||
Private Sub GrdSourceBom_CellChange(Sender As Object, e As FlexCell.Grid.CellChangeEventArgs) Handles GrdSourceBom.CellChange
|
||
If e.Col = SourceGridCols.校验 Then
|
||
If GrdSourceBom.Cell(e.Row, e.Col).BooleanValue = True Then
|
||
GrdSourceBom.Range(e.Row, 1, e.Row, GrdSourceBom.Cols - 1).BackColor = Color.LightGreen
|
||
|
||
GrdSourceBom.Range(e.Row, 1, e.Row, SourceGridCols.校验 - 1).Locked = True
|
||
GrdSourceBom.Range(e.Row, SourceGridCols.校验 + 1, e.Row, GrdSourceBom.Cols - 1).Locked = True
|
||
Else
|
||
GrdSourceBom.Range(e.Row, 1, e.Row, GrdSourceBom.Cols - 1).BackColor = GrdSourceBom.BackColor1
|
||
GrdSourceBom.Cell(e.Row, e.Col).BackColor = Color.LightBlue
|
||
|
||
GrdSourceBom.Range(e.Row, 1, e.Row, SourceGridCols.校验 - 1).Locked = False
|
||
GrdSourceBom.Range(e.Row, SourceGridCols.校验 + 1, e.Row, GrdSourceBom.Cols - 1).Locked = False
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub 保存至数据库ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 保存至数据库ToolStripMenuItem.Click
|
||
If tbBomPN.Text.Length = 0 Then
|
||
MsgBox("未指定当前BOM料号!")
|
||
Return
|
||
End If
|
||
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(m_CurrentBomPN, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return
|
||
End If
|
||
|
||
'检测内容中的PN字段有效性
|
||
If CheckPNValid() = False Then
|
||
MsgBox("输入信息存在错误,不能进行保存!")
|
||
Return
|
||
End If
|
||
|
||
'创建料号表
|
||
If SaveBomContext(tbBomPN.Text) = False Then
|
||
MsgBox("保存料表失败")
|
||
Return
|
||
End If
|
||
|
||
'保存临时表内容至XMl文件
|
||
Try
|
||
Dim dirPath As String = Application.StartupPath & "\" & "Context"
|
||
IO.Directory.CreateDirectory(dirPath)
|
||
GrdSourceBom.ExportToXML($"{dirPath}\{m_CurrentBomPN}_context_{Now:yyyyMMdd_HHmmss}.xml")
|
||
Catch ex As Exception
|
||
|
||
End Try
|
||
|
||
MsgBox("保存料表:" & tbBomPN.Text & "成功")
|
||
End Sub
|
||
|
||
Private Sub 保存至数据库BOM表ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 保存至数据库BOM表ToolStripMenuItem.Click
|
||
If tbBomPN.Text.Length = 0 Then
|
||
MsgBox("未指定当前BOM料号!")
|
||
Return
|
||
End If
|
||
|
||
'检查输入料号是否有效
|
||
Dim isExist As Boolean = False
|
||
If m_PartNumber.CheckPartNumber(m_CurrentBomPN, isExist) = ERROR_CODE.SUCCESS Then
|
||
If isExist = False Then
|
||
MsgBox("输入料号不存在!")
|
||
Return
|
||
End If
|
||
Else
|
||
MsgBox("无法查询输入料号,请检查网络连接!")
|
||
Return
|
||
End If
|
||
|
||
'检测内容中的PN字段有效性
|
||
If CheckPNValid() = False Then
|
||
MsgBox("输入信息存在错误,不能进行保存!")
|
||
Return
|
||
End If
|
||
|
||
'创建料号表
|
||
If SaveBom2(tbBomPN.Text) = False Then
|
||
MsgBox("保存料表失败")
|
||
Return
|
||
End If
|
||
|
||
MsgBox("保存料表:" & tbBomPN.Text & "成功")
|
||
End Sub
|
||
|
||
Private Sub 更新当前物料ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 更新当前物料ToolStripMenuItem.Click
|
||
If GrdSourceBom.ActiveCell Is Nothing Then Return
|
||
|
||
Dim row As Integer = GrdSourceBom.ActiveCell.Row
|
||
If row = 0 Then Return
|
||
|
||
Dim pn As String
|
||
'清空内容
|
||
GrdSourceBom.Cell(row, SourceGridCols.物料名称).Text = ""
|
||
GrdSourceBom.Cell(row, SourceGridCols.规格描述).Text = ""
|
||
GrdSourceBom.Cell(row, SourceGridCols.单位).Text = ""
|
||
GrdSourceBom.Cell(row, SourceGridCols.单价).Text = ""
|
||
|
||
'查询指定pn的信息
|
||
pn = GrdSourceBom.Cell(row, SourceGridCols.料号PN).Text
|
||
If String.IsNullOrEmpty(pn) Then Return
|
||
|
||
Dim pninfo As New PnInfo With {.PN = pn}
|
||
|
||
If GetPnInfoByName(pn, pninfo) Then
|
||
GrdSourceBom.Cell(row, SourceGridCols.物料名称).Text = pninfo.物料名称
|
||
GrdSourceBom.Cell(row, SourceGridCols.规格描述).Text = pninfo.规格描述
|
||
GrdSourceBom.Cell(row, SourceGridCols.单位).Text = pninfo.单位
|
||
GrdSourceBom.Cell(row, SourceGridCols.单价).Text = pninfo.单重
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub 更新物料信息ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 更新物料信息ToolStripMenuItem.Click
|
||
GetAllPnInfo()
|
||
End Sub
|
||
|
||
Private Sub GetAllPnInfo()
|
||
Dim pn As String
|
||
For row = 1 To GrdSourceBom.Rows - 1
|
||
'注释为空后面则认为为无效行
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(row, SourceGridCols.注释).Text) Then
|
||
If String.IsNullOrEmpty(GrdSourceBom.Cell(row, SourceGridCols.料号PN).Text) Then
|
||
Continue For
|
||
End If
|
||
End If
|
||
|
||
'清空内容
|
||
GrdSourceBom.Cell(row, SourceGridCols.物料名称).Text = ""
|
||
GrdSourceBom.Cell(row, SourceGridCols.规格描述).Text = ""
|
||
GrdSourceBom.Cell(row, SourceGridCols.单位).Text = ""
|
||
GrdSourceBom.Cell(row, SourceGridCols.单价).Text = ""
|
||
|
||
'查询指定pn的信息
|
||
pn = GrdSourceBom.Cell(row, SourceGridCols.料号PN).Text
|
||
If String.IsNullOrEmpty(pn) Then Continue For
|
||
|
||
Dim pninfo As New PnInfo With {.PN = pn}
|
||
|
||
If GetPnInfoByName(pn, pninfo) Then
|
||
GrdSourceBom.Cell(row, SourceGridCols.物料名称).Text = pninfo.物料名称
|
||
GrdSourceBom.Cell(row, SourceGridCols.规格描述).Text = pninfo.规格描述
|
||
GrdSourceBom.Cell(row, SourceGridCols.单位).Text = pninfo.单位
|
||
GrdSourceBom.Cell(row, SourceGridCols.单价).Text = pninfo.单重
|
||
End If
|
||
Next
|
||
End Sub
|
||
|
||
|
||
Private Function GetPnInfoByName(pn As String, ByRef pnInfo As PnInfo) As Boolean
|
||
Return m_PartNumber.QueryItem(pn, pnInfo.物料名称, pnInfo.规格描述, pnInfo.单位, pnInfo.单重, pnInfo.供应商ID) = ERROR_CODE.SUCCESS
|
||
End Function
|
||
|
||
Public Class PnInfo
|
||
Public PN As String = ""
|
||
|
||
Public 物料名称 As String = ""
|
||
Public 规格描述 As String = ""
|
||
Public 单位 As String = ""
|
||
Public 单重 As Double = 0
|
||
Public 图片(0) As Byte
|
||
Public 供应商ID As String = ""
|
||
End Class
|
||
|
||
Private Sub 插入行ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 插入行ToolStripMenuItem.Click
|
||
If GrdSourceBom.Selection Is Nothing Then
|
||
GrdSourceBom.AddItem("")
|
||
Else
|
||
GrdSourceBom.InsertRow(GrdSourceBom.Selection.FirstRow, 1)
|
||
End If
|
||
|
||
End Sub
|
||
|
||
Private Sub 删除行ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 删除行ToolStripMenuItem.Click
|
||
If MsgBox("是否删除选中行?", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return
|
||
If GrdSourceBom.Selection IsNot Nothing Then
|
||
GrdSourceBom.Selection.DeleteByRow()
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub 清空表格ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 清空表格ToolStripMenuItem.Click
|
||
If MsgBox("是否清空表格?", MsgBoxStyle.OkCancel) <> MsgBoxResult.Ok Then Return
|
||
|
||
InitSourceGrid()
|
||
End Sub
|
||
|
||
Private Sub 合并相同料号ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 合并相同料号ToolStripMenuItem.Click
|
||
Dim snList As New Dictionary(Of String, Integer)
|
||
Dim deleteRows As New List(Of Integer)
|
||
' 查询所有料号
|
||
Dim pn As String
|
||
For row = 1 To GrdSourceBom.Rows - 1
|
||
pn = GrdSourceBom.Cell(row, SourceGridCols.料号PN).Text
|
||
If String.IsNullOrEmpty(pn) Then Continue For
|
||
|
||
If snList.ContainsKey(pn) Then
|
||
deleteRows.Add(row)
|
||
|
||
GrdSourceBom.Cell(snList(pn), SourceGridCols.用量).Text = GrdSourceBom.Cell(snList(pn), SourceGridCols.用量).IntegerValue + GrdSourceBom.Cell(row, SourceGridCols.用量).IntegerValue
|
||
|
||
|
||
GrdSourceBom.Cell(snList(pn), SourceGridCols.使用位置).Text = GrdSourceBom.Cell(snList(pn), SourceGridCols.使用位置).Text & "," & GrdSourceBom.Cell(row, SourceGridCols.使用位置).Text
|
||
Else
|
||
snList.Add(pn, row)
|
||
End If
|
||
Next
|
||
|
||
For row = 0 To deleteRows.Count - 1
|
||
GrdSourceBom.Row(deleteRows(row) - row).Delete()
|
||
Next
|
||
End Sub
|
||
|
||
End Class |