以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]重算库存的问题(参考帮助中的 高效率的流水账设计 的案例) (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174342) |
||||||||||||||||
-- 作者:km007 -- 发布时间:2022/1/11 19:24:00 -- [求助]重算库存的问题(参考帮助中的 高效率的流水账设计 的案例) 参考帮助文档中的 高效率的流水账设计 案例 做,在重置 每个产品第一行 入库列 时 耗时非常久,请帮忙看看如何优化,谢谢 以下附件中的案例 ,启动时 先执行了数据分组统计的 启动时要稍微等等
[此贴子已经被作者于2022/1/11 19:27:42编辑过]
|
||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2022/1/11 21:05:00 -- 表事件代码没什么可优化的了。需要从逻辑处理上考虑: 这种是统计表的结果填充的,不应该再调用表事件重置,而是应该根据产品id和日期排好序,直接遍历表按顺序计算即可
|
||||||||||||||||
-- 作者:km007 -- 发布时间:2022/1/11 23:02:00 -- 耗时 3百多 秒 Dim g As New SQLGroupTableBuilder("统计表1", "明细表") g.Connection Name = "ceshi" g.Groups.AddDef("日期", DateGroupEnum.Year, "年份") g.Groups.AddDef("日期", "月份") g.Groups.AddDef("产品id") g.Totals.AddDef("单价", AggregateEnum.Average) g.Totals.AddDef("数量","入库") g.Totals.AddExp("出库","0.00") g.Totals.AddExp("库存","0.00") g.Filter = "year(日期) = \'2021\' and month(日期) in (\'1\',\'2\',\'3\')" Dim dt As DataTable = g.Build(True) dt.DataCols.Add("日期", Gettype(String), "[年份] + SubString(\'00\', 1, 2 - Len(Convert([月份],\'System.String\'))) + Convert([月份], \'System.String\')") dt.ReplaceFor("出库", 1) Dim Products As List(Of String) = dt.GetValues("产品id") For Each Product As String In Products Dim drs As List(of DataRow) = dt.Select("[产品id] = \'" & Product & "\'", "[日期]") drs(0)("库存") = drs(0)("入库") - drs(0)("出库") For i As Integer = 1 To drs.Count - 1 drs(i)("库存") = drs(i-1)("库存") + drs(i)("入库") - drs(i)("出库") Next Next [此贴子已经被作者于2022/1/11 23:03:58编辑过]
|
||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2022/1/12 9:13:00 -- 没有什么优化的余地了。再优化需要从逻辑上优化,比如做年结、季结、月结、..等等 |
||||||||||||||||
-- 作者:狐狸爸爸 -- 发布时间:2022/1/12 15:31:00 -- 改几行代码,就可以提高速度100倍: [此贴子已经被作者于2022/1/12 15:39:48编辑过]
|