以文本方式查看主题 - 易表在线答疑 (http://egrid2000.com/dvbbs/index.asp) -- 用户社区 (http://egrid2000.com/dvbbs/list.asp?boardid=2) ---- [求助]新手求教统计库存的问题 (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=3392) |
-- 作者:yrjc5 -- 发布时间:2006/8/23 22:23:00 -- [求助]新手求教统计库存的问题 我在统计库存时速度很慢 请文有更快更好的方法吗?我是按众恒进销存做的 |
-- 作者:喜爱易表 -- 发布时间:2006/8/23 22:25:00 -- 速度快慢,跟表中公式的多少,公式设置的复杂与否,表中数据的量大小有直接的关系,可以先自查一下,看看这几方面有没有可以优化的地方。 |
-- 作者:czy -- 发布时间:2006/8/23 22:28:00 -- 众恒进销存是n年前做的,当时的函数没有现在丰富,可以利用现有的函数优化公式。 |
-- 作者:yrjc5 -- 发布时间:2006/8/23 22:29:00 -- [这个贴子最后由yrjc5在 2006/08/23 10:55pm 第 1 次编辑] 我的公式如下请指教: delfor(gridname) and selectfill("入库明细","商品代码","商品代码") and selectfill("出库明细","商品代码","商品代码",2) and DelReptRows("进销存","商品代码") And SetColFormula(GridName,"退_数量","") And SetColFormula(GridName,"退_金额","") And SetColFormula(GridName,"次品数量_已理赔","") And SetColFormula(GridName,"次品数量_现存","") And SetColFormula(GridName,"商品类别","[商品代码管理!商品类别]") AndSetColFormula(GridName,"商品名称","[商品代码管理!商品名称]") And SetColFormula(GridName,"花纹规格","[商品代码管理!花纹规格]") And SetColFormula(GridName,"商品规格","[商品代码管理!商品规格]") And SetColFormula(GridName,"存_数量","SumFor(""入库明细"",""入库数量"",""商品代码"" ,""="" ,[商品代码]) - SumFor(""出库明细"",""出库数量"",""商品代码"" ,""="" ,[商品代码],""出库用途"", ""<>"" ,""质量冲红"",""出库用途"", ""<>"" ,""质量商品出库"")")and SetVariable("%表位置数%",1)And SetLabel("表@","") And SetLabel("标题@","正在统计"+GridName+"表,请稍候…")ANDSetVariable("%开始行数%",1) And SetVariable("%字符数%",1) And Loop("[%字符数%] <= 20 And [%表位置数%]<Grids+10","if(Int(Countfor(GridName)/ 20) <= 1,SetVariable(""%结束行数%"",2), SetVariable(""%结束行数%"",Int(Countfor (GridName )/20)+1))And RecalcRow(GridName,[%开始行数%],[%开始行数%]+[%结束行数%]) And SetVariable(""%百分%"", Int([%字符数%] * 100 / 20) )And SetLabel(""表%"",TEXT([%百分%])+""%"") And SetLabel(""表@"",Rept(""■"",[%字符数%])) And SetVariable(""%开始行数%"",[%开始行数%]+[%结束行数%]) And SetVariable(""%字符数%"",[%字符数%]+1) ") And IF([%表位置数%]>=Grids+10,SetLabel("标题@"," 当前计算已停止!"), SetLabel("标题@","统计"+GridName+"完毕!")) AndSetVariable("%表位置数%",-1) and delfor(gridname,"商品代码","=","") And DelFor("进销存","商品类别", "=" ,"") And SortCol("进销存","商品名称",2) And SortCol("进销存","商品类别",2) And subtotal("商品名称","进_数量,销_金额,销_数量,存_数量","2,2,2,2",0) and msgbox("计算完成!",0) |
-- 作者:易表小虫 -- 发布时间:2006/8/23 23:01:00 -- 呵呵,这么复杂的公式速度怎么快得了,你可以做几个按钮把统计功能分解开来,Loop句也建议去掉 |
-- 作者:czy -- 发布时间:2006/8/23 23:08:00 -- 公式可优化的可能性不是太大,清除数据可以用ClearGrid,数据量大时比delfor快n倍。 问题最大处是在RecalcRow,用loop重算指定行是相当耗时的,没看到文件不知有无优化的可能。 |
-- 作者:yrjc5 -- 发布时间:2006/8/23 23:23:00 -- 因为运算时间长所以加上了走式条形式,不让别人以为死机了。去掉RecalcRow,loop后有别的办法吗? |
-- 作者:易表小虫 -- 发布时间:2006/8/23 23:29:00 -- 在进销存中,库存通常是即时计算的(在出库数量列中使用操作公式),就是说,现库存在系统中有现成的数据,只要调用就行了,如果是这样,那统计速度是不用耗时的 |
-- 作者:yrjc5 -- 发布时间:2006/8/23 23:36:00 -- 谢谢8楼的兄弟。可我要所以的商品的库存出个库存表怎么办? |
-- 作者:家明 -- 发布时间:2006/8/23 23:42:00 -- 眼睛都看花了,虽然是易表,我想书写语句还是按标准的高级语言来写法来比较好。 分行 分层 语句递推的格式: 比如 a=1 b=1 c=a+b 这样好看易懂些。 |