以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  流水账  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=152882)

--  作者:lshshlxsh
--  发布时间:2020/7/24 13:38:00
--  流水账
请问怎么设置 日期  科目 增 减 列改变后余额也跟着变  
窗口表
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:流水账.table

按 科目 日期 制单时间排序 


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, 制单时间 desc")
        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 & "\'", "日期 desc , 制单时间 desc ")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[科目] = \'" & e.OldValue & "\'", "[日期] desc, 制单时间 desc")
                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

--  作者:有点蓝
--  发布时间:2020/7/24 13:58:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:流水账.zip


--  作者:lshshlxsh
--  发布时间:2020/7/24 15:41:00
--  

谢谢老师  我对比了一下 这段代码 跟我之前的 貌似一样的  修改日期后 还是不对哦

 


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

[此贴子已经被作者于2020/7/24 15:42:46编辑过]

--  作者:有点蓝
--  发布时间:2020/7/24 15:44:00
--  
Case "科目","增","减","日期"
--  作者:lshshlxsh
--  发布时间:2020/7/24 16:32:00
--  
谢谢老师 这列是加上了 但是  日期改变后 还是错的

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

--  作者:有点蓝
--  发布时间:2020/7/24 16:53:00
--  

[此贴子已经被作者于2020/7/24 16:53:54编辑过]

--  作者:有点蓝
--  发布时间:2020/7/24 17:01: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("科目") & "\'", "日期 desc, 制单时间 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 , 制单时间 desc ")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[科目] = \'" & e.OldValue & "\'", "[日期] desc, 制单时间 desc")
                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
    Case "日期"
        If e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            Dim dr As DataRow
            Dim mr As DataRow = e.DataRow
            Dim drs As List(of DataRow)
            Dim d As Date = e.OldValue
            If e.OldValue > e.NewValue Then d = e.NewValue
            dr = e.DataTable.Find("[日期] < #" & d & "# And [科目] = \'" & mr("科目") & "\'", "日期 desc , 制单时间 desc ")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[科目] = \'" & mr("科目") & "\'", "[日期], 制单时间")
                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
[此贴子已经被作者于2020/7/24 17:02:12编辑过]

--  作者:lshshlxsh
--  发布时间:2020/7/24 17:23:00
--  
谢谢老师  安装您的方法  但是在替换科目的时候还是会错的哦  这两个银行应该都要重新计算的吧

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

[此贴子已经被作者于2020/7/24 17:39:11编辑过]

--  作者:有点蓝
--  发布时间:2020/7/24 17:43:00
--  
知道就自己改改咯,和原来的用法差不多的