Foxtable(狐表)用户栏目专家坐堂 → 汇总求助


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

主题:汇总求助

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2012/8/29 21:35:00 [只看该作者]

以下是引用czy在2012-8-29 20:49:00的发言:

不知我理解的对不对?

 

DataTables("月报表").DataRows.Clear
Dim s As String = e.Form.Controls("月份").Value
If s <> "" Then
    Dim n As Integer = e.Form.Controls("月份").Value
    DataTables("月报表").DataRows.Clear
    Dim Arys As List(Of String())
    Arys = DataTables("入仓").GetUniqueValues("", "型号","规格")
    For Each Ary As String() In Arys
        Dim r As Row = Tables("月报表").AddNew
        r("型号") = Ary(0)
        r("规格") = Ary(1)
    Next
    For Each dr As DataRow In DataTables("月报表").DataRows
        Dim s1 As String = "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "' And 月份 = '" & s & "'"
        Dim s2 As String = "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "' And 月份 < " & n
        Dim Sum,Sum1 As Double
        dr("本月入仓_数量") = DataTables("入仓").Compute("Sum(入仓数量)",s1)
        dr("本月入仓_金额") = DataTables("入仓").Compute("Sum(入仓金额)",s1)
        dr("本月出仓_数量") = DataTables("出仓").Compute("Sum(出仓数量)",s1)
       
        Sum = DataTables("入仓").Compute("Sum(入仓金额)",s2)
        Sum1 = DataTables("入仓").Compute("Sum(入仓数量)",s2)
        dr("上月结存_数量") = Sum1 - DataTables("出仓").Compute("Sum(出仓数量)",s2)
       
        '-----------------------计算上月结存金额
        dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")
        '-----------------------
       
        dr("本月加权平均单价") = (dr("上月结存_金额") + dr("本月入仓_金额"))/(dr("上月结存_数量") + dr("本月入仓_数量"))
        dr("本月结存_数量") = dr("上月结存_数量") + dr("本月入仓_数量") - dr("本月出仓_数量")
       
        dr("本月结存_金额") = dr("本月加权平均单价") * dr("本月结存_数量")
        dr("本月出仓_金额") = dr("本月加权平均单价") * dr("本月出仓_数量")
       
    Next
End If

初步测试,满足要求,我再好好消化代码移植到我的项目.非常感谢CZY.


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/8/30 8:13:00 [只看该作者]

嘿嘿,楼主很幸运,遇到c版

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2012/8/30 10:49:00 [只看该作者]

有一点点缺撼,生成月结表时速度有些慢,几千条记录要好几分钟.


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/8/30 14:24:00 [只看该作者]

效率问题,看看:

http://www.foxtable.com/help/topics/2225.htm

 


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/30 21:18:00 [只看该作者]

这里应该是 Dim r As Row = Tables("月报表").AddNew 引起效率低的原因之一。 可用 StopRedraw 来提高效率。


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2012/8/31 9:33:00 [只看该作者]

关于速度,我屏蔽了如下代码后就很快

        Sum = DataTables("入仓").Compute("Sum(入仓金额)",s2)
        Sum1 = DataTables("入仓").Compute("Sum(入仓数量)",s2)
        dr("上月结存_数量") = Sum1 - DataTables("出仓").Compute("Sum(出仓数量)",s2)       
        '-----------------------计算上月结存金额
        dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")

 

另外,上述代码计算出来的数据与实际帐务数据还是有一点差异.最后一行代码的计算表达式财务有疑义,我将上述几行代码换成如下两行代码


dr("上月结存_数量") = DataTables("入仓").Compute("Sum(入仓数量)",s2) - DataTables("出仓").Compute("Sum(出仓数量)",s2)
dr("上月结存_金额") = DataTables("入仓").Compute("Sum(入仓金额)",s2) - DataTables("出仓").Compute("Sum(出仓金额)",s2)

基本与帐务数据相符,速度也明显快了一点,(3000条记录40秒)但如果是几万行数据不知速度如何


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2012/8/31 11:23:00 [只看该作者]

以下是引用实话实说在2012-8-31 9:33:00的发言:

关于速度,我屏蔽了如下代码后就很快

        Sum = DataTables("入仓").Compute("Sum(入仓金额)",s2)
        Sum1 = DataTables("入仓").Compute("Sum(入仓数量)",s2)
        dr("上月结存_数量") = Sum1 - DataTables("出仓").Compute("Sum(出仓数量)",s2)       
        '-----------------------计算上月结存金额
        dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")

 

另外,上述代码计算出来的数据与实际帐务数据还是有一点差异.最后一行代码的计算表达式财务有疑义,我将上述几行代码换成如下两行代码


dr("上月结存_数量") = DataTables("入仓").Compute("Sum(入仓数量)",s2) - DataTables("出仓").Compute("Sum(出仓数量)",s2)
dr("上月结存_金额") = DataTables("入仓").Compute("Sum(入仓金额)",s2) - DataTables("出仓").Compute("Sum(出仓金额)",s2)

