📄 ps_bomsingleform.frm
字号:
Dim bomdetailId As String ' BOM明细ID
Dim skey As String
Dim text As String
Dim iIndex As Integer
Dim oNodex As Node
ret = Check(1, line)
If ret = False Then
Exit Sub
End If
' 对BOM表进行操作
If Trim(HFG_detail.TextMatrix(line, 7)) = "" Then ' 如果要新增BOM记录
' 找到BOM表中产品的BOM记录
ret = m_productionBomDAO.FindByMaterial(m_recordset, Trim(HFG_detail.TextMatrix(line, 10)), 1)
' 根据物料BOMID新建生产BOM及其子BOM
id = CreatPsBomByBomId(Trim(m_recordset.Fields("bomId")))
m_recordset.Close
HFG_detail.TextMatrix(line, 7) = id
Else ' 修改BOM记录
id = Trim(HFG_detail.TextMatrix(line, 7))
ret = m_bomDAO.ModifyBom(m_recordset, _
Trim(HFG_detail.TextMatrix(line, 1)), _
Trim(HFG_detail.TextMatrix(line, 6)), _
CDbl(HFG_detail.TextMatrix(line, 3)), _
Trim(HFG_detail.TextMatrix(line, 2)), _
CDbl(HFG_detail.TextMatrix(line, 4)), _
Trim(HFG_detail.TextMatrix(line, 10)), _
Trim(HFG_detail.TextMatrix(line, 9)), _
id)
End If
' 对BOM明细表进行操作
If Trim(HFG_detail.TextMatrix(line, 8)) = "" Then ' 新增BOM明细
bomdetailId = m_bomDAO.NewBomDetail(m_recordset, _
m_parentBom.bomId, _
Trim(HFG_detail.TextMatrix(line, 7)), _
CInt(HFG_detail.TextMatrix(line, 5)))
HFG_detail.TextMatrix(line, 8) = bomdetailId
Else ' 修改BOM明细
ret = m_bomDAO.ModifyBomDetail(m_recordset, _
m_parentBom.bomId, _
Trim(HFG_detail.TextMatrix(line, 7)), _
CInt(HFG_detail.TextMatrix(line, 5)), _
Trim(HFG_detail.TextMatrix(line, 8)))
End If
' 把本行数据加入树中
iIndex = TV_bomManage.SelectedItem.Index
skey = GetNextKey()
text = Trim(HFG_detail.TextMatrix(line, 1)) + "(" + Trim(HFG_detail.TextMatrix(line, 5)) + ")"
On Error GoTo NODEEXIST
Set oNodex = TV_bomManage.Nodes.Add(iIndex, tvwChild, skey, text, 1, 2)
oNodex.EnsureVisible
oNodex.Tag = id
ReadChildrenNodes oNodex.Tag, oNodex ' 把此BOM的各子BOM读入树中
Exit Sub
NODEEXIST:
End Sub
'**************************************
'* 功 能 描 述 :从数据库中读取BOM的各级子BOM放在树上
'* 输 入 参 数 :无
'* 输 出 能 数 :无
'**************************************
Private Sub ReadChildrenNodes(bomId As String, parentNode As Node)
Dim ret As Boolean
Dim rec As ADODB.Recordset ' 数据操作数据集对象
Dim skey As String
Dim text As String
Dim iIndex As Integer
Dim oNodex As Node
Set rec = New ADODB.Recordset
ret = m_bomDAO.FindDetailBom(rec, bomId) ' 到数据库查找其所有子BOM列表
If ret Then ' 如果找到明细则增加到树中
With rec
Do While Not .EOF
'[>>自定义填充内容
' 把本行数据加入树中
iIndex = parentNode.Index
skey = GetNextKey()
text = Trim(.Fields("name")) + "(" + Trim(.Fields("quantity")) + ")"
Set oNodex = TV_bomManage.Nodes.Add(iIndex, tvwChild, skey, text, 1, 2)
oNodex.EnsureVisible
oNodex.Tag = Trim(.Fields("bomId"))
ReadChildrenNodes oNodex.Tag, oNodex
'<<]
'动态集指针加1,同时将计数器加1(Fixed)
.MoveNext
Loop
End With
End If
rec.Close
' Unload rec
End Sub
'**************************************
'* 功 能 描 述 :清除当前选中节点交节点的所有子节点
'* 输 入 参 数 :无
'* 输 出 能 数 :无
'**************************************
Private Sub ClearSubTree()
Dim s As String
Dim hasChild As Boolean
Dim iIndex As Integer
If m_currentLevel = 1 Then ' 当前编辑根结点,清除树中所有的节点
TV_bomManage.Nodes.clear
Else ' 非根结点,清除当前选中节点交节点的所有子节点
' s = TV_bomManage.SelectedItem.Child.FirstSibling.Key
hasChild = True
On Error GoTo EXITSUB
Do While hasChild
iIndex = m_parentNode.Child.Index
TV_bomManage.Nodes.Remove iIndex
Loop
End If
Exit Sub
EXITSUB:
hasChild = False
Exit Sub
End Sub
'**************************************
'* 功 能 描 述 :清除当前子BOM列表中的所有行
'* 输 入 参 数 :无
'* 输 出 能 数 :无
'**************************************
Private Sub ClearAllLine()
HFG_detail.clear
RefreshListTitle
End Sub
'**************************************
'* 功 能 描 述 :清除当前所有文本框
'* 输 入 参 数 :无
'* 输 出 能 数 :无
'**************************************
Private Sub ClearAllText()
T_name.text = ""
T_ProcessName.text = ""
T_fee.text = ""
T_bomCost.text = ""
T_number.text = ""
T_memo.text = ""
End Sub
'**************************************
'* 功 能 描 述 :在Bom树中新增根结点
'* 输 入 参 数 :无
'* 输 出 能 数 :无
'**************************************
Private Sub CreateLastNode()
Dim skey As String
skey = GetNextKey()
TV_bomManage.Nodes.Add , tvwLast, skey, "Last " & skey, 1, 2
Exit Sub
End Sub
'**************************************
'* 功 能 描 述 :检验数据的合法情
'* 输 入 参 数 :checkType - 0 对根结点进行测试
'* - 1 对列表进行测试
'* line - n 对列表中的第N行进行测试
'* 输 出 能 数 :无
'**************************************
Private Function Check(checkType As Integer, line As Integer) As Boolean
Check = True
If m_currentLevel = 1 Then ' 对根结点进行测试
If Trim(HFG_detail.TextMatrix(line, 7)) = "" Then
Check = False
End If
Else ' 对列表进行测试
If Trim(HFG_detail.TextMatrix(line, 5)) = "" Then
Check = False
End If
End If
If Not Check Then
MainForm.g_msgText = "数据有错,请重输!"
HMsgBox MainForm.g_msgText, hxxdOKOnly, hxxdError
End If
End Function
Private Function GetNextKey() As String
'Returns a new key value for each Node being added to the TreeView
'This algorithm is very simple and will limit you to adding a total of 999 nodes
'Each node needs a unique key. If you allow users to remove Nodes you can't use
'the Nodes count +1 as the key for a new node.
Dim sNewKey As String
Dim iHold As Integer
Dim i As Integer
On Error GoTo myerr
'The next line will return error #35600 if there are no Nodes in the TreeView
iHold = Val(TV_bomManage.Nodes(1).Key)
For i = 1 To TV_bomManage.Nodes.Count
If Val(TV_bomManage.Nodes(i).Key) > iHold Then
iHold = Val(TV_bomManage.Nodes(i).Key)
End If
Next
iHold = iHold + 1
sNewKey = CStr(iHold) & "_"
GetNextKey = sNewKey 'Return a unique key
Exit Function
myerr:
'Because the TreeView is empty return a 1 for the key of the first Node
GetNextKey = "1_"
Exit Function
End Function
'**************************************
'* 功 能 描 述 :用户选中一个节点后的处理
'* 输 入 参 数 :
'* 输 出 能 数 :无
'**************************************
Private Sub TV_bomManage_NodeClick(ByVal Node As MSComctlLib.Node)
Dim ret As Boolean
Dim currentrow As Integer
Dim Index As Integer
m_currentLevel = JudgeLevel()
Text1.text = "" ' 清空供应商框
' 读出选中的父节结点信息,并把其信息存放入m_parentBom中
If m_currentLevel > 1 Then
Set m_parentNode = Node.Parent
ret = m_bomDAO.FindById(m_recordset, Trim(Node.Parent.Tag)) '' 修改
Else ' 对根结点进行操作
m_modiFirstNode_Click
Exit Sub
End If
If ret Then
With m_recordset
'[>>自定义填充内容
' 把找到的BOM存入当前列表的父节点中
m_parentBom.bomCost = Trim(.Fields("bomCost"))
m_parentBom.bomId = Trim(.Fields("bomId"))
m_parentBom.description = Trim(.Fields("description"))
m_parentBom.fee = Trim(.Fields("fee"))
m_parentBom.materialId = Trim(.Fields("materialId"))
m_parentBom.materialType = Trim(.Fields("materialType"))
m_parentBom.name = Trim(.Fields("name"))
m_parentBom.processName = Trim(.Fields("processName"))
m_parentBom.relatePartId = Trim(.Fields("relatePartId") & " ")
'<<]
End With
m_recordset.Close
End If
' 读出选中节点的信息,并显示在列表中
ret = m_bomDAO.FindDetailBom(m_recordset, Trim(Node.Parent.Tag))
HFG_detail.clear
HFG_detail.Rows = 2
RefreshListTitle
If ret Then
With m_recordset
' HFG_detail.Rows = m_recordset.RecordCount
currentrow = 1
Do While Not .EOF
If currentrow > HFG_detail.Rows - 1 Then
HFG_detail.AddItem ""
End If
'[>>自定义填充内容
HFG_detail.TextMatrix(currentrow, 0) = "Y"
HFG_detail.TextMatrix(currentrow, 1) = Trim(.Fields("name"))
HFG_detail.TextMatrix(currentrow, 2) = Trim(.Fields("processName"))
HFG_detail.TextMatrix(currentrow, 3) = Trim(.Fields("fee"))
HFG_detail.TextMatrix(currentrow, 4) = Trim(.Fields("bomCost"))
HFG_detail.TextMatrix(currentrow, 5) = Trim(.Fields("quantity")) ' 明细的数量
HFG_detail.TextMatrix(currentrow, 6) = Trim(.Fields("description"))
HFG_detail.TextMatrix(currentrow, 7) = Trim(.Fields("bomId")) ' 当为空时为新增BOM表,不空为修改
HFG_detail.TextMatrix(currentrow, 8) = Trim(.Fields("bomDetailId")) ' 当为空时 - 新增明细(非根结点情况) 当不空时 - 修改明细(数量)
HFG_detail.TextMatrix(currentrow, 9) = Trim(.Fields("materialType")) ' 0-原料 1-零件 2-产品
HFG_detail.TextMatrix(currentrow, 10) = Trim(.Fields("materialId")) ' 物料ID
HFG_detail.TextMatrix(currentrow, 11) = Trim(.Fields("relatePartId") & " ") ' 相关零件ID
'<<]
'设置数据行高度(Fixed)
HFG_detail.RowHeight(currentrow) = 300
If Trim(.Fields("bomId")) = Trim(Node.Tag) Then ' 要选中此行记录
HFG_detail.row = currentrow
HFG_detail.RowSel = currentrow
GetMaterialFirstSupplier Trim(.Fields("materialId"))
End If
'动态集指针加1,同时将计数器加1(Fixed)
.MoveNext
currentrow = currentrow + 1
Loop
End With
ListToTextbox
End If
ListToTextbox
m_recordset.Close
On Error GoTo CONTINUE:
Index = TV_bomManage.SelectedItem.Child.Index
' m_newChild.Visible = False
Exit Sub
CONTINUE:
' m_newChild.Visible = True
''''''''''''''''''''''''''''''''''''''''''''''''
' Dim ret As Boolean
' Dim currentrow As Integer
'
' ' 读出选中的结点信息,并把其信息存放入m_parentBom中
' ret = m_bomDAO.FindById(m_recordset, Trim(Node.Tag))
' If ret Then
' With m_recordset
' '[>>自定义填充内容
' ' 把找到的BOM存入当前列表的父节点中
' m_parentBom.bomCost = Trim(.Fields("bomCost"))
' m_parentBom.bomId = Trim(.Fields("bomId"))
' m_parentBom.description = Trim(.Fields("description"))
' m_parentBom.fee = Trim(.Fields("fee"))
' m_parentBom.materialId = Trim(.Fields("materialId"))
' m_parentBom.materialType = Trim(.Fields("materialType"))
' m_parentBom.name = Trim(.Fields("name"))
' m_parentBom.processName = Trim(.Fields("processName"))
' '<<]
' End With
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -