以文本方式查看主题

-  易表在线答疑  (http://www.egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://www.egrid2000.com/dvbbs/list.asp?boardid=2)
----  当前表的某列计算用什么函数合适?  (http://www.egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=19188)

--  作者:sqhht
--  发布时间:2010/3/27 18:20:00
--  当前表的某列计算用什么函数合适?
想重新计算当前表的“库存”列,用进货数量减去销售数量。我在窗口中设定按钮,按钮公示如下:
evalfor(gridname,"库存","round(sumfor(""进货明细库"",""进货数量_公斤"",""仓库"",""="",""商品库"",""存盘"",""="",-1)-sumfor(""销售明细库"",""销售数量_公斤"",""仓库"",""="",""商品库""),1)")

可以正常计算。

我的问题:有没有函数或者在以上的基础上,只替换当前行的“库存”列,不是把整个表的“库存”列都计算(替换)?不在“库存”列设定刷新公式!


--  作者:程兴刚
--  发布时间:2010/3/27 21:28:00
--  
将evalfor里面的计算公式修改后改放在库存列的刷新公式中!
--  作者:sqhht
--  发布时间:2010/3/27 22:22:00
--  
不向设置刷新公式!
要是设置刷新公式,入关联表的数据时,计算太慢。

还有其他的方法吗?最好点击按钮时,计算一次,放在当前行的“库存”列!


--  作者:程兴刚
--  发布时间:2010/3/28 1:22:00
--  
真难理解,直接用刷新公式计算当前行指定列和手工每次点击按钮到底哪一个更方便快捷,楼主三思!
--  作者:sqhht
--  发布时间:2010/3/28 8:17:00
--  
关键是在窗口中,录入关联表的数据较多,如果输入一行,就自动计算一次,影响录入速度。所以想在关联表的数据录入完以后,点击计算。
--  作者:wjq1072
--  发布时间:2010/3/28 8:35:00
--  
RecalcRow()
重算指定表中的指定行。

RecalcRow(Grid,StartRow,EndRow,Option)
Grid         指定表,可以用表名表示,也可以用位置表示。
StartRow     开始行
EndRow       结束行
Option       可选参数,如果设为1,将忽略操作公式,仅仅重算刷新公式和单元格公式。通常应该将Option参数设为1,以便提高计算速度。

例如:
RecalcRow(GridName,Row,Row,1)
重算当前表的当前行,忽略操作公式

RecalcRow(GridName,1,Rows)

重算当前表的所有行,包括操作公式。

RecalcRow("订单明细",[订单明细!Row],[订单明细!Row],1)
重算订单明细表的当前行,忽略操作公式。


--  作者:sqhht
--  发布时间:2010/3/28 10:21:00
--  
上面的这个是把整行都计算了!

是不是Replacefor()函数可以使用?如果指定计算当前行,命令怎样写!?

替换指定表的某一列,可以指定替换条件
Replacefor(Grid,Col,NewValue,CompareCol,CompareMode,CompareValue,......)
Grid         替换该表中的某一列,可以用表名表示,也可以用位置表示。
Col          替换该列,可以用列名称表示,也可以用位置表示。
NewValue     替换值
CompareCol   进行比较的列,可以用列名称表示,也可以用位置表示。
CompareMode 比较方式,包括=、>、<、>=、<=、<>、Like、Instr共8种比较方式。
CompareValue 比较值

例如:
Replacefor("订单明细","折扣",0.08, "产品","=","PD01")
将订单明细表中产品为PD01的订单的折扣替换为0.08


--  作者:sqhht
--  发布时间:2010/3/28 10:31:00
--  
ReplaceFor("销售库",sumfor("进货明细库","进货数量_公斤","仓库","=","商品库","存盘","=",-1)-sumfor("销售明细库","销售数量_公斤","仓库","=","商品库"),"单据号","=",[单据号])

我用上述公示设置成按钮公示,每行的单据号都是不同的。想用单据号来限制只计算当前行。

没有实现。不会计算。请求给个解释!先谢谢!

-=-=-=- 以下内容由 sqhht2010年03月28日 10:38am 时添加 -=-=-=-
ReplaceFor("销售库","库存",round(sumfor("进货明细库","进货数量_公斤","仓库","=","商品库","存盘","=",-1)-sumfor("销售明细库","销售数量_公斤","仓库","=","商品库"),1),"单据号","=",[单据号])

公式是这样的!


--  作者:wjq1072
--  发布时间:2010/3/28 10:38:00
--  
RecalcCell()

重算指定表指定行的指定列

语法
RecalcCell(Grid,Row,Col,Col...,Option)
Grid    指定表,可以用表名表示,也可以用位置表示。
Row     指定行
Col     指定列,可以用列名称表示,也可以用位置表示,可以设置任意多列。
Option  可选参数,设为-1忽略操作公式,仅仅重算刷新公式和单元格公式。
       通常应该将Option参数设为-1,以便提高计算速度。

例如
RecalcCell(Gridname,Row,"结余",-1)
重算当前表的当前行的结余列,忽略操作公式。

RecalcCell("订单",[订单!row],"数量","金额")
重算订单表当前行的数量和金额两列,包括操作公式。


注意,RecalcCell是唯一用-1表示Option参数的函数!


--  作者:sqhht
--  发布时间:2010/3/28 10:52:00
--  
我的按钮公式为:RecalcCell("销售库",[销售库!row],"库存")

“库存”列的操作公式为:sumfor("进货明细库","进货数量_公斤","仓库","=","商品库","存盘","=",-1)-sumfor("销售明细库","销售数量_公斤","仓库","=","商品库")

但是点击按钮后,不会计算!