Crystal Reports Row Counter没有为空结果集提供结果



我正在编辑其他人开发的水晶报告。我对水晶的工作不太熟练,所以我希望有人能在这里发现我出错的地方。

我们正在使用 Crystal Reports 2008

该报告在子报告中具有查询,该查询与一组行匹配某些条件,然后计算匹配特定公式的返回行的数量。匹配行将将g_bIsMatching设置为true。

排计数是通过看起来像这样的公式来增加的:

// Counter Increment
WhilePrintingRecords;
shared NumberVar s_lMatchCount;
global BooleanVar g_bIsMatching;
if g_bIsMatching
then
    s_lMatchCount := s_lMatchCount + 1;
"The count of matched rows is now " & totext(s_lMatchCount, "#") & "."

有另一个公式在打印记录后返回共享计数器值。这用于将匹配的行计数从子报告传递回父报告。这是其原始的,非常简单的定义(在我自己的更改之前):

// Total Count
shared NumberVar s_lMatchCount;
s_lMatchCount

但是,该报告必须整整一年,并且当前的数据库系统尚未安装那么长时间。结果,我不得不合并传统系统中的一些数据。我没有尝试将旧数据集成到数据库中,而是创建了一些参数,使用户可以在运行报告时提供旧数据。我将适当参数的值添加到总计中。这更改了最终公式,使得这样:

// Total Count
shared NumberVar s_lMatchCount;
// Add legacy data, which is supplied in parameters, a different one for each month.
if {EPISODE.END_DATE} >= #1/1/2012# and {EPISODE.END_DATE} < #2/1/2012# then
s_lMatchCount := s_lMatchCount + {LegacyCount_2012_01};
if {EPISODE.END_DATE} >= #2/1/2012# and {EPISODE.END_DATE} < #3/1/2012# then
s_lMatchCount := s_lMatchCount + {LegacyCount_2012_02};
// and so on for a bunch of other months...
s_lMatchCount

当有主要数据库返回结果时,这对我有用。但是,当主数据库根本没有返回行时,应该显示s_lMatchCount的框为空白。

我的值的数据范围应在此处触发if子句,但没有;相反,我根本没有结果。

我已经尝试了"总计数"公式的许多变体,以使其至少显示某种默认值,但是无论我做什么,我都没有结果;这使我认为它根本没有运行。

即使结果集的行零行?

,我如何获得S_LMatchCount的值

我要去哪里?我可以在这里更改一些小事情,还是我要违反了水晶报告的基本限制,这些报告与我用来获得此行计数的方法相冲突?

在我了解问题以下问题的程度上。

在所有 If语句的末尾写入linw。

其他 s_lMatchCount=0

OR

Else If ISNULL({LegacyCount_2012_02})
Then s_lMatchCount=0

我最终弄清楚了我上面描述的报告中出了什么问题。

计算s_lMatchCount的总计数公式使用一堆看起来像这样的语句:

if {EPISODE.END_DATE} >= #1/1/2012# and {EPISODE.END_DATE} < #2/1/2012# then

这些语句参考数据库中的列{EPISODE.END_DATE}。如果没有数据库回来的数据,那么显然这是没有用的。我对正在发生的事情的理解是,此参考是在处理行时要评估的公式,这意味着由于没有行,因此根本不会处理。

我能够通过用参数参考替换数据库的日期来解决问题。

最新更新