Foxtable(狐表)用户栏目专家坐堂 → 高效流水账,补前几天的记录,如何从这个日期起重新计算


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

主题:高效流水账,补前几天的记录,如何从这个日期起重新计算

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
高效流水账,补前几天的记录,如何从这个日期起重新计算  发帖心情 Post By:2017/2/14 11:30:00 [显示全部帖子]

补前天的记录,应该把昨天和今天的余额重新计算。但现在按[_SortKey],是从最新的余额计算。
试着把[_SortKey]改[日期],出现错误


图片点击可在新窗口打开查看此主题相关图片如下:高效流水账 日期错误2.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:高效流水账 日期错误.jpg
图片点击可在新窗口打开查看



Select Case e.DataCol.Name
    Case "产品","入库","出库"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[日期] >= " & e.DataRow("日期") & " And [产品] = '" & e.DataRow("产品") & "'"
        drs = e.DataTable.Select(Filter)
        For Each dr As DataRow In drs
            Filter = "[日期] <= " & dr("日期") & " And [产品] = '" & dr("产品") & "'"
            Dim Val1 As Double = e.DataTable.Compute("Sum(入库)",Filter)
            Dim Val2 As Double = e.DataTable.Compute("Sum(出库)",Filter)
            dr("库存") = Val1 - Val2
        Next
        If e.DataCol.Name = "产品" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            Filter = "[日期] > " & e.DataRow("日期") & " And [产品] = '" & e.OldValue & "'"
            drs = e.DataTable.Select(Filter)
            For Each dr As DataRow In drs
                Filter = "[日期] <= " & dr("日期") & " And [产品] = '" & dr("产品") & "'"
                Dim Val1 As Double = e.DataTable.Compute("Sum(入库)",Filter)
                Dim Val2 As Double = e.DataTable.Compute("Sum(出库)",Filter)
                dr("库存") = Val1 - Val2
            Next
        End If
End Select



[此贴子已经被作者于2017/2/14 11:34:05编辑过]

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/14 13:02:00 [显示全部帖子]

代码,计算出来的结果不对。是按时间计算的同时,还要再排序?还是用高效流水账,按[_sortkey]的顺序,找到最新的再计算?


图片点击可在新窗口打开查看此主题相关图片如下:流水账.jpg
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:高效率的流水账 --按日期.table




[此贴子已经被作者于2017/2/16 8:02:54编辑过]

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/14 16:04:00 [显示全部帖子]

新增的一行,余额正确了,但后面日期的并没跟着变


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


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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/15 9:34:00 [显示全部帖子]

排序,日期从旧到新已经可以。但换成新到旧,余额顺序又乱了。我加了序号,发现是排序顺序的问题,有办法做到换排序时,余额也能正确显示。如果实在不行,怎样默认日期从新到旧嘛


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

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

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

[此贴子已经被作者于2017/2/15 9:37:51编辑过]

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/15 10:33:00 [显示全部帖子]

下面你的代码是什么意思

val1 += t.rows(i)("入库")
val2 += t.rows(i)("出库")

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/15 11:39:00 [显示全部帖子]

如果默认,日期按大到小排列,在6楼的代码哪里加desc
[此贴子已经被作者于2017/2/15 11:40:29编辑过]

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/15 23:01:00 [显示全部帖子]

对高效率流水账,做了按日期来排序的代码,还是会有余额排序的问题。

这个问题真是没办法解决了?因为默认表格打开,就是按时间大小排列,最新日期的在最上面。不然几千行数据,最新一行最下面,用起来非常不方便


图片点击可在新窗口打开查看此主题相关图片如下:高效流水账 排序.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:高效流水账 排序2.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:流水账2.table





[此贴子已经被作者于2017/2/16 1:42:17编辑过]

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/16 8:10:00 [显示全部帖子]

序号其实是_sortkey列,我为了直观,做成序号。现在的想法是,倒叙时,日期从大到下,同一日期_sortkey也从大到小。现在同一日期_sortkey从小到大!能在下面代码,做修改,达到这样的要求吗

Select Case e.DataCol.Name
    Case "产品","入库","出库"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[日期] < #" & mr("日期") & "# And [产品] = '" & mr("产品") & "'", "[日期] Desc")
        If dr Is Nothing Then
            mr("库存") = mr("入库") - mr("出库")
            dr = mr
        End If
        drs = e.DataTable.Select("[日期] >= #" & dr("日期") & "# And [产品] = '" & dr("产品") & "'", "[日期] " )
        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 [产品] = '" & e.OldValue & "'", "[日期] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[产品] = '" & e.OldValue & "'", "[日期]")
                If dr IsNot Nothing Then
                    dr("库存") = dr("入库") - dr("出库")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[日期] >= #" & dr("日期") & "# And [产品] = '" & dr("产品") & "'", "[日期]")
                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
[此贴子已经被作者于2017/2/16 8:10:26编辑过]

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/2/16 10:53:00 [显示全部帖子]

做了两个按钮,完美解决问题,之前自己想的太复杂了

升序:Tables("例子二").sort = "日期"
降序:Tables("例子二").sort = "日期 desc, 序号"


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


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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/3/2 22:12:00 [显示全部帖子]

高效流水账,一按重置按钮,就会把余额按从小到大,重新计算。如图,正确余额顺序" 514 ->554 ->558 "。重置后," 514 ->558 ->554 ",明明558是后来才添加,反而余额计算在前。


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

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


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

DataColChanged,代码是按高效流水账,将[_sortkey]改为[日期]

Select Case e.DataCol.Name
    Case "科目","增","减"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        
        dr = e.DataTable.Find("[日期] < #" & mr("日期") & "# And [科目] = '" & mr("科目") & "'", "[日期] Desc")
        If dr Is Nothing Then
            mr("余额") = mr("增") - mr("减")
            dr = mr
        End If
        
        drs = e.DataTable.Select("[日期] >= #" & dr("日期") & "# And [科目] = '" & dr("科目") & "'", "[日期]")
        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 [科目] = '" & e.OldValue & "'", "[日期] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[科目] = '" & e.OldValue & "'", "[日期]")
                If dr IsNot Nothing Then
                    dr("余额") = dr("增") - dr("减")
                End If
            End If
            
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[日期] >= #" & dr("日期") & "# And [科目] = '" & dr("科目") & "'", "[日期]")
                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



 回到顶部
总数 14 1 2 下一页