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

📄 ps_bomsingleform.frm

📁 即时通讯
💻 FRM
📖 第 1 页 / 共 5 页
字号:
    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 + -