基本与帐务数据相符,速度也明显快了一点,(3000条记录40秒)但如果是几万行数据不知速度如何

后面2行代码有问题,还是C版代码是对的,就是数据量大后速度令人担心


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/8/31 12:13:00 [只看该作者]

3000条记录40秒,这个速度真的很慢,不应该的呀···· 

 

实在不行你就好好学学24楼狐爸给的连接,一定会大幅提高计算速度的。

 

另外,从设计的角度想办法,建立一个所有月份的余额表(很多专业软件都是这样的),这样上月数直接从该表中取数,其他只计算当月的就快了。


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2012/9/1 11:38:00 [只看该作者]

又来求助了.

速度慢的原因已经找到,正象帮助中所描述的"非等于现象",主要用到了"<"月份的代码

        Dim s2 As String = "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "' And 月份 < " & n

        Sum = DataTables("入仓").Compute("Sum(入仓金额)",s2)
        Sum1 = DataTables("入仓").Compute("Sum(入仓数量)",s2)
        dr("上月结存_数量") = Sum1 - DataTables("出仓").Compute("Sum(出仓数量)",s2)       
        '-----------------------计算上月结存金额
        dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")

 

我认真的看过帮助中的"常见效率问题"一章中"非等于比较"部分,但实在搞不定,恳请高手帮助


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/1 14:29:00 [只看该作者]

以下是引用实话实说在2012-9-1 11:38:00的发言:

又来求助了.

速度慢的原因已经找到,正象帮助中所描述的"非等于现象",主要用到了"<"月份的代码

        Dim s2 As String = "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "' And 月份 < " & n

        Sum = DataTables("入仓").Compute("Sum(入仓金额)",s2)
        Sum1 = DataTables("入仓").Compute("Sum(入仓数量)",s2)
        dr("上月结存_数量") = Sum1 - DataTables("出仓").Compute("Sum(出仓数量)",s2)       
        '-----------------------计算上月结存金额
        dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")

 

我认真的看过帮助中的"常见效率问题"一章中"非等于比较"部分,但实在搞不定,恳请高手帮助


如果是这个问题的话,帮你稍微替换了下原先的代码,测试有效,效率自己测试。

Dim s As String = e.Form.Controls("月份").Value
If s <> "" Then
    Dim n As Integer = e.Form.Controls("月份").Value
    DataTables("月报表").DataRows.Clear
    Dim Arys As List(Of String())
    Arys = DataTables("入仓").GetUniqueValues("", "型号","规格")
    For Each Ary As String() In Arys
        Dim r As Row = Tables("月报表").AddNew
        r("型号") = Ary(0)
        r("规格") = Ary(1)
    Next
    For Each dr As DataRow In DataTables("月报表").DataRows
        Dim s1 As String = "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "' And 月份 = '" & s & "'"
        'Dim s2 As String = "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "' And 月份 < " & n
        'Dim Sum,Sum1 As Double

        dr("本月入仓_数量") = DataTables("入仓").Compute("Sum(入仓数量)",s1)
        dr("本月入仓_金额") = DataTables("入仓").Compute("Sum(入仓金额)",s1)
        dr("本月出仓_数量") = DataTables("出仓").Compute("Sum(出仓数量)",s1)
      
        '自己进行统计
        Dim s2 As String =  "型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "'"
        Dim Sum, Sum1, Sum2 As Double
        Sum = 0
        Sum1 = 0
        Sum2 = 0
        Dim drs As List(Of DataRow)
        drs = DataTables("入仓").Select(s2, "月份")
        Dim mdr As DataRow
        For Each mdr In drs
            If mdr("月份") >= s Then
                Exit For
            End If
            Sum = Sum + mdr("入仓金额")
            Sum1 = Sum1 + mdr("入仓数量")
        Next
      
        drs = DataTables("出仓").Select(s2, "月份")
        For Each mdr In drs
            If mdr("月份") >= s Then
                Exit For
            End If
            Sum2 = Sum2 + mdr("出仓数量")
        Next


        'Sum = DataTables("入仓").Compute("Sum(入仓金额)",s2)
        'Sum1 = DataTables("入仓").Compute("Sum(入仓数量)",s2)
        'dr("上月结存_数量") = Sum1 - DataTables("出仓").Compute("Sum(出仓数量)",s2)

        dr("上月结存_数量") = Sum1 - Sum2      

        '-----------------------计算上月结存金额
        dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")
        '-----------------------
      
        dr("本月加权平均单价") = (dr("上月结存_金额") + dr("本月入仓_金额"))/(dr("上月结存_数量") + dr("本月入仓_数量"))
        dr("本月结存_数量") = dr("上月结存_数量") + dr("本月入仓_数量") - dr("本月出仓_数量")
      
        dr("本月结存_金额") = dr("本月加权平均单价") * dr("本月结存_数量")
        dr("本月出仓_金额") = dr("本月加权平均单价") * dr("本月出仓_数量")
      
    Next
End If


 回到顶部
总数 47 上一页 1 2 3 4 5 下一页