易表在线答疑技术与交流用户社区 → [求助]SetLabel()和Sumfor)、CountFor()好象嵌套在一起会出问题


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

主题:[求助]SetLabel()和Sumfor)、CountFor()好象嵌套在一起会出问题

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


加好友 发短信
等级:论坛游民 帖子:114 积分:93 威望:0 精华:0 注册:2006/8/16 19:08:00
[求助]SetLabel()和Sumfor)、CountFor()好象嵌套在一起会出问题  发帖心情 Post By:2006/8/17 20:11:00 [只看该作者]

易表使用指南中写到:
SetLabel("本月合计",Sumfor(Gridname,"数量","月份","=", Month(Today())))
在"本月合计"标签位置显示本月数量之和。

可是SetLabel()和Sumfor)、CountFor()好象嵌套在一起会出问题,请高手指教。
[UploadFile=1D51FD1CA1BD1B11_1155816645.png]


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


加好友 发短信
等级:超级版主 帖子:8672 积分:1734 威望:0 精华:0 注册:2006/8/11 10:52:00
  发帖心情 Post By:2006/8/17 20:21:00 [只看该作者]

设表达式变量%a%:Sumfor(Gridname,"数量","月份","=", Month(Today()))
公式变为:SetLabel("本月合计",[%a%])

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


加好友 发短信
等级:超级版主 帖子:2320 积分:350 威望:0 精华:0 注册:2006/8/11 10:55:00
  发帖心情 Post By:2006/8/17 20:32:00 [只看该作者]

函数嵌套问题
易表中很多函数是不能互相嵌套使用的,包括所有的表格函数、中文转换函数,个别字符函数和日期函数。
先看看这个例子:
CUnumber(Sumfor("订单明细","金额","订单号","= ",[订单]))
这个公式是不能得到任何结果的,因为CUnumber是不能和Sumfor嵌套的,那么怎样解决这个问题呢?有两个方法:

1、使用中转列
我们增加一个中转列,将其刷新公式设为:
Sumfor("订单明细","金额","订单号",= ,[订单]))
为了不影响使用,可以将这个中转列隐藏起来。
最后将原来的公式:
CUnumber(Sumfor("订单明细","金额","订单号","= ",[订单]))
改为:
CUnumber([中转列名称])

2、使用表达式变量
在“文件”菜单上,单击“变量设置”,增加一个变量,姑且命名为%金额%,将其类型设为表达式(切记),内容设为:
Sumfor("订单明细","金额","订单号",= ,[订单]))
最后将原来的公式:
CUnumber(Sumfor("订单明细","金额","订单号","=",[订单]))
改为:
CUnumber([%金额%])
从本例可以看出,表达式变量除了用来解决嵌套问题外,还可以用来简化表达式。

3、使用SetVariable函数
可以利用SetVariable函数将表达式的值保存在某个变量中,例如:
SetVariable("%A%",Sumfor("订单明细","金额","月份","=",1)) And AddRow(GridName,"月份,数量",1,[%A%])

4、那些函数不能互相嵌套
凡是不能互相嵌套的函数,本帮助文件均用红色星号标记出,例如下图中,Instr是不能嵌套的,但是Search和Substitute是可以嵌套的。
[UploadFile=qiantao_1155818070.gif]


所谓不能嵌套,只是这类函数相互之间不能嵌套,但是这些不能互相嵌的套函数可以和其他函数互相嵌套,例如:
Round(Sumfor("订单明细","金额","订单号","= ",[订单]),2)
这个表达式完全可以得到正确的结果。

需要注意的是,第二种和第三种方法并不是总是可行的,所以如果其中一种方法不可靠,你可以尝试另一种方法


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


加好友 发短信
等级:论坛游民 帖子:114 积分:93 威望:0 精华:0 注册:2006/8/16 19:08:00
  发帖心情 Post By:2006/8/17 20:36:00 [只看该作者]

谢谢 smileboy  !
明天到单位用上。
和同事说起论坛的反馈速度,他觉得不可思议。

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


加好友 发短信
等级:论坛游民 帖子:114 积分:93 威望:0 精华:0 注册:2006/8/16 19:08:00
  发帖心情 Post By:2006/8/17 20:43:00 [只看该作者]

建议仔细修订易表使用指南。我等菜鸟是照猫画虎,猫要是2条尾巴,虎会画成妖怪的,说个笑话,别生气。

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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2006/8/17 20:58:00 [只看该作者]

呵呵,应该建议多看看帮助才是正道。

这是帮助中的一段话。

一个麻烦问题
前面提到用SetVariable 可以动态修改变量的值,但是如果该函数的第二个参数是表达式,那么在一些特定场合下可能导致非法操作,使得系统崩溃,例如运行下面的公式,就有可能导致这种情况的出现:
Setvariable("%PD01%",Sumfor(Gridname,"数量","产品","=","PD01"))

那么怎样解决这个问题呢,很简单,我们首先增加一个变量,姑且命名为%A%,然后将该变量的类型设为表达式,将其内容设为:
Sumfor(Gridname,"数量","产品","=","PD01"))
变量设置图示:
[UploadFile=1CE1DE1B11EA1CC1_1155819486.bmp]

最后将原公式改为:
Setvariable("%PD01%",[%A%])

上述方法对于Setlabel同样有效。


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


加好友 发短信
等级:论坛游民 帖子:114 积分:93 威望:0 精华:0 注册:2006/8/16 19:08:00
  发帖心情 Post By:2006/8/17 22:29:00 [只看该作者]

公式生成器的示例
SetLabel("本月合计",Sumfor(Gridname,"数量","月份","=", Month(Today())))
在"本月合计"标签位置显示本月数量之和。
与易表使用指南一致。
照搬公式生成器的示例不成,查看易表使用指南,两者一样,原来这是“一个麻烦问题”。


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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2006/8/17 22:32:00 [只看该作者]

这个问题之所以麻烦,是因为造成这种错误因机而异,同样的公式在有的机子上不会有问题,而在另一些机子上却碰都不能碰。

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


加好友 发短信
等级:论坛游民 帖子:114 积分:93 威望:0 精华:0 注册:2006/8/16 19:08:00
  发帖心情 Post By:2006/8/17 23:46:00 [只看该作者]

下面引用由czy2006/08/17 10:32pm 发表的内容:
这个问题之所以麻烦,是因为造成这种错误因机而异,同样的公式在有的机子上不会有问题,而在另一些机子上却碰都不能碰。

在一个机子上,在只有这个表的测试文件中运行正常,窗口模版用到正式文件中就出问题了,着了一天急,原来如此。
好象一些问题在表少数据少的文件里没毛病,到表多数据的文件里就闹故事,我有一个文件在某个操作下100%出2007错误,删了无关的表和数据,想发到论坛上讨教,又平安无事了。
无论如何,这个文件做好了老六会有银子收的,希望大家心情好。

 回到顶部