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

📄 bomdao.cls

📁 即时通讯
💻 CLS
📖 第 1 页 / 共 2 页
字号:
'**************************************
Public Function ModifyBomDetail(recSet As ADODB.Recordset, _
                               parentBomId As String, bomId As String, _
                               quantity As Integer, bomdetailId As String) As Boolean
    
    Dim cmdProc As ADODB.Command          ' 执行存储过程的命令
    
    ModifyBomDetail = False
    Set cmdProc = New ADODB.Command
    Set cmdProc.ActiveConnection = MainForm.g_application.m_databaseCon.m_adoConnection
    
    ' 执行存储过程的命令的设置
    cmdProc.CommandText = "bomdetail_modify"          ' 指定存储过程的名子
    cmdProc.CommandType = adCmdStoredProc
    cmdProc.Parameters.Refresh
    cmdProc.Parameters(1) = parentBomId              ' 参数
    cmdProc.Parameters(2) = bomId                    ' 参数
    cmdProc.Parameters(3) = quantity                 ' 参数
    cmdProc.Parameters(4) = bomdetailId              ' 参数
    
    ' 执行命令 把查询到的结果放在recSet中
    MainForm.g_application.m_databaseCon.m_adoConnection.BeginTrans    ' 开始事务
    
    On Error GoTo Cwcl
    
    cmdProc.Execute
    ModifyBomDetail = True

    MainForm.g_application.m_databaseCon.m_adoConnection.CommitTrans   ' 结束事务
    Exit Function
    
Cwcl:
    MainForm.g_application.m_databaseCon.m_adoConnection.RollbackTrans   ' 回滚事务
    ModifyBomDetail = False
End Function
'**************************************
'*    功 能 描 述 :删除一条BOM明细列表中的记录
'*    输 入 参 数 :无
'*    输 出 能 数 :True           -  成功
'*                 False          -  失败
'**************************************
Public Function DeleteBomDetail(recSet As ADODB.Recordset, _
                                bomdetailId As String) As Boolean
    
    Dim cmdProc As ADODB.Command          ' 执行存储过程的命令
    
    DeleteBomDetail = False
    Set cmdProc = New ADODB.Command
    Set cmdProc.ActiveConnection = MainForm.g_application.m_databaseCon.m_adoConnection
    
    ' 执行存储过程的命令的设置
    cmdProc.CommandText = "bomdetail_delete"          ' 指定存储过程的名子
    cmdProc.CommandType = adCmdStoredProc
    cmdProc.Parameters.Refresh
    cmdProc.Parameters(1) = bomdetailId              ' 参数
    
    ' 执行命令 把查询到的结果放在recSet中
    MainForm.g_application.m_databaseCon.m_adoConnection.BeginTrans    ' 开始事务
    
    On Error GoTo Cwcl
    
    cmdProc.Execute
    DeleteBomDetail = True

    MainForm.g_application.m_databaseCon.m_adoConnection.CommitTrans   ' 结束事务
    Exit Function
    
Cwcl:
    MainForm.g_application.m_databaseCon.m_adoConnection.RollbackTrans   ' 回滚事务
    DeleteBomDetail = False
End Function
'**************************************
'*    功 能 描 述 :删除一条BOM的所有明细记录
'*    输 入 参 数 :无
'*    输 出 能 数 :True           -  成功
'*                 False          -  失败
'**************************************
Public Function DeleteBomDetailByParentId(recSet As ADODB.Recordset, _
                                bomId As String) As Boolean
    
    Dim cmdProc As ADODB.Command          ' 执行存储过程的命令
    
    DeleteBomDetailByParentId = False
    Set cmdProc = New ADODB.Command
    Set cmdProc.ActiveConnection = MainForm.g_application.m_databaseCon.m_adoConnection
    
    ' 执行存储过程的命令的设置
    cmdProc.CommandText = "bomdetail_deleteByParentBomId"          ' 指定存储过程的名子
    cmdProc.CommandType = adCmdStoredProc
    cmdProc.Parameters.Refresh
    cmdProc.Parameters(1) = bomId              ' 参数
    
    ' 执行命令 把查询到的结果放在recSet中
    MainForm.g_application.m_databaseCon.m_adoConnection.BeginTrans    ' 开始事务
    
    On Error GoTo Cwcl
    
    cmdProc.Execute
    DeleteBomDetailByParentId = True

    MainForm.g_application.m_databaseCon.m_adoConnection.CommitTrans   ' 结束事务
    Exit Function
    
