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


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

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

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/3 10:49:00 [只看该作者]

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 = "iif([日期] < #" & dr("日期") & "#, [日期] < #" & dr("日期") & "# And [科目] = '" & dr("科目") & "', [日期] = #" & dr("日期") & "# and 借贷号 <= " & 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 = "iif([日期] < #" & dr("日期") & "#, [日期] < #" & dr("日期") & "# And [科目] = '" & dr("科目") & "', [日期] = #" & dr("日期") & "# and 借贷号 <= " & 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

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/3/3 11:17:00 [只看该作者]

高效流水账,代码怎么改?因为一年下来,几万行数据,用sum计算余额,担心会比较慢

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


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/3 11:45:00 [只看该作者]

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("科目") & "'", "日期, 借贷号")
        If dr("_Identify") = mr("_Identify") 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 & "'", "日期, 借贷号")
            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

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


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2017/3/3 14:19:00 [只看该作者]

"日期, 借贷号",是指先按日期,再按借贷号排序?如果想日期正序,借贷号倒序,是不是写成“日期, 借贷号 desc

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/3 17:58:00 [只看该作者]

以下是引用szsmall在2017/3/3 14:19:00的发言:
"日期, 借贷号",是指先按日期,再按借贷号排序?如果想日期正序,借贷号倒序,是不是写成“日期, 借贷号 desc

 

嗯嗯,是的,如果还有问题,截图说明。


 回到顶部
总数 25 上一页 1 2 3