Foxtable(狐表)用户栏目专家坐堂 → 流水账相关


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

主题:流水账相关

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


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
流水账相关  发帖心情 Post By:2020/5/25 15:55: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("[_Identify] < " & mr("_Identify") & " And [项目名称] = '" & mr("项目名称") & "'", "[_Identify] Desc")
        If dr Is Nothing Then '如果是第一行,计算结存
            jk =  DataTables("项目流水账").SQLCompute("Sum(收入)","[_Identify] < " & mr("_Identify") & " And 项目名称 = '" & mr("项目名称") & "'")
            ck =  DataTables("项目流水账").SQLCompute("Sum(支出)","[_Identify] < " & mr("_Identify") & " And 项目名称 = '" & mr("项目名称") & "'")
            mr("余额") = e.DataRow("收入") - e.DataRow("支出") + jk - ck
            dr = mr
        End If
        drs = e.DataTable.Select("[_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("[_Identify] < " & mr("_Identify") & " And [项目名称] = '" & e.OldValue & "'", "[_Identify] Desc") '找出旧项目名称的上一行
            If dr Is Nothing Then '如果不存在上一行,那么本行就是旧项目名称的第一行,由于已经被修改为新项目名称,需要找出旧项目名称现在的第一行
                dr = e.DataTable.Find("[项目名称] = '" & e.OldValue & "'", "[_Identify]") '找出旧项目名称现在的第一行
                If dr IsNot Nothing Then '如果找到,计算余额
                    jk =  DataTables("项目流水账").SQLCompute("Sum(收入)","[_Identify] < " & mr("_Identify") & " And 项目名称 = '" & e.OldValue & "'")
                    ck =  DataTables("项目流水账").SQLCompute("Sum(支出)","[_Identify] < " & mr("_Identify") & " And 项目名称 = '" & e.OldValue & "'")
                    dr("余额") = dr("收入") - dr("支出") + jk - ck
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_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

 

[_Identify]来计算设涉及到一个问题就是,有可能某个日期登记掉一笔,后面补上,计算出来的余额就不是准确的值。

[此贴子已经被作者于2020/5/25 16:07:21编辑过]

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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/25 16:17:00 [只看该作者]

"日期 Desc[_Identify] Desc"

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


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/5/25 16:53:00 [只看该作者]

老师,刚好就是后面补录的一笔不对,余额少了112元,到最后显示余额是:316712.01,刚好是补录后,在月里面在增加进去,这一笔的余额也不对。最后余额显示到补录的那一列了。

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20200525165221.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2020/5/25 17:03:51编辑过]

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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/25 17:03:00 [只看该作者]

上传实例说明

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


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/5/25 17:15:00 [只看该作者]

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

老师,第41条记录是后面补录的,我按照交易日期排序后,余额需要按照排序后的计算。

 

老师修改了麻烦直接给代码,没升级5.18,打开不方便,有需要去安装,看了又卸载安回旧版本。

[此贴子已经被作者于2020/5/25 17:16:10编辑过]

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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/5/25 17:41:00 [只看该作者]

老师,支出累计和最后一行余额差了第一个40元呢,第2行余额不对

开始重置列不对,我重新修改了第一行金额后面就对了

[此贴子已经被作者于2020/5/25 17:53:37编辑过]

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


加好友 发短信
等级:狐精 帖子:3098 积分:20676 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/5/26 10:08:00 [只看该作者]

老师,还是那个问题,重置列后,第一个40元没每进入到第二条余额

 


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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/26 10:17:00 [只看该作者]

日期 < #" & mr("日期")

全部改为

日期 <= #" & mr("日期")

 回到顶部