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

📄 showalterinfo.bas

📁 金算盘软件代码
💻 BAS
📖 第 1 页 / 共 5 页
字号:
                    & " WHERE lngFixedCardID=" & lngFixedCardID
                gclsBase.ExecSQL strSql
                lngLastFixedAlterID = 0
                UpdateAfterFixedBalance lngFixedCardID, intYear, intPeriod
            End If
        Loop
    End If
    recFixedAlter.Close
    Set recFixedAlter = Nothing
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' 根据当前变动记录更新余额表
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub UpdateFixedBalance(ByVal lngFixedAlterID As Long)
    Dim intYear As Integer
    Dim intPeriod As Integer
    Dim dblAmount As Double
    Dim dblDeprection As Double
    Dim dblInitAmount As Double
    Dim dblInitDeprection As Double
    Dim dblInitAccumaWork As Double
    Dim intCalcPeriod As Integer
    Dim intCalcUseAge As Integer
    Dim dblCalcAmount As Double
    Dim dblCalcDeprection As Double
    Dim strSql As String
    Dim recCard As rdoResultset
    Dim recFixedAlter As rdoResultset
    Dim recPreFixedAlter As rdoResultset
    Dim recFixedBalance As rdoResultset
    Dim recPreFixedBalance As rdoResultset
    Dim intYearPreiod As Integer                    '每年多少个会计期间(唐吉禹)
    Dim intBeelinePeriod As Integer                 '直线法计算折旧的会计期间
    Dim blnFirstMonthAlter As Boolean               '是否为帐套起用期间的其他变动记录
    Dim intUseYears As Integer                      '预计使用年限变动值
    Dim rec As rdoResultset
    Dim blnInit As Boolean
    
    blnFirstMonthAlter = False
    intYearPreiod = PeriodsOfYear()
    strSql = "SELECT * FROM FixedAlter WHERE lngFixedAlterID=" & lngFixedAlterID
    Set recFixedAlter = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
    intUseYears = 0
    If Not recFixedAlter.EOF Then
        strSql = "SELECT * FROM FixedAlter WHERE lngFixedAlterID=" _
            & recFixedAlter!lngLastFixedAlterID
        Set rec = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
        If Not rec.EOF Then
            intUseYears = recFixedAlter!intUseAge - rec!intUseAge
        End If
        rec.Close
        Set rec = Nothing
    End If
    If Not recFixedAlter.EOF Then
        If CDate(recFixedAlter!strDate) < CDate(gclsBase.BeginDate) And recFixedAlter!lngLastFixedAlterID = 0 Then
            intYear = gclsBase.FYearOfDate(CDate(gclsBase.BeginDate))
            intPeriod = gclsBase.PeriodOfDate(CDate(gclsBase.BeginDate))
            blnInit = True
        Else
            intYear = gclsBase.FYearOfDate(recFixedAlter!strDate)
            intPeriod = gclsBase.PeriodOfDate(recFixedAlter!strDate)
            blnInit = False
        End If
        '根据上次变动计算原值变动、折旧变动
        If recFixedAlter!lngLastFixedAlterID > 0 Then
            strSql = "SELECT * FROM FixedAlter WHERE lngFixedAlterID=" & recFixedAlter!lngLastFixedAlterID
            Set recPreFixedAlter = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
            If Not recPreFixedAlter.EOF Then
                dblDeprection = recFixedAlter!dblAlterDeprection ' - recPreFixedAlter!dblDeprection
                dblAmount = recFixedAlter!dblDebitAmount - recFixedAlter!dblCreditAmount
                If recFixedAlter!intYear = recPreFixedAlter!intYear And recFixedAlter!bytPeriod = recPreFixedAlter!bytPeriod Then
                    dblCalcDeprection = recPreFixedAlter!dblDeprection + recFixedAlter!dblAlterDeprection
                    strSql = "SELECT * FROM FixedCard WHERE lngFixedCardID=" & recFixedAlter!lngFixedCardID
                    Set recCard = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                    If Not recCard.EOF Then
                        dblInitAccumaWork = recCard!intStartWork
                        intCalcPeriod = recCard!intStartPeriod
                    End If
                    recCard.Close
                    Set recCard = Nothing
                End If
            End If
        Else
            strSql = "SELECT * FROM FixedCard WHERE lngFixedCardID=" & recFixedAlter!lngFixedCardID
            Set recCard = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
            If Not recCard.EOF Then
