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


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

主题:高效流水账

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
高效流水账  发帖心情 Post By: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


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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By: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


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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/25 16:48:00 [显示全部帖子]

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

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

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


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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/25 16:59:00 [显示全部帖子]

发的文件里面本月完成产值,应该是上月完成产值,列名错了

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/26 9:52:00 [显示全部帖子]

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

老师,

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

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

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

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

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/26 14:21:00 [显示全部帖子]

老师,请看看改怎么修改啊

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/26 16:12:00 [显示全部帖子]

老师,修改了一下,累计对了,但是本年不对,本年至统计上报周期前4位的年度,上报周期是按照年月来编号的

Select Case  e.DataCol.Name
    Case "合同编码","上报周期","上月完成产值","本年完成产值"
        Dim  dr As  DataRow
        Dim  mr As  DataRow = e.DataRow
        'Dim d1 As String = Format(Date.Today,"yyyy")    '1月上报上一年12月,2月上报1月
        'Dim s1 As String = mr("上报周期")
        'Dim d2 As String = s1.SubString(0,4)
        Dim  drs As  List(of DataRow)
        dr = e.DataTable.Find("[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'", "[上报周期] Desc")
        If dr Is Nothing Then
            dr = e.DataTable.SQLFind("[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'", "[上报周期] Desc")
            If dr Is Nothing Then
                'mr("本年完成产值") = e.DataTable.SQLCompute("sum(上月完成产值)","[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'")
                mr("本年完成产值") = e.NewValue
                mr("累计完成产值") = mr("本年完成产值") + mr("上月完成产值")
                mr("剩余产值") = mr("合同金额") + mr("变更金额") - mr("累计完成产值")
                dr = mr
            Else
                mr("本年完成产值") = e.DataTable.SQLCompute("sum(上月完成产值)","[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'")
                mr("累计完成产值") = mr("本年完成产值") + dr("累计完成产值")
                mr("剩余产值") = mr("合同金额") + mr("变更金额") - mr("累计完成产值")
            End If
        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)("累计完成产值") = 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("[上报周期] < '" & mr("上报周期") &  "' And [合同编码] = '" &  mr("合同编码") &  "'", "[上报周期] Desc")
            If  dr Is Nothing Then
                dr = e.DataTable.Find("[上报周期] = '" & e.OldValue &  "'", "[上报周期]")
                If dr IsNot Nothing Then
                    dr("本年完成产值") = e.DataTable.SQLCompute("sum(上月完成产值)","[上报周期] < '" & mr("上报周期") &  "' And [上报周期] = '" &  e.OldValue &  "'")
                    dr("累计完成产值") = dr("本年完成产值")+ dr("上月完成产值")
                    dr("剩余产值") = 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)("累计完成产值") = drs(i-1)("累计完成产值") + drs(i)("上月完成产值")
                    drs(i)("剩余产值") = drs(i)("合同金额") + drs(i)("变更金额") - drs(i)("累计完成产值")
                Next
            End If
        End If
End Select

 


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

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/26 16:50:00 [显示全部帖子]

1.正常情况下,第1次上报时,本年完成产值= 上月完成产值,但有可能他有几个月没报,本年完成产值就需要手动录入,本年完成产值不等于上月完成产值

2.1月上报12月的,我修改了一下表结构,本年对了,累计有不对了。

请老师看看。

 

 

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


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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/29 9:23:00 [显示全部帖子]

老师,我把上报周期年月分两列,写两段S  elect Case ,结果正确了,但是我实际不想把上报周期年月分开,这个怎么修改呢?

 

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

 

就上报周期为202011,202012,202101。。。。。。。

这种怎么判断?

