以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于关联表自动更新的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=107374)

--  作者:mikee
--  发布时间:2017/9/26 21:35:00
--  关于关联表自动更新的问题
在做一个项目分摊计算的功能如附件图片,设计两个菜单按键
1. 计算分摊金额, 根据项目表中的开始/结束日期,把项目金额按天分摊到不同的月份,值计入到收益表。开始/结束日期所跨月度决定了收益表增加的记录数。

2. 确认收入金额, 根据项目确认日期, 收益表中,在确认日期之前的分摊金额,确认时间为确认日期所在月; 确认日期之后的按照计划分摊的时间,

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目收益.rar

因为项目表中的三个日期都可能变动,请教如何根据项目表随时更新收益表? 
图片点击可在新窗口打开查看此主题相关图片如下:分摊.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2017/9/26 23:25:00
--  
项目表,Datacolchanged事件


Select Case e.DataCol.Name
    Case "开始时间","结束时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("结束时间") = False AndAlso dr.IsNull("开始时间") = False AndAlso dr("开始时间") <= dr("结束时间") Then
            Dim d As Date = dr("开始时间")
            Dim nr As Row
            Dim qd As String = Format(dr("签署日期"),"yyyyMM")
            Dim amount As Integer = dr("金额")
            If Format(d,"yyyyMM") = Format(dr("结束时间"),"yyyyMM") Then
                nr = Tables("项目.收益").AddNew()
                nr("分期时间") = Format(d,"yyyyMM")
                nr("分期金额") = dr("金额")
                nr("确认时间") = qd
            Else
                Dim sum As Integer = 0
                nr = Tables("项目.收益").AddNew()
                nr("分期时间") = Format(d,"yyyyMM")
                sum = (Date.DaysInMonth(d.Year,d.Month) - d.Day + 1)*100
                nr("分期金额") = math.Min(sum,amount)
                nr("确认时间") = qd
                If sum >= amount Then Return
                d = new Date(d.Year,d.Month,1).AddMonths(2).AddDays(-1)
                Do While d < dr("结束时间")
                    nr = Tables("项目.收益").AddNew()
                    nr("分期时间") = Format(d,"yyyyMM")
                    nr("确认时间") = qd
                    Dim fqje As Integer = Date.DaysInMonth(d.Year,d.Month)*100
                    If fqje + sum > amount Then
                        nr("分期金额") = amount - sum
                        Return
                    End If
                    nr("分期金额") = fqje
                    sum += fqje
                    d = d.AddMonths(1)
                Loop
                If sum < amount Then
                    d = dr("结束时间")
                    nr = Tables("项目.收益").AddNew()
                    nr("分期时间") = Format(d,"yyyyMM")
                    nr("分期金额") = amount - sum
                    nr("确认时间") = qd
                End If
            End If
        End If
End Select

--  作者:Mikee
--  发布时间:2017/9/27 8:24:00
--  
谢谢老师,等我仔细体会下,图片点击可在新窗口打开查看