⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bomsinglemform2.frm

📁 即时通讯
💻 FRM
📖 第 1 页 / 共 4 页
字号:
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
'**************************************
'*    功 能 描 述 :计算BOM表中各BOM及子BOM的成本,并修改其成本
'*    输 入 参 数 :bomId - 要计算成本的BOM的ID
'*    输 出 能 数 :无
'**************************************
Private Sub CalBomCost(bomId As String)
    Dim ret As Boolean
    Dim rec As ADODB.Recordset     ' 数据操作数据集对象
    Dim cost As Double
    Dim detailNum As Integer       ' 一个明细的数量
    Dim detailCost As Double       ' 一个明细的成本
    Dim detailFee As Double        ' 一个明细的加工费
    
    Set rec = New ADODB.Recordset
    
    ret = m_bomDAO.FindDetailBom(rec, bomId)   ' 到数据库查找其所有子BOM列表
    
    If ret Then                 ' 如果找到明细则增加到树中
        cost = 0                ' 成本设置成 0
        With rec
            Do While Not .EOF
                
                '[>>自定义填充内容
                ' 把本行数据加入树中
                CalBomCost Trim(.Fields("bomId"))
                
                detailNum = CInt(.Fields("quantity"))
                detailCost = CDbl(.Fields("bomCost"))
                detailFee = CDbl(.Fields("fee"))
                
                cost = cost + detailNum * (detailCost + detailFee)

                '<<]
         
                '动态集指针加1,同时将计数器加1(Fixed)
                .MoveNext
            Loop
        End With
        ' 修改本条BOM表的成本
        m_bomDAO.ModifyBomCost m_recordset, cost, bomId
        
    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 = 0 Then      ' 当前编辑根结点,清除树中所有的节点
        TV_bomManage.Nodes.clear
    Else                            ' 非根结点,清除当前选中节点的所有子节点
'        s = TV_bomManage.SelectedItem.Child.FirstSibling.Key
        hasChild = True
        On Error GoTo EXITSUB
        Do While hasChild
            iIndex = TV_bomManage.SelectedItem.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 checkType = 0 Then              ' 对根结点进行测试
        If Trim(HFG_detail.TextMatrix(line, 2)) = "" Then
            Check = False
        End If
            If Trim(HFG_detail.TextMatrix(line, 3)) = "" Then
            Check = False
        End If
            If Trim(HFG_detail.TextMatrix(line, 4)) = "" Then
            Check = False
        End If
        If Trim(HFG_detail.TextMatrix(line, 10)) = "" Then
            Check = False
        End If
    Else                               ' 对列表进行测试
        If Trim(HFG_detail.TextMatrix(line, 2)) = "" Then
            Check = False
        End If
            If Trim(HFG_detail.TextMatrix(line, 3)) = "" Then
            Check = False
        End If
            If Trim(HFG_detail.TextMatrix(line, 4)) = "" Then
            Check = False
        End If
        If Trim(HFG_detail.TextMatrix(line, 10)) = "" Then
            Check = False
        End If
        If Trim(HFG_detail.TextMatrix(line, 5)) = "" Then
            Check = False
        End If
    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
    
    m_currentLevel = JudgeLevel()
    
    ' 读出选中的结点信息,并把其信息存放入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
        
        m_recordset.Close
    End If
    
    ' 读出选中节点的所有子节点,并显示在列表中
    ret = m_bomDAO.FindDetailBom(m_recordset, Trim(Node.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"))
                '<<]
                '设置数据行高度(Fixed)
                HFG_detail.RowHeight(currentrow) = 200
         
                '动态集指针加1,同时将计数器加1(Fixed)
                .MoveNext
                currentrow = currentrow + 1
            Loop
        End With
        ListToTextbox
    End If
    ListToTextbox
    m_recordset.Close
End Sub
'**************************************
'*    功 能 描 述 :判断当前选中的节点是第几层
'*    输 入 参 数 :无
'*    输 出 能 数 :无
'**************************************
Private Function JudgeLevel() As Integer
    Dim level As Integer
    Dim temp As Node
    
    level = 1
    Set temp = TV_bomManage.SelectedItem
    Do While temp <> TV_bomManage.SelectedItem.Root
        Set temp = temp.Parent
        level = level + 1
    Loop
    
    JudgeLevel = level
End Function
'**************************************
'*    功 能 描 述 :复制一个BOM资料并反回新BOM 的ID
'*    输 入 参 数 :无
'*    输 出 能 数 :无
'**************************************
Private Function BomCopy(Source As String) As String
    Dim ret As Boolean
    Dim id As String       ' 新生成的BOM记录的ID
    
    id = m_bomDAO.NewBom(m_recordset, _
                     Trim(HFG_detail.TextMatrix(1, 1)), _
                     Trim(HFG_detail.TextMatrix(1, 6)), _
                     CDbl(HFG_detail.TextMatrix(1, 3)), _
                     Trim(HFG_detail.TextMatrix(1, 2)), _
                     CDbl(HFG_detail.TextMatrix(1, 4)), _
                     Trim(HFG_detail.TextMatrix(1, 10)), _
                     Trim(HFG_detail.TextMatrix(1, 9)))
                     
    HFG_detail.TextMatrix(HFG_detail.row, 7) = id
    
    ' 找到源BOM的所有子BOM
    ret = m_bomDAO.FindDetailBom(m_recordset, Source)
    If ret Then
        With m_recordset
            Do While Not .EOF
                '[>>自定义填充内容

                m_bomDAO.NewBomDetail m_recordset, _
                                            id, _
                                            Trim(.Fields("bomId")), _
                                            CInt(Trim(.Fields("quantity")))
                '<<]
                '动态集指针加1,同时将计数器加1(Fixed)
                .MoveNext
            Loop
        End With
    End If
    m_recordset.Close
    
    BomCopy = id
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -