以文本方式查看主题

-  易表在线答疑  (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
  这样好看易懂些。