'                If CDate(recFixedAlter!strDate) < CDate(GetAccountBeginDate()) Then
                    dblInitAccumaWork = recCard!intStartWork
                    intCalcPeriod = recCard!intStartPeriod
'                End If
                If blnInit Then
                    dblInitAmount = recFixedAlter!dblAmount
                    dblInitDeprection = recFixedAlter!dblDeprection
'                    If recFixedAlter!strDepreciationMethod = "4" And recFixedAlter!strDeprectionFactor = "1" And recCard!intStartPeriod < intYearPreiod Then
'                    Else
                        dblCalcDeprection = recFixedAlter!dblDeprection
'                    End If
                Else
                    dblAmount = recFixedAlter!dblAmount
                    dblDeprection = recFixedAlter!dblAlterDeprection
'                    If recFixedAlter!strDepreciationMethod = "4" And recFixedAlter!strDeprectionFactor = "1" And recCard!intStartPeriod < intYearPreiod Then
'                    Else
                        dblCalcDeprection = recFixedAlter!dblDeprection
'                    End If
                End If
            End If
            recCard.Close
            Set recCard = Nothing
        End If
        
        '计算期初原值、折旧、累计工作量
         strSql = "SELECT * FROM FixedBalance WHERE lngFixedCardID=" & recFixedAlter!lngFixedCardID _
            & " AND intYear*100+bytPeriod<" & CLng(intYear) * 100 + intPeriod _
            & " ORDER BY intYear DESC,bytPeriod DESC"
        Set recPreFixedBalance = gclsBase.BaseDB.OpenResultset(strSql, rdOpenDynamic, rdConcurValues)
        '唐吉禹修改,对于第一个会计期间,建卡时录入入帐前已经使用的资料后,
        '又在该会计期间录入其他变动资料,此时需要修改余额表。
        If recPreFixedBalance.EOF Then
            blnFirstMonthAlter = True
'            UpdateFixedBalance recFixedAlter!lngLastFixedAlterID
            '取第一个会计期间
