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

📄 bos_wipebill_plugins.cls

📁 完成报销系统的业务流程;在报销系统中达到预算控制目的;将历史数据导入金蝶账套生成历史备查数据。
💻 CLS
📖 第 1 页 / 共 2 页
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "BOS_WipeBill_PlugIns"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Attribute VB_Description = "This is BillEvent Interface Class, made by K3BOSPLUGINSWIZAED"
Option Explicit
Dim iRet As Integer
 
'定义 BillEvent 接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillInterface  As BillEvent
Attribute m_BillInterface.VB_VarHelpID = -1
 
Public Sub Show(ByVal oBillInterface As Object)
 
    'BillEvent 接口实现
    '注意: 此方法必须存在, 请勿修改
    Set m_BillInterface = oBillInterface
    With m_BillInterface
        .BillEntrys.Item(1).BOSFields("FWipeItem").Filter = "t_Account.FNumber like '4105%' or t_Account.FNumber like '55%' " 'ORDER BY substring(FNumber,1,1) desc"
        .BillEntrys(1).BOSFields("FDivideDep").Visible = False
        .RefreshBill
    End With

End Sub

Private Sub Class_Terminate()
 
    '释放接口对象
    '注意: 此方法必须存在, 请勿修改
    Set m_BillInterface = Nothing

End Sub

Private Sub m_BillInterface_AfterDeleteRow(ByVal Index As Long, ByVal lRow As Long)
    With m_BillInterface

            '填写单据头的报销总额--取报销金额的总和--从分录1中取报销金额的总和
            .SetFieldValue "FWipeAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FWipeAmt", "", 0))
           '填写单据头的总额借款--取借款金额的总和--从分录1中取报销金额的总和
            .SetFieldValue "FLoanAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FLoanAmt", "", 0))
            '将单据头的报销总额--转换为大写,将报销总额转化为大写
            .SetFieldValue "FCapitalAmtSum", PricetoChinese(.GetFieldValue("FWipeAmtSum"))
            '填写单据头的--取补领金额 和 退还金额
            If .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") > 0 Then            '报销金额 大于 借款金额
                .SetFieldValue "FSupplyAmtSum", .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum")
                .SetFieldValue "FRefundAmtSum", 0
            ElseIf .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") < 0 Then       '报销金额 小于 借款金额
                .SetFieldValue "FRefundAmtSum", .GetFieldValue("FLoanAmtSum") - .GetFieldValue("FWipeAmtSum")
                .SetFieldValue "FSupplyAmtSum", 0
            Else
                .SetFieldValue "FSupplyAmtSum", 0
                .SetFieldValue "FRefundAmtSum", 0
            End If
    End With
End Sub

Private Sub m_BillInterface_AfterLoadBill()
    With m_BillInterface
        If iRet = 1 Then
            .BillEntrys(1).BOSFields("FDivideDep").Visible = True
            Exit Sub
        Else
            .BillEntrys(1).BOSFields("FDivideDep").Visible = False
            Exit Sub
        End If
    End With
End Sub

Private Sub m_BillInterface_AfterNewBill()
    '-------------------------------------------------------------------
    '新增单据后,为第三个单据体付值
    '-------------------------------------------------------------------
    With m_BillInterface
        '第三个单据体
'        .DeleteEntryData (4)
        .BillEntrys(3).MaxRows = 6
        .InsertNewRowAndFill 4, 1, "FChargeType", "市内交通费"
        .InsertNewRowAndFill 4, 2, "FChargeType", "住宿费"
        .InsertNewRowAndFill 4, 3, "FChargeType", "业务招待费"
        .InsertNewRowAndFill 4, 4, "FChargeType", "会务费"
        .InsertNewRowAndFill 4, 5, "FChargeType", "硬座补贴"
        .InsertNewRowAndFill 4, 6, "FChargeType", "其他"
        .BillEntrys(1).Visible = False
        .BillEntrys(1).Visible = True
        .RefreshBill
    
        '-------------------------------------------------------------------
        '新增单据后,取当前的预算方案编号
        '-------------------------------------------------------------------
        Dim rs As New ADODB.Recordset
        Set rs = .K3Lib.GetData("select FProjectID,FName from t_mgBudgetSet where fexec=1")
    
        If rs.State = adStateOpen And rs.RecordCount > 0 Then
            .SetFieldValue "FBudgetScheme", rs("FName")
            lBudgetProjectID = rs("FProjectID")
        Else
            MsgBox "当前没有正在执行的预算!", vbOKOnly + vbExclamation, HINTINFO
            lBudgetProjectID = 0
        End If
    
        '-------------------------------------------------------------------
        '新增单据后,分割部门隐藏
        '-------------------------------------------------------------------
        .BillEntrys(1).BOSFields("FDivideDep").Visible = False
        iRet = 0
        .RefreshBill
    End With
End Sub
'*********************************************************************
'选单后,为分录3付值,并向单据头的 报销金额付值 ,同时转换为大写
'*********************************************************************
Private Sub m_BillInterface_AfterSelBill(ByVal lSelBillType As Long)
    m_BillInterface.DeleteEntryData (4)
    m_BillInterface_AfterNewBill
    With m_BillInterface
        .SetFieldValue "FLoanAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FLoanAmt", "", 0))
        .SetFieldValue "FWipeAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FWipeAmt", "", 0))
        '将单据头的报销总额--转换为大写,将报销总额转化为大写
        .SetFieldValue "FCapitalAmtSum", PricetoChinese(.GetFieldValue("FWipeAmtSum"))
                
        .RefreshBill
    End With
