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

📄 bos_wipe2bill_plugins.cls

📁 完成报销系统的业务流程;在报销系统中达到预算控制目的;将历史数据导入金蝶账套生成历史备查数据。
💻 CLS
📖 第 1 页 / 共 3 页
字号:
'    3更新单据头 补领金额 和退还金额
'3 申请部门变更时,如果分割部门没有值,则将申请部门的值付到单据体的分割部门上
'*********************************************************************
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
        '-------------------------------------------------------------------
        '报销项目 改变
        '-------------------------------------------------------------------
        If dct("FFieldName") = "FWipeItem" Then
            '不允许 报销项目为 差旅费
            If InStr(1, .Data("Page2").Item(Row)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP"), "差旅") Then
                .SetFieldValue "FWipeItem", 0
                MsgBox "支出证明单不能报销差旅费!", vbInformation + vbOKOnly, HINTINFO
            End If
            '改变分录1中的报销项目,将部门带进去
            .SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND)
        End If

        '-------------------------------------------------------------------
          '申请部门变更时,如果分割部门没有值,则将申请部门的值付到单据体的分割部门上
        '-------------------------------------------------------------------
        If dct("FFieldName") = "FReqDept" Then
            Dim i As Integer
            i = 1
            While i <= .Data("Page2").Size
                If Trim(.GetFieldValue("FDivideDep", i, Enu_ValueType_FDSP)) = "" Then
                    .SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND), i
                End If
                i = i + 1
            Wend
        End If
        '-------------------------------------------------------------------
        '改变分录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

        
    End With
End Sub
'是否显示分割部门
Private Function ShowDep(iType As Integer)
    With m_BillInterface
        If iType = 1 Then
            iShowDepType = 1
            .BillEntrys(1).BOSFields("FDivideDep").Visible = True
            .RefreshBill
            Exit Function
        Else
            iShowDepType = 0
            .BillEntrys(1).BOSFields("FDivideDep").Visible = False
            .RefreshBill
            Exit Function
        End If
    End With
End Function
'*********************************************************************
'判断
'3 判断当前金额有没有超过预算金额
'参数 cBalanceAmt 预算余额
'       sret 错误返回
'       iType 0 计算预算余额 1 计算除当次以外的预算余额
'返回值: true 预算余额大于等于报销金额 ,false预算余额小于报销金额
'*********************************************************************
Private Function compareNum(ByRef lBalanceAmt As Currency, ByRef sRet As String, Optional iType As Integer) As Boolean
     '-------------------------------------------------------------------
    '判断
    '3 判断当前金额有没有超过预算金额
    '-------------------------------------------------------------------
    Dim lAmt As Currency  '借款金额
    Dim lbudget As Currency '预算金额
    Dim lUseAmt As Currency '已用预处金额
    Dim lUseAmt1 As Currency
    Dim lUseAmt2 As Currency
    Dim lUseAmt21 As Currency
    Dim lUseAmt22 As Currency
    Dim lUseAmt3 As Currency
    Dim lbudgetID As Long  '预算方案ID
    Dim lDepId As Long  '部门ID
    Dim lDetailId As Long
    Dim lAcctId As Long '会计科目
    Dim lBudgetAccId As Long  '预算科目
    Dim sAccIdDepId As String '预算科目对应会计科目和部门 和字符串
    Dim lBudgetCon As Long '预算控制 0本期预算 1累计预算 2本年预算 3方案预算  4季度预算 5半年预算
    Dim sConBound As String '预算控制范围的字符串
    Dim sConBound1 As String
    Dim rs As New ADODB.Recordset
    Dim sSql As String
    Dim iYear As Integer
    Dim iPeriod As Integer
    Dim i As Integer, j As Integer
    Dim sFid_src As String '源单编号
    Dim sErr As String
    
    
    On Error GoTo ERR
    With m_BillInterface
         '取对应预算方案
        lbudgetID = lBudgetProjectID
        
        '循环分录中的所有列
        i = 1