Cwcl:
    MainForm.g_application.m_databaseCon.m_adoConnection.RollbackTrans   ' 回滚事务
    DeleteBomDetailByParentId = False
End Function
'**************************************
'*    功 能 描 述 :删除一条BOM记录
'*    输 入 参 数 :无
'*    输 出 能 数 :True           -  成功
'*                 False          -  失败
'**************************************
Public Function DeleteBom(recSet As ADODB.Recordset, _
                                bomId As String) As Boolean
    
    Dim cmdProc As ADODB.Command          ' 执行存储过程的命令
    
    DeleteBom = False
    Set cmdProc = New ADODB.Command
    Set cmdProc.ActiveConnection = MainForm.g_application.m_databaseCon.m_adoConnection
    
    ' 执行存储过程的命令的设置
    cmdProc.CommandText = "bom_delete"          ' 指定存储过程的名子
    cmdProc.CommandType = adCmdStoredProc
    cmdProc.Parameters.Refresh
    cmdProc.Parameters(1) = bomId              ' 参数
    
    ' 执行命令 把查询到的结果放在recSet中
    MainForm.g_application.m_databaseCon.m_adoConnection.BeginTrans    ' 开始事务
    
    On Error GoTo Cwcl
    
    cmdProc.Execute
    DeleteBom = True

    MainForm.g_application.m_databaseCon.m_adoConnection.CommitTrans   ' 结束事务
    Exit Function
    
Cwcl:
    MainForm.g_application.m_databaseCon.m_adoConnection.RollbackTrans   ' 回滚事务
    DeleteBom = False
End Function
'**************************************
'*    功 能 描 述 :根据BOM ID找到BOM明细记录
'*    输 入 参 数 :无
'*    输 出 能 数 :True           -  成功
'*                 False          -  失败
'**************************************
Public Function FindDetailBom(recSet As ADODB.Recordset, _
                              parenBomId As String) As Boolean
    Dim cmdProc As ADODB.Command          ' 执行存储过程的命令
    
    FindDetailBom = False
    Set cmdProc = New ADODB.Command
    Set cmdProc.ActiveConnection = MainForm.g_application.m_databaseCon.m_adoConnection
    
    ' 执行存储过程的命令的设置
    cmdProc.CommandText = "bom_findDetailBom"    ' 指定存储过程的名子
    cmdProc.CommandType = adCmdStoredProc
    cmdProc.Parameters.Refresh
    cmdProc.Parameters(1) = parenBomId            ' 参数
    
    On Error GoTo Cwcl
    
    ' 执行命令 把查询到的结果放在recSet中
    With recSet
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockOptimistic
        .Open cmdProc
    End With
    
    With recSet
        If Not .EOF Then
            FindDetailBom = True
        Else
            FindDetailBom = False
        End If
    End With
    
    Exit Function
    
Cwcl:
    FindDetailBom = False
    Exit Function
End Function
'**************************************
'*    功 能 描 述 :计算BOM表中各BOM及子BOM的成本,并修改其成本
'*    输 入 参 数 :bomId - 要计算成本的BOM的ID
'*    输 出 能 数 :无
'**************************************
Public Function CalBomCost(bomId As String) As Double
    Dim ret As Boolean
    Dim rec As ADODB.Recordset     ' 数据操作数据集对象
    Dim bomRec As ADODB.Recordset  ' 本BOM记录
    Dim cost As Double
    Dim detailNum As Integer       ' 一个明细的数量
    Dim detailCost As Double       ' 一个明细的成本
    Dim detailFee As Double        ' 一个明细的加工费
    
    Set rec = New ADODB.Recordset
    Set bomRec = New ADODB.Recordset
    
    ret = FindDetailBom(rec, bomId)   ' 到数据库查找其所有子BOM列表
    
    If ret Then                 ' 如果找到明细则增加到树中
        cost = 0                ' 成本设置成 0
        With rec
            Do While Not .EOF
                
                '[>>自定义填充内容
                ' 把本行数据加入树中
                detailCost = 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表的成本
        ModifyBomCost rec, cost, bomId
    Else     ' 如果没找到明细则返回原本的成本
        ret = FindById(bomRec, bomId)   ' 找到本物料BOM
        cost = CDbl(bomRec.Fields("bomCost"))
        bomRec.Close
    End If
    rec.Close
    Set rec = Nothing
    Set bomRec = Nothing
    CalBomCost = cost
