📄 bomdao.cls
字号:
'**************************************
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 + -