以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  固定资产折旧表达式请教  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=71849)

--  作者:qwz405
--  发布时间:2015/7/19 11:59:00
--  固定资产折旧表达式请教

入帐日期、设备原值、使用年限、残值率:手工按实际情况输入;
折旧开始:资产入帐的下个月第一天可以计算;
折旧结束:资产达到使用年限后的那天;
使用月限(资产有效使用月数) = 使用年限 * 12
预计净残值(资产折旧结束后剩余的价值,即报废价值) = 设备原值 * 残值率;
月折旧额(减掉净残值后,平均到每个使用月的折旧费) = (设备原值 * ( 1 - 残值率 )) / 使用月限
使用月数:资产从折旧开始,到当前月份,已使用的月份数

 

现在需求:本月折旧、本年折旧、累计折旧
问题出在:
月折旧额是按小数2位取值的,造成:月折旧额 * 使用月限 <> 设备原值 * ( 1 - 残值率 )      \'即:设备原值 - 预计净残值
为了使用帐面平,最后一个月的折旧 = (设备原值 * ( 1 - 残值率 )) - (月折旧额 * (使用月限 - 1))

 

判断最否超出使用期,判断是否是最后一个月,又要判断本年折旧月是否包含最后一个月...
对我来说难度太大了,请求帮助,非常感谢。
若需要,可以增加一些列。


图片点击可在新窗口打开查看此主题相关图片如下:折旧.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:固定资产.table


--  作者:大红袍
--  发布时间:2015/7/19 12:19:00
--  

 呃,有什么问题,你写的代码,就已经判断了啊。

 

 然后根据的你个规则运算出结果就行啊。


--  作者:qwz405
--  发布时间:2015/7/19 21:47:00
--  

不会写代码,用了好多表达式列。

现在的问题是:资料录入完整后,“本年折旧”列不能自动更新或者数据错误,需要重置“折旧开始”列才行,代码需要如果修改?

 

 

不知道代码能否再简化下,看到有个折旧函数,但不知道怎么用。
SLN:指定在一段时间内资产的直线折旧
语法
SLN(cost, salvage, life)

这个可以不处理,因为数据太乱了,我自己看得都头晕了。

 

Select Case e.DataCol.name
    Case "折旧开始","折旧结束","月折旧额"
        If e.DataRow.IsNull("折旧开始") OrElse e.DataRow.IsNull("折旧结束") OrElse e.DataRow.IsNull("月折旧额") Then
            e.DataRow("本年折旧") = Nothing
        Else
            Dim da3 As Date =  e.DataRow("折旧开始")
            Dim da4 As Date = Date.Today()
            Dim da5 As Date = e.DataRow("折旧结束")
            If da3.year < da4.year
                If da4.year < da5.year
                    e.DataRow("本年折旧") = e.DataRow("月折旧额") * da4.month
                Else If da4.year = da5.year
                    If da4.month > da5.month
                        e.DataRow("本年折旧") = e.DataRow("月折旧额") * da5.month
                    Else If da4.month <= da5.month
                        e.DataRow("本年折旧") = e.DataRow("月折旧额") * da4.month
                    End If
                Else If da4.year > da5.year
                    e.DataRow("本年折旧") = 0
                End If
            Else If da3.year > da4.year
                e.DataRow("本年折旧") = 0
            Else If da3.year = da4.year
                e.DataRow("本年折旧") =  e.DataRow("月折旧额") * ((da4.month - da3.month) + 1 )
            End If
        End If
End Select

 

 


此主题相关图片如下:12121.jpg
按此在新窗口浏览图片


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:固定资产2.table

[此贴子已经被作者于2015/7/19 21:49:54编辑过]

--  作者:大红袍
--  发布时间:2015/7/20 9:41:00
--  

 重新计算,可参考重置列

 

http://www.foxtable.com/help/topics/1468.htm