End Function
'**************************************
'*    功 能 描 述 :检查一个BOM及其子BOM是不都有供货商
'*    输 入 参 数 :bomId - 要计算成本的BOM的ID
'*    输 出 能 数 :无
'**************************************
Public Function CheckBomSupplier(bomId As String) As Boolean
    Dim ret As Boolean
    Dim rec As ADODB.Recordset             ' 数据操作数据集对象
    Dim bomSupplierRec As ADODB.Recordset  ' bom的供货商记录
    Dim bomRec As ADODB.Recordset          ' 本bom记录
    Dim hasSupplier As Boolean             ' 返回值标志

    If Trim(bomId) = "" Then
        CheckBomSupplier = False
        Exit Function
    End If
    
    Set rec = New ADODB.Recordset
    Set bomSupplierRec = New ADODB.Recordset
    Set bomRec = New ADODB.Recordset
    
    hasSupplier = True
    
    ret = FindById(bomRec, bomId)   ' 找到本物料BOM
        If Trim(bomRec.Fields("materialType")) <> "2" Then    ' 如果本物料不是产品,则检验其是否有供货商
            hasSupplier = bsrDAO.FindBomSupplierByBomId(bomSupplierRec, bomId) ' 本BOM是否有供货商
            If Not hasSupplier Then
                CheckBomSupplier = False
                Exit Function
            End If
            bomSupplierRec.Close
        End If
    bomRec.Close
    
    ret = FindDetailBom(rec, bomId)   ' 到数据库查找其所有子BOM列表
    
    If ret Then                 ' 如果找到明细则增加到树中
        With rec
            Do While Not .EOF
                '[>>自定义填充内容
                If Not CheckBomSupplier(Trim(.Fields("bomId"))) Then
                    hasSupplier = False
                End If
                
                If Not hasSupplier Then
                    CheckBomSupplier = False
                    Exit Function
                End If
                '<<]
         
                '动态集指针加1,同时将计数器加1(Fixed)
                .MoveNext
            Loop
        End With
    End If
    
    CheckBomSupplier = hasSupplier
End Function
'**************************************
'*    功 能 描 述 :类初始化函数
'*    输 入 参 数 :初始化类成员变量
'*    输 出 能 数 :无
'**************************************
Private Sub Class_Initialize()
    Set bsrDAO = New BomSupplierRelationDAO
End Sub
'**************************************
'*    功 能 描 述 :根据物料的ID,查出此物料当前的BOM设置状态,
'*    输 入 参 数 :materialId - 物料的ID
'*    输 出 能 数 :0           -  还没有生成BOM记录
'*                 1           -  已生成BOM,但BOM的供应商还没有设置完成
'*                 2           -  已生成BOM,并且BOM的所有供应商都设置完成
'**************************************
Public Function GetMaterialBomStatus(materialId As String) As Integer
    Dim rec As New Recordset        ' 数据集
    Dim ret As Boolean
    Dim bomId As String             ' 找到的物料的BOM ID
    
    ' 如果此原料已有BOM记录,则调出些条BOM的信息
    ret = FindByMaterial(rec, materialId, "1")
    
    If ret Then                ' 找到了BOM记录
        bomId = Trim(rec.Fields("bomId"))        ' 当为空时为新增BOM表,不空为修改
        
        If CheckBomSupplier(bomId) Then
            GetMaterialBomStatus = 2             ' 物料及其所有子BOM都设置了供应商
        Else
            GetMaterialBomStatus = 1             ' 物料及其所有子BOM有没有设置供应商的
        End If
    Else
        GetMaterialBomStatus = 0                 ' 物料没有设置BOM
    End If
    
    rec.Close
    Set rec = Nothing
End Function

⌨️ 快捷键说明

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