beg:        While i <= .Data("Page2").Size
                '对应部门,
                If Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FFLD")) = "" Then
                    i = i + 1
                    GoTo beg
                End If
                lDepId = .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FFLD")
                
                '取借款金额的值
'                If iType = 1 Then
'                    lAmt = 0
'                Else
'                    lAmt = .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FloanAmt"))("FFLD")
'                End If
    
                '会计科目--报销科目=借款科目(如果有借款存在)
                lAcctId = .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FFLD")

    
                '2根据财务科目内码取预算科目的内码 lBudgetAccId
                sSql = "select FBudgetItem from t_EP_ER_AccToMgAccEntry1 t1  " & _
                                " inner join t_EP_ER_AccToMgAcc t2 on t1.fid=t2.fid " & _
                                " where FAcctID = '" & lAcctId & "' and FDepID  ='" & lDepId & "'"
                 Set rs = .K3Lib.GetData(sSql)
                If rs.State = adStateOpen And rs.RecordCount > 0 Then
                    lBudgetAccId = rs("FBudgetItem")
                Else
                    sErr = sErr & "您录入第" & CStr(i) & "列中的 “会计科目”:" & _
                       CStr(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FFND")) & "-" & CStr(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP")) & _
                        " 和 “部门”" & .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FFND") & "-" & .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FDSP") & _
                        " 没有对应预算科目!"
                    compareNum = False
                    sRet = sErr
                    Exit Function
                End If
            
                If rs.State = adStateOpen Then rs.Close
                            
                '取预算范围,是月还是季还是年,没有的话,默认为季度预算
                Set rs = .K3Lib.GetData("select FValue from T_SystemProfile where FCategory='mg' and FKey='BudGet_Con'")
                If rs.State = adStateOpen And rs.RecordCount > 0 Then
                    lBudgetCon = rs("FValue")
                Else
                    lBudgetCon = 4
                End If
                
                If rs.State = adStateOpen Then rs.Close
                       
                '3 根据预算类型进行条件拼写

'                iYear = CInt(.K3Lib.GetData("select FValue from t_systemprofile where FCategory='GL' and FKey='CurrentYear'")("FValue"))
'                iPeriod = CInt(.K3Lib.GetData("select FValue from t_systemprofile where FCategory='GL' and FKey='CurrentPeriod'")("FValue"))
                
'                iYear = Left(.K3Lib.GetData("select  convert(varchar(19),getdate(),21)  as date")("Date"), 4)
'                iPeriod = Mid(.K3Lib.GetData("select  convert(varchar(19),getdate(),21) as date")("Date"), 6, 2)
                iYear = Left(.GetFieldValue("FBillDate"), 4)
                iPeriod = Mid(.GetFieldValue("FBillDate"), 6, 2)
                Select Case lBudgetCon '0本期预算 1累计预算 2本年预算 3方案预算  4季度预算 5半年预算
                    Case 0
                        sConBound = "FYear= " & iYear & " and FPeriod <=" & iPeriod
                        sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='" & CStr(iPeriod) & "'"
                    Case 1
                    Case 2
                        sConBound = "FYear= " & iYear
                        sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)= '" & CStr(iYear) & "'"
                    Case 3
                    Case 4
                        If iPeriod <= 3 Then
                            sConBound = "FYear= " & iYear & " and FPeriod<=3 " ' in (1,2,3)"
                            sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='03'"
                        ElseIf iPeriod >= 4 And iPeriod <= 6 Then
                            sConBound = "FYear= " & iYear & " and FPeriod <=6 " 'in (4,5,6)"
                            sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='06'"
                        ElseIf iPeriod >= 7 And iPeriod <= 9 Then
                            sConBound = "FYear= " & iYear & " and FPeriod <=9 " 'in (7,8,9)"
                            sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='09'"
                        ElseIf iPeriod >= 10 And iPeriod <= 12 Then
                            sConBound = "FYear= " & iYear & " and FPeriod <=12 " 'in (10,11,12)"
                            sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='12'"
                        End If

⌨️ 快捷键说明

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