Foxtable(狐表)用户栏目专家坐堂 → 多列根据条件自动计算,求教DON老师


  共有5671人关注过本帖树形打印复制链接

主题:多列根据条件自动计算,求教DON老师

帅哥哟,离线,有人找我吗?
zerov
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
多列根据条件自动计算,求教DON老师  发帖心情 Post By:2013/6/5 22:22:00 [只看该作者]

 如下图,选择不同月份后,根据相关条件将“摊销期初”、“本月摊销”、“累计摊销”几列数值怎么自动计算出来?
1、日期条件(有确认日期以确认日期为摊销起始月份,否则以进场月份为摊销起始月份,等确认日期自动调整(或冲减或补记)。
2、摊销条件(每月摊销金额=合同金额÷租期)
3、工程条件(如果中止合同,则不再摊销,如果提前完工,则把剩余未摊销完的金额在当月一次性摊销

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

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





 回到顶部
帅哥哟,离线,有人找我吗?
don
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/6/5 22:41:00 [只看该作者]

1.本月摊销 暂且理解为:合同金额÷月数(不明3,4行的-200及200是如何来的?);

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

3.什么是冲减或补记?专业术语不是人人能理解的!

4.中止合同 ==> 表中如何体现是否中止?

5.本人不大喜欢高调,所以标题最好别专门指明我,这样压力大啊,有问题大家有空有能力都会帮助的.

 回到顶部
帅哥哟,离线,有人找我吗?
zerov
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
回复:(don)1.本月摊销 暂且理解为:合同金额÷月数(...  发帖心情 Post By:2013/6/5 23:30:00 [只看该作者]

谢谢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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/6 7:27:00 [只看该作者]

以下是引用don在2013-6-5 22:41:00的发言:

5.本人不大喜欢高调,所以标题最好别专门指明我,这样压力大啊,有问题大家有空有能力都会帮助的.

在医疗系统,这叫做挂专家号,点名手术,要多交钱的。图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
zerov
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
回复:(lsy)以下是引用don在2013-6-5 22:41:00的发言...  发帖心情 Post By:2013/6/6 9:25:00 [只看该作者]

LSY老师真幽默

 回到顶部
帅哥哟,离线,有人找我吗?
don
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
回复:(don)试试,按钮代码:Dim n1,n2,y1,M1 As Doub...  发帖心情 Post By:2013/6/6 11:58:00 [只看该作者]

DON老师真厉害,太感谢了!图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
don
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
回复:(don)完善一下:Dim n1,n2,y1,M1 As DoubleDim...  发帖心情 Post By:2013/6/7 22:11:00 [只看该作者]

谢谢DON老师,非常完美,感觉don老师SQL数据库水平非常棒!

只是,还有小小一点瑕疵,没有考虑到“溢出”,例如,合同金额200元,租期2个月,那么第3个月摊销时,期初是200元=合同金额200元,再摊销就会超出合同金额了,所以到第3个月时(即超出租期时)提示是项目否超期,如果超期就继续摊销,否则停止摊销

 回到顶部