以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于关联表自动更新的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=107374) |
||||
-- 作者:mikee -- 发布时间:2017/9/26 21:35:00 -- 关于关联表自动更新的问题 在做一个项目分摊计算的功能如附件图片,设计两个菜单按键 1. 计算分摊金额, 根据项目表中的开始/结束日期,把项目金额按天分摊到不同的月份,值计入到收益表。开始/结束日期所跨月度决定了收益表增加的记录数。 2. 确认收入金额, 根据项目确认日期, 收益表中,在确认日期之前的分摊金额,确认时间为确认日期所在月; 确认日期之后的按照计划分摊的时间,
|
||||
-- 作者:有点蓝 -- 发布时间: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 -- 谢谢老师,等我仔细体会下, |