📄 showalterinfo.bas
字号:
& " 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 + -