以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 流水账相关 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=150266) |
||||
-- 作者:cd_tdh -- 发布时间:2020/5/25 15:55:00 -- 流水账相关 老师,按照帮助做了一个流水账,代码如下: 但是交易日期在之前时,余额就不对了,怎么弄呢? Select Case e.DataCol.Name
用[_Identify]来计算设涉及到一个问题就是,有可能某个日期登记掉一笔,后面补上,计算出来的余额就不是准确的值。 [此贴子已经被作者于2020/5/25 16:07:21编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2020/5/25 16:17:00 -- "日期 Desc,[_Identify] Desc" |
||||
-- 作者:cd_tdh -- 发布时间:2020/5/25 16:53:00 -- 老师,刚好就是后面补录的一笔不对,余额少了112元,到最后显示余额是:316712.01,刚好是补录后,在月里面在增加进去,这一笔的余额也不对。最后余额显示到补录的那一列了。
此主题相关图片如下:qq截图20200525165221.png [此贴子已经被作者于2020/5/25 17:03:51编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2020/5/25 17:03:00 -- 上传实例说明 |
||||
-- 作者:cd_tdh -- 发布时间:2020/5/25 17:15:00 --
老师,第41条记录是后面补录的,我按照交易日期排序后,余额需要按照排序后的计算。
老师修改了麻烦直接给代码,没升级5.18,打开不方便,有需要去安装,看了又卸载安回旧版本。 [此贴子已经被作者于2020/5/25 17:16:10编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2020/5/25 17:32:00 -- Select Case e.DataCol.Name Case "项目名称","收入","支出" Dim dr As DataRow Dim mr As DataRow = e.DataRow Dim drs As List(of DataRow) Dim jk As Integer Dim ck As Integer dr = e.DataTable.Find("日期 < #" & mr("日期") & "# and [_Identify] < " & mr("_Identify") & " And [项目名称] = \'" & mr("项目名称") & "\'", "日期 Desc,[_Identify] Desc") If dr Is Nothing Then \'如果是第一行,计算结存 jk = DataTables("表A").SQLCompute("Sum(收入)","日期 < #" & mr("日期") & "# and [_Identify] < " & mr("_Identify") & " And 项目名称 = \'" & mr("项目名称") & "\'") ck = DataTables("表A").SQLCompute("Sum(支出)","日期 < #" & mr("日期") & "# and [_Identify] < " & mr("_Identify") & " And 项目名称 = \'" & mr("项目名称") & "\'") mr("余额") = e.DataRow("收入") - e.DataRow("支出") + jk - ck dr = mr End If drs = e.DataTable.Select("日期 >= #" & dr("日期") & "# and [_Identify] >= " & dr("_Identify") & " And [项目名称] = \'" & dr("项目名称") & "\'", "日期,[_Identify]") For i As Integer = 1 To drs.Count - 1 drs(i)("余额") = drs(i-1)("余额") + drs(i)("收入") - drs(i)("支出") Next If e.DataCol.Name = "项目名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then \'如果修改的是项目名称列 dr = e.DataTable.Find("日期 < #" & mr("日期") & "# and [_Identify] < " & mr("_Identify") & " And [项目名称] = \'" & e.OldValue & "\'", "日期 Desc,[_Identify] Desc") \'找出旧项目名称的上一行 If dr Is Nothing Then \'如果不存在上一行,那么本行就是旧项目名称的第一行,由于已经被修改为新项目名称,需要找出旧项目名称现在的第一行 dr = e.DataTable.Find("[项目名称] = \'" & e.OldValue & "\'", "日期,[_Identify]") \'找出旧项目名称现在的第一行 If dr IsNot Nothing Then \'如果找到,计算余额 jk = DataTables("表A").SQLCompute("Sum(收入)","日期 < #" & mr("日期") & "# and [_Identify] < " & mr("_Identify") & " And 项目名称 = \'" & e.OldValue & "\'") ck = DataTables("表A").SQLCompute("Sum(支出)","日期 < #" & mr("日期") & "# and [_Identify] < " & mr("_Identify") & " And 项目名称 = \'" & e.OldValue & "\'") dr("余额") = dr("收入") - dr("支出") + jk - ck End If End If If dr IsNot Nothing Then drs = e.DataTable.Select("日期 >= #" & dr("日期") & "# and [_Identify] >= " & dr("_Identify") & " And [项目名称] = \'" & dr("项目名称") & "\'", "日期,[_Identify]") For i As Integer = 1 To drs.Count - 1 drs(i)("余额") = drs(i-1)("余额") + drs(i)("收入") - drs(i)("支出") Next End If End If End Select
|
||||
-- 作者:cd_tdh -- 发布时间:2020/5/25 17:41:00 -- 老师,支出累计和最后一行余额差了第一个40元呢,第2行余额不对 开始重置列不对,我重新修改了第一行金额后面就对了 [此贴子已经被作者于2020/5/25 17:53:37编辑过]
|
||||
-- 作者:cd_tdh -- 发布时间:2020/5/26 10:08:00 -- 老师,还是那个问题,重置列后,第一个40元没每进入到第二条余额
|
||||
-- 作者:有点蓝 -- 发布时间:2020/5/26 10:17:00 -- 日期 < #" & mr("日期") 全部改为 日期 <= #" & mr("日期")
|