以文本方式查看主题

-  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、工程条件(如果中止合同,则不再摊销,如果提前完工,则把剩余未摊销完的金额在当月一次性摊销

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:摊销.table





--  作者:don
--  发布时间:2013/6/5 22:41:00
--  
1.本月摊销 暂且理解为:合同金额÷月数(不明3,4行的-200及200是如何来的?);

2.不明期初摊销 的来历?

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个月时(即超出租期时)提示是项目否超期,如果超期就继续摊销,否则停止摊销