'            strSql = "SELECT AccountPeriod.intYear, AccountPeriod.bytPeriod FROM Business INNER " _
'                & "JOIN AccountPeriod ON (Business.strStartDate <= AccountPeriod.strEndDate) AND " _
'                & "(Business.strStartDate >= AccountPeriod.strStartDate)"
'            Set rec = gclsBase.BaseDB.OpenResultset(strsql, rdOpenstatic)
'            If rec!intYear = intYear And rec!bytPeriod = intPeriod Then
'                '判断该固定资产是否有其他变动记录
'                strSql = "SELECT lngFixedAlterID FROM FixedAlter WHERE lngFixedAlterID<>" _
'                    & recFixedAlter!lngFixedAlterID & " AND lngFixedCardID=" _
'                    & recFixedAlter!lngFixedCardID
'                Set rec = gclsBase.BaseDB.OpenResultset(strsql, rdOpenstatic)
'                If Not rec.EOF Then
'                    strSql = "SELECT FixedAlter.* FROM FixedAlter INNER JOIN " _
'                        & "FixedCard ON FixedCard.lngFixedCardID=FixedAlter.lngFixedCardID " _
'                        & "WHERE FixedAlter.lngFixedAlterID=FixedCard.lngCreateFixedAlterID " _
'                        & "AND FixedAlter.lngFixedCardID=" & recFixedAlter!lngFixedCardID
'                    Set rec = gclsBase.BaseDB.OpenResultset(strsql, rdOpenstatic)
'                    If rec!lngFixedAlterID <> recFixedAlter!lngFixedAlterID Then
'                        strSql = "SELECT * FROM FixedCard WHERE lngFixedCardID=" & recFixedAlter!lngFixedCardID
'                        Set recCard = gclsBase.BaseDB.OpenResultset(strsql, rdOpenstatic)
'                        blnFirstMonthAlter = True
'                        Select Case rec!strDeprectionFactor
'                        Case "1"
'                            strSql = "UPDATE FixedBalance SET dblCalcDeprection=dblInitDeprection,intCalcUseAge=" & rec!intUseAge _
'                                & " ,dblCalcAmount=" & rec!dblAmount & ",intBeelinePeriod=" _
'                                & rec!intUseAge * intYearPreiod & ",intCalcPeriod=" & recCard!intStartPeriod _
'                                & " WHERE lngFixedCardID=" _
'                                & recFixedAlter!lngFixedCardID & " AND intYear=" & intYear & " AND bytPeriod=" & intPeriod
'                        Case "2"
'                            strSql = "UPDATE FixedBalance SET intCalcUseAge=(" & rec!intUseAge * _
'                                intYearPreiod + intYearPreiod - 1 - recCard!intStartPeriod & ") \" _
'                                & intYearPreiod & " ,dblCalcAmount=" & rec!dblAmount - _
'                                rec!dblDeprection & "," & "intBeelinePeriod=" & rec!intUseAge _
'                                * intYearPreiod - recCard!intStartPeriod _
'                                & ",intCalcPeriod=" & intYearPreiod - (rec!intUseAge * intYearPreiod - _
'                                recCard!intStartPeriod) Mod intYearPreiod & " WHERE lngFixedCardID=" _
'                                & recFixedAlter!lngFixedCardID & " AND intYear=" & intYear & " AND bytPeriod=" & intPeriod
'                        End Select
'                        gclsBase.ExecSQL strSql
'                        strSql = "SELECT * FROM FixedBalance WHERE lngFixedCardID=" _
'                            & recFixedAlter!lngFixedCardID & " AND intYear*100+bytPeriod=" _
'                            & CLng(intYear) * 100 + intPeriod & " ORDER BY intYear DESC,bytPeriod DESC"
'                        Set recPreFixedBalance = gclsBase.BaseDB.OpenResultset(strsql, rdOpenDynamic, rdConcurValues)
'                        recCard.Close
'                        Set recCard = Nothing
'                    End If
'                End If
'                rec.Close
'                Set rec = Nothing
'            End If
'            strSql = "SELECT TOP 1 * FROM FixedBalance WHERE lngFixedCardID=" _
'                & recFixedAlter!lngFixedCardID & " AND intYear*100+bytPeriod=" _
'                & CLng(intYear) * 100 + intPeriod & " ORDER BY intYear DESC,bytPeriod DESC"
'            Set recPreFixedBalance = gclsBase.BaseDB.OpenResultset(strsql, rdOpenDynamic, rdConcurValues)
        End If
        If Not recPreFixedBalance.EOF Then
            If intPeriod <> recPreFixedBalance!bytPeriod Or intYear <> recPreFixedBalance!intYear Then
                With recPreFixedBalance
                    dblInitAmount = !dblInitAmount + !dblDebitAmount + !dblCreditAmount
                    dblInitDeprection = !dblInitDeprection + !dblDeprection + !dblAlterDeprection
                    dblInitAccumaWork = !dblInitAccumaWork + !dblWork
                End With
            Else
                With recPreFixedBalance
                    dblInitAmount = !dblInitAmount
                    dblInitDeprection = !dblInitDeprection
                    dblInitAccumaWork = !dblInitAccumaWork
                End With
            End If
        ElseIf recFixedAlter!lngLastFixedAlterID > 0 Then
            With recPreFixedAlter
                dblInitAmount = !dblAmount
                dblInitDeprection = !dblDeprection
            End With
            If recFixedAlter!strDepreciationMethod = "2" Then
                strSql = "SELECT * FROM FixedCard WHERE lngFixedCardID=" & recFixedAlter!lngFixedCardID
                Set recCard = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                If Not recCard.EOF Then
                    dblInitAccumaWork = recCard!intStartWork
                End If
                recCard.Close
                Set recCard = Nothing
            End If
            recPreFixedAlter.Close
            Set recPreFixedAlter = Nothing
        End If
        
        '处理已提折旧期间数,用于计算折旧的预计使用年限,用于计算折旧的原值,用于计算折旧累计折旧(调整数)
        Select Case recFixedAlter!strDeprectionFactor
        Case "0"
            '按照变动前折旧因素计提折旧
            If Not recPreFixedBalance.EOF Then
                With recPreFixedBalance
                    intCalcPeriod = !intCalcPeriod + recPreFixedBalance!intPeriod
                    intCalcUseAge = !intCalcUseAge
                    dblCalcAmount = !dblCalcAmount
                    dblCalcDeprection = !dblCalcDeprection + !dblDeprection + !dblAlterDeprection
                    intBeelinePeriod = !intBeelinePeriod
                End With
            Else
                
            End If
        Case "1"
            '按照变动后折旧因素计提折旧
            If Not recPreFixedBalance.EOF Then
                '第一个会计期间的变动记录不能将变动记录加到本条记录上来
                If blnFirstMonthAlter Then
                    intCalcPeriod = recPreFixedBalance!intCalcPeriod
                    dblCalcDeprection = recPreFixedBalance!dblCalcDeprection
                Else
                    dblCalcDeprection = recPreFixedBalance!dblCalcDeprection + _
                        recPreFixedBalance!dblDeprection + recPreFixedBalance!dblAlterDeprection
                    intCalcPeriod = recPreFixedBalance!intCalcPeriod + recPreFixedBalance!intPeriod
                End If
            Else
                '为本期折旧变动
                'dblCalcDeprection = recFixedAlter!dblAlterDeprection
            End If
            With recFixedAlter
                intCalcUseAge = !intUseAge
                intBeelinePeriod = !intUseAge * intYearPreiod
                dblCalcAmount = !dblAmount
            End With
            '对于双倍余额法
        Case "2"
            '按照当前净值和剩余期间计提折旧
            If Not recPreFixedBalance.EOF Then
                '要先判断上次是否可以计提折旧
                intBeelinePeriod = (intUseYears * intYearPreiod) + recPreFixedBalance!intCalcUseAge * intYearPreiod - recPreFixedBalance!intPeriod - recPreFixedBalance!intCalcPeriod
                If intYear = recPreFixedBalance!intYear And intPeriod = recPreFixedBalance!bytPeriod Then
                    intBeelinePeriod = (intUseYears * intYearPreiod) + recFixedAlter!intUseAge * intYearPreiod
                    intBeelinePeriod = intBeelinePeriod - recPreFixedBalance!intPeriod - recPreFixedBalance!intCalcPeriod
                End If
                dblCalcDeprection = recPreFixedBalance!dblCalcDeprection + recPreFixedBalance!dblDeprection + recPreFixedBalance!dblAlterDeprection
            Else
                intBeelinePeriod = recFixedAlter!intUseAge * intYearPreiod - intCalcPeriod
            End If
            intCalcUseAge = (intYearPreiod - 1 + intBeelinePeriod) \ intYearPreiod + intUseYears
            With recFixedAlter
                dblCalcAmount = !dblAmount + (!dblDebitAmount - !dblCreditAmount) - dblCalcDeprection '!dblDeprection - !dblAlterDeprection
                dblCalcDeprection = 0
                intCalcPeriod = intCalcUseAge * intYearPreiod - intBeelinePeriod '(intCalcPeriod Mod intYearPreiod)

⌨️ 快捷键说明

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