以文本方式查看主题

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

--  作者:cd_tdh
--  发布时间:2021/3/25 15:14:00
--  高效流水账

老师,碰到一个类似高效流水账的问题,因为数据是分页加载,当我后面项目用到的数据,没加载,用Select时,用上一个项目的数据用不了,这种怎么处理呢?

Select Case e.DataCol.Name
    Case
"收入",
"支出"
   
    Dim dr As DataRow
       
Dim drs As List(of DataRow)
        dr = e.
DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") \'找出上一行
       
If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行
            e.
DataRow("余额") = e.DataRow("收入") - e.DataRow("支出")
            dr = e.
DataRow
       
End If
        drs = e.
DataTable.Select("[_SortKey] > = " & dr("_SortKey"), "[_SortKey]")
        For
i As Integer = 1 To drs.Count - 1
\'重算余下行的余额
            drs(i)(
"余额") = drs(i-1)("余额") + drs(i)("收入") - drs(i)("支出")
        Next   
End
Select


--  作者:有点蓝
--  发布时间:2021/3/25 15:24:00
--  
http://www.foxtable.com/webhelp/topics/2926.htm
--  作者:cd_tdh
--  发布时间:2021/3/25 16:24: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("[_Identify] < \'" & mr("_Identify") &  "\' And [合同编码] = \'" &  mr("合同编码") &  "\'", "[_Identify] Desc")
        If dr Is Nothing Then
            mr("本年完成产值") = mr("上月完成产值")
            mr("累计完成产值") = mr("本年完成产值")
            mr("剩余产值") = mr("合同金额") + mr("变更金额") - mr("累计完成产值")
            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)("累计完成产值") = drs(i-1)("累计完成产值") + drs(i)("本年完成产值")
            drs(i)("剩余产值") = drs(i)("合同金额") + 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
                    mr("本年完成产值") = mr("上月完成产值")
                    mr("累计完成产值") = mr("本年完成产值")
                    mr("剩余产值") = mr("合同金额") + mr("变更金额") - mr("累计完成产值")
                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)("累计完成产值") = drs(i-1)("累计完成产值") + drs(i)("本年完成产值")
                    drs(i)("剩余产值") = drs(i)("合同金额") + drs(i)("变更金额") - drs(i)("累计完成产值")
                Next
            End If
        End If
End Select


--  作者:有点蓝
--  发布时间:2021/3/25 16:30:00
--  
看不出什么问题。测试有什么问题?如果计算不正确,上传实例测试一下,同时说明一下计算逻辑
--  作者:cd_tdh
--  发布时间:2021/3/25 16:48:00
--  

老师,数据结构和效果就这样,我实际数据是分页加载的,有跨年的情况,但是统计本年是指按照上报周期年来统计的。

上报周期的做的年月输入然后合并字符串到上报周期列

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


--  作者:有点蓝
--  发布时间:2021/3/25 16:54:00
--  
无法测试,项目没看到有任何代码,输入3楼代码,提示缺少列。
--  作者:cd_tdh
--  发布时间:2021/3/25 16:59:00
--  
发的文件里面本月完成产值,应该是上月完成产值,列名错了
--  作者:有点蓝
--  发布时间:2021/3/25 17:12:00
--  
以实例数据来说,那个单元格计算有问题?
--  作者:cd_tdh
--  发布时间:2021/3/26 9:52:00
--  

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

老师,

1.累计完成产值还是不对;

2.另外还有一个问题,计算本年的时候,逻辑是1月上报上一年12月,2月上报1月,这样逻辑,计算本年完成产值就是按照上报周期的前4位年来统计

2.实际是分页加载数据的;

[此贴子已经被作者于2021/3/26 9:52:31编辑过]

--  作者:cd_tdh
--  发布时间:2021/3/26 14:21:00
--  
老师,请看看改怎么修改啊