End Sub



'*********************************************************************
'保存前,进行报销金额的判断
'1 是否录入差旅费明细
'2 报销金额是否大于预算余额
'*********************************************************************
Private Sub m_BillInterface_BeforeSave(bCancel As Boolean)
    Dim sRet As String, bret As Boolean
    Dim lBalanceAmt As Currency
    Dim i As Integer
    Dim lsum
    Dim sErr As String
    With m_BillInterface
    '判断报销项目是否与借款项目相等
    '判断是否录入了差旅费的明细,且明细是否和总和相等
        lsum = 0
        For i = 1 To .Data("page2").Size
             If InStr(1, .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP"), "差旅") Then
                lsum = lsum + CCur(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeAmt"))("FFLD"))
                bret = True
             End If
             If Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FFLD")) <> Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FLoanItem"))("FFLD")) And _
                Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FLoanItem"))("FFLD")) <> "" Then
                MsgBox "第" & CStr(i) & "行,“报销项目”与选择的借款单的“借款项目”不相同,不能保存!"
                bCancel = True
                Exit Sub
             End If
        Next i
        If bret = True Then
            If lsum <> .Sum(.GetFieldInfoByKey("FTraAmt", "", 0)) + .Sum(.GetFieldInfoByKey("FSubsidyAmt", "", 0)) + .Sum(.GetFieldInfoByKey("FChargeAmt", "", 0)) Then
                sErr = "请录入差旅费报销信息的明细项!" & vbCrLf & "或请检查“差旅费明细”总额是否与报销信息中的“差旅费”报销金额相等!"
                bCancel = True
            End If
            
'            MsgBox sErr, vbOKOnly + vbInformation, HINTINFO
'            Exit Sub
        End If
        
    '进行报销金额的判断
       If compareNum(lBalanceAmt, sRet) = False Then
            sErr = sErr & vbCrLf & sRet
            bCancel = True
        End If
        If sErr <> "" Then MsgBox sErr, vbOKOnly + vbInformation, HINTINFO
    End With
    
End Sub

'*********************************************************************
'数据更改:
'1 根据报销金额的更改,
'        1更新单据体  补领金额 和退还金额
'        2更新单据头 报销总额,并更新大写
'    3更新单据头 补领金额 和退还金额
'2 分录1中的报销项目更改时(即新增一个报销项目时)将报销部门带入
'*********************************************************************
Private Sub m_BillInterface_Change(ByVal dct As KFO.IDictionary, ByVal dctFld As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean)
    With m_BillInterface
        '改变分录1中的报销金额
        If dct("FFieldName") = "FWipeAmt" Then
            '填写单据体的补领金额 和退还金额
            If .GetFieldValue("FLoanAmt") <> 0 Then
                If .GetFieldValue("FLoanAmt") - .GetFieldValue("FWipeAmt") > 0 Then
                    .SetFieldValue "FRefundAmt", .GetFieldValue("FLoanAmt") - .GetFieldValue("FWipeAmt")
                    .SetFieldValue "FSupplyAmt", 0
                ElseIf .GetFieldValue("FLoanAmt") - .GetFieldValue("FWipeAmt") < 0 Then
                    .SetFieldValue "FSupplyAmt", .GetFieldValue("FWipeAmt") - .GetFieldValue("FLoanAmt")
                    .SetFieldValue "FRefundAmt", 0
                End If
            End If
            '填写单据头的报销总额--取报销金额的总和--从分录1中取报销金额的总和
            .SetFieldValue "FWipeAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FWipeAmt", "", 0))
            '将单据头的报销总额--转换为大写,将报销总额转化为大写
            .SetFieldValue "FCapitalAmtSum", PricetoChinese(.GetFieldValue("FWipeAmtSum"))
            '填写单据头的--取补领金额 和 退还金额
            If .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") > 0 Then            '报销金额 大于 借款金额
                .SetFieldValue "FSupplyAmtSum", .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum")
                .SetFieldValue "FRefundAmtSum", 0
            ElseIf .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") < 0 Then       '报销金额 小于 借款金额
                .SetFieldValue "FRefundAmtSum", .GetFieldValue("FLoanAmtSum") - .GetFieldValue("FWipeAmtSum")
                .SetFieldValue "FSupplyAmtSum", 0
            Else
                .SetFieldValue "FSupplyAmtSum", 0
                .SetFieldValue "FRefundAmtSum", 0
            End If
        End If
        '改变分录1中的报销项目,将部门带进去
        If dct("FFieldName") = "FWipeItem" Then
            .SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND)
        End If
        '是否分割部门进行修改
        If dct("FFieldName") = "FCheckDep" Then
            If .GetFieldValue("FCheckDep") = 1 Then
                iRet = 1
'                .BillEntrys(1).BOSFields("FDivideDep").LabelWidth = 0
                .BillEntrys(1).BOSFields("FDivideDep").Visible = True

                .RefreshBill
            Else
                iRet = 0
                .BillEntrys(1).BOSFields("FDivideDep").Visible = False
                .RefreshBill
            End If
        End If
        
    End With
End Sub

'*********************************************************************
'判断
'3 判断当前金额有没有超过预算金额
'参数 cBalanceAmt 预算余额
'       sret 错误返回
'返回值: true 预算余额大于等于报销金额 ,false预算余额小于报销金额
'*********************************************************************
Private Function compareNum(ByRef lBalanceAmt As Currency, ByRef sRet As String, Optional iType As Integer) As Boolean

⌨️ 快捷键说明

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