Select Case  e.DataCol.Name
    Case "上报周期","上月完成产值"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim s1 As String = e.DataRow("上报周期").SubString(0,4)
        Dim s2 As String = e.DataRow("上报周期").SubString(4,2)
        Dim drs As List(of DataRow)
        If mr("上月完成产值") <> Nothing Then
            dr = e.DataTable.Find("[合同编码] = '" &  mr("合同编码") & "' and [上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] < '" & mr("上报周期月") &  "'", "[_Identify] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.SQLFind("[合同编码] = '" &  mr("合同编码") & "' and [上报周期年] = '" & mr("上报周期年") &  "' And [上报周期月] < '" & mr("上报周期月") &  "'", "[_Identify] Desc")
                If dr Is Nothing Then
                    mr("本年完成产值") = e.NewValue
                    dr = mr
                Else
                    mr("本年完成产值") = e.DataTable.SQLCompute("Sum(上月完成产值)","[合同编码] = '" &  mr("合同编码") &  "' and [上报周期年] = '" & mr("上报周期年") &  "'")
                End If
            End If
            drs = e.DataTable.Select("[合同编码] = '" &  mr("合同编码") &  "' And [上报周期年] = '" & mr("上报周期年") &  "' And [上报周期月] >='" & dr("上报周期月") &  "'", "[_Identify]")
            For  i As  Integer = 1 To drs.Count - 1
                drs(i)("本年完成产值") = drs(i-1)("本年完成产值") + drs(i)("上月完成产值")
            Next
            If  e.DataCol.Name = "合同编码" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
                dr = e.DataTable.Find("[合同编码] = '" &  mr("合同编码") &  "' And [上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] < '" & mr("上报周期月") &  "'", "[_Identify] Desc")
                If  dr Is Nothing Then
                    dr = e.DataTable.Find("[上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] = '" & mr("上报周期月") &  "'", "[_Identify]")
                    If dr IsNot Nothing Then
                        dr("本年完成产值") = e.DataTable.SQLCompute("Sum(上月完成产值)","[合同编码] = '" &  mr("合同编码") &  "'[上报周期月] = '" & mr("上报周期月") &  "'")
                    End If
                End If
                If  dr IsNot Nothing Then
                    drs = e.DataTable.Select("[合同编码] = '" &  mr("合同编码") &  "' And [上报周期年] = '" & mr("上报周期年") &  "' And  [上报周期月] >=' " & dr("上报周期月") &  "'", "[_Identify]")
                    For i As Integer = 1 To drs.Count - 1
                        drs(i)("本年完成产值") = drs(i-1)("本年完成产值") + drs(i)("上月完成产值")
                    Next
                End If
            End If
        End If
End Select

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

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


加好友 发短信
等级:狐精 帖子:3094 积分:20656 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/3/29 13:39:00 [显示全部帖子]

其实不用那么复杂,直接用sqlFind就,配合排序就可以搞定,之前想得太复杂了,上报后的数据不会删除页不会修改,代码这样就可以了

'计算本年完成产值
Select Case  e.DataCol.Name
    Case "上报周期年","上报周期月","上月完成产值"
        Dim dr As DataRow = e.DataRow
        Dim ds As DataRow
        If dr("上月完成产值") <> Nothing Then
            ds = e.DataTable.SQLFind("[合同编码] = '" &  dr("合同编码") & "' and [上报周期年] = '" & dr("上报周期年") &  "' And [上报周期月] < '" & dr("上报周期月") &  "' And [_Identify] < '" & dr("_Identify") & "'", "[_Identify] Desc")
            If ds Is Nothing Then
                dr("本年完成产值") = e.NewValue
            Else
                dr("本年完成产值") = ds("本年完成产值") + dr("上月完成产值")
            End If
        End If
End Select
'计算累计完成产值及剩余产值
Select Case  e.DataCol.Name
    Case "本年完成产值"
        Dim dr As DataRow = e.DataRow
        Dim ds As DataRow
        If dr("本年完成产值") <> Nothing Then
            ds = e.DataTable.SQLFind("[合同编码] = '" & dr("合同编码") & "' And [_Identify] < '" & dr("_Identify") & "'", "[_Identify] Desc")
            If ds Is Nothing Then
                dr("累计完成产值") = ds("本年完成产值") + dr("上月完成产值")
                dr("剩余产值") = dr("合同金额") + dr("变更金额") - dr("累计完成产值")
            Else
                dr("累计完成产值") = ds("累计完成产值") + dr("上月完成产值")
                dr("剩余产值") = dr("合同金额") + dr("变更金额") - dr("累计完成产值")
            End If
        End If
End Select


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