以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 多列根据条件自动计算,求教DON老师 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=34338) |
-- 作者:zerov -- 发布时间:2013/6/5 22:22:00 -- 多列根据条件自动计算,求教DON老师 如下图,选择不同月份后,根据相关条件将“摊销期初”、“本月摊销”、“累计摊销”几列数值怎么自动计算出来? 1、日期条件(有确认日期以确认日期为摊销起始月份,否则以进场月份为摊销起始月份,等有了确认日期再自动调整(或冲减或补记)。 2、摊销条件(每月摊销金额=合同金额÷租期) 3、工程条件(如果中止合同,则不再摊销,如果提前完工,则把剩余未摊销完的金额在当月一次性摊销) |
-- 作者:don -- 发布时间:2013/6/5 22:41:00 -- 1.本月摊销 暂且理解为:合同金额÷月数(不明3,4行的-200及200是如何来的?); 3.什么是冲减或补记?专业术语不是人人能理解的! 4.中止合同 ==> 表中如何体现是否中止? 5.本人不大喜欢高调,所以标题最好别专门指明我,这样压力大啊,有问题大家有空有能力都会帮助的.
|
-- 作者:zerov -- 发布时间:2013/6/5 23:30:00 -- 回复:(don)1.本月摊销 暂且理解为:合同金额÷月数(... 谢谢DON老师 1、第三行的-200,是因为当月期初(即6月的期初或说进场日期3月-5月的摊销金额)是300,结果6月摊销时,确认日期变成了2013-6-3,即比开始的摊销日期(2013-3-8)延迟了3个月,所以要调整为从6月起开始摊销,6月摊销100元,再减去前面不应该摊销的300元,即100-300=-200元。 同理,第四行200,如果正常摊销,2月开始摊销,2-5月共摊销400元,当月(6月)摊销100元。但是当月返回了《确认日期》,且确认日期比进场提前了一个月(2013-1-8),所以就要补上1月的摊销,故当月的摊销就是1月的100元+6月的摊销100=200元。 2、期初摊销的金额=当月之前月份摊销金额之和,如现在6月摊销,则B项目的摊销为2、3、4、5月400元(图中错了,sorry) 3、冲减即冲销,减去的意思,补记为再加上一笔。 4、中止合同等信息为当月摊销时的表中“合同状态”变化的数据。 |
-- 作者:lsy -- 发布时间:2013/6/6 7:27:00 -- 以下是引用don在2013-6-5 22:41:00的发言:
5.本人不大喜欢高调,所以标题最好别专门指明我,这样压力大啊,有问题大家有空有能力都会帮助的. 在医疗系统,这叫做挂专家号,点名手术,要多交钱的。 |
-- 作者:zerov -- 发布时间:2013/6/6 9:25:00 -- 回复:(lsy)以下是引用don在2013-6-5 22:41:00的发言... LSY老师真幽默 |
-- 作者:don -- 发布时间:2013/6/6 11:41:00 -- 试试,按钮代码: Dim n1,n2,y1,M1 As Double Dim drs As List(of DataRow) Dim dt1 As DataTable = DataTables("摊销") Dim ym As String ym =Forms("窗口1").Controls("ComboBox1").value y1 =ym.Substring(0,4) m1 =ym.Substring(5) dt1.StopRedraw drs =dt1.Select("项目 > \'\'" ) For Each dr As DataRow In drs n1 = (y1-dr("进场日期").year)*12 +m1-dr("进场日期").Month dr("期初摊销") = dr("合同金额")*n1/dr("月数") Select Case dr("合同状态") Case "中止合同" dr("本月摊销") =0 Case "提前完工" dr("本月摊销") =dr("合同金额") -dr("期初摊销") Case "正常摊销" n2 = dr("合同金额")/dr("月数") If dr.Isnull("确认日期") OrElse dr("进场日期") =dr("确认日期") Then dr("本月摊销") = n2 ElseIf dr("进场日期") < dr("确认日期") Then dr("本月摊销") = n2 -dr("期初摊销") ElseIf dr("进场日期") > dr("确认日期") Then dr("本月摊销") = n2*2 End If End Select dr("累计摊销") = dr("本月摊销") + dr("期初摊销") Next dt1.ResumeRedraw
|
-- 作者:zerov -- 发布时间:2013/6/6 11:58:00 -- 回复:(don)试试,按钮代码:Dim n1,n2,y1,M1 As Doub... DON老师真厉害,太感谢了! ![]() |
-- 作者:don -- 发布时间:2013/6/6 12:59:00 -- 完善一下: Dim n1,n2,y1,M1 As Double Dim dt1 As DataTable = DataTables("摊销") Dim drs As List(of DataRow) = dt1.Select("项目 > \'\'") Dim ym As String = Forms("窗口1").Controls("ComboBox1").value y1 =ym.Substring(0,4) M1 =ym.Substring(5) dt1.StopRedraw For Each dr As DataRow In drs n1 = (y1-dr("进场日期").year)*12 +M1-dr("进场日期").Month dr("期初摊销") = dr("合同金额")*n1/dr("月数") Select Case dr("合同状态") Case "中止合同" dr("本月摊销") =0 Case "提前完工" dr("本月摊销") = dr("合同金额") -dr("期初摊销") Case "正常摊销" n1 = dr("合同金额")/dr("月数") If dr.Isnull("确认日期") OrElse dr("进场日期")= dr("确认日期") Then dr("本月摊销") = n1 ElseIf dr("进场日期") < dr("确认日期") Then dr("本月摊销") = n1 -dr("期初摊销") Else n2 = DateDiff("m",dr("确认日期"), dr("进场日期")) dr("本月摊销") = n1*(n2+1) End If End Select dr("累计摊销") = dr("本月摊销") + dr("期初摊销") Next dt1.ResumeRedraw
|
-- 作者:zerov -- 发布时间:2013/6/7 22:11:00 -- 回复:(don)完善一下:Dim n1,n2,y1,M1 As DoubleDim... 谢谢DON老师,非常完美,感觉don老师SQL数据库水平非常棒! 只是,还有小小一点瑕疵,没有考虑到“溢出”,例如,合同金额200元,租期2个月,那么第3个月摊销时,期初是200元=合同金额200元,再摊销就会超出合同金额了,所以到第3个月时(即超出租期时)提示是项目否超期,如果超期就继续摊销,否则停止摊销。
|