Foxtable(狐表)用户栏目专家坐堂 → 关于财务帐的余额问题


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

主题:关于财务帐的余额问题

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


加好友 发短信
等级:童狐 帖子:291 积分:4470 威望:0 精华:0 注册:2012/6/24 9:08:00
关于财务帐的余额问题  发帖心情 Post By:2012/9/10 9:32:00 [只看该作者]

我做了一个财务小系统,其中有一个表为“记帐凭证明细表”用于存储所有记帐凭证的详细内容,表内有18000余行记录。另一个为“明细帐表”用于从“记帐凭证表”中提取某往来单位的相关往记录,表中有一“余额”列,用于计算往来帐的及时余额,某一单位往来有5500余行,计算时间用了大约6-7分钟。太慢了!

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


加好友 发短信
等级:童狐 帖子:291 积分:4470 威望:0 精华:0 注册:2012/6/24 9:08:00
  发帖心情 Post By:2012/9/10 9:42:00 [只看该作者]

DataColChanged事件设为:

If e.DataCol.Name = "日期" Then
      For Each dr As DataRow In e.DataTable.Select("[_SortKey] >= " & e.DataRow("_SortKey"))
            Dim Val1 As Double = e.DataTable.Compute("Sum(借方金额)","[_SortKey] <= " & dr("_SortKey"))
            Dim Val2 As Double = e.DataTable.Compute("Sum(贷方金额)","[_SortKey] <= " & dr("_SortKey"))
            dr("余额") = Val1 - Val2
        Next

End If

按钮的代码为:

If MainTable.Name = "金额明细帐" Then
    Dim f As New Filler
    DataTables("金额明细帐").DataRows.Clear() '清除原有数据
    f.SourceTable = DataTables("凭证库")
    f.SourceCols = "日期,凭证号,摘要,借方数量,借方金额,贷方数量,贷方金额"
    f.DataTable = DataTables("金额明细帐")
    f.DataCols = "日期,凭证号,摘要,借方数量,借方金额,贷方数量,贷方金额"
    f.Filter = ("[子目] = '"& vars("dwmc") & "'")
    f.Fill()
End If
If MainTable.Name = "金额明细帐" Then
    DataTables("金额明细帐").DataCols("借方数量").RaiseDataColChanged()
End If
With DataTables("金额明细帐")
    .DataCols("日期").RaiseDataColChanged(.DataRows(0))
End With


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


加好友 发短信
等级:童狐 帖子:291 积分:4470 威望:0 精华:0 注册:2012/6/24 9:08:00
  发帖心情 Post By:2012/9/10 9:50:00 [只看该作者]

代码中的“dwmc“为一个变量,记录往来单位名称,请高手邦忙。


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


加好友 发短信
等级:童狐 帖子:291 积分:4470 威望:0 精华:0 注册:2012/6/24 9:08:00
  发帖心情 Post By:2012/9/10 10:05:00 [只看该作者]

把下面的代码删后,还需2分多钟

If MainTable.Name = "金额明细帐" Then
    DataTables("金额明细帐").DataCols("借方数量").RaiseDataColChanged()
End If


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/9/10 10:06:00 [只看该作者]

DataColChanged事件也在明细表吗?

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


加好友 发短信
等级:童狐 帖子:291 积分:4470 威望:0 精华:0 注册:2012/6/24 9:08:00
  发帖心情 Post By:2012/9/10 10:08:00 [只看该作者]

DataColChanged在金额明细帐中

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/9/10 10:10:00 [只看该作者]

在按钮代码中关闭DataColChanged事件看看能改观多少

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


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

C版说得对,填充数据的时候,关闭DataColChanged事件。
看看:

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

 

[此贴子已经被作者于2012-9-10 13:08:04编辑过]

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


加好友 发短信
等级:童狐 帖子:291 积分:4470 威望:0 精华:0 注册:2012/6/24 9:08:00
  发帖心情 Post By:2012/9/10 15:20:00 [只看该作者]

关闭事件代码后计算时间还需1分52秒,还是有点慢,如果填充数据再大点话,肯定还要再慢很多。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/10 15:50:00 [只看该作者]

看看是不是这个原因:

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

 

 


 回到顶部