1

假设我正在编写一份报告,在一个名为someTable.someColumn. 我需要的是拥有 ReportHeader 中的所有值。我知道我可以创建一个子报表,将这一列传递给他们并在细节中对其进行迭代,但我想知道是否可以在没有子报表的情况下做到这一点。

如果我使用以下内容,我会得到正确的结果,在我的例子中是 9:

COUNT(someTable.someColumn)

我也尝试了以下方法,但它不起作用 - 它只随机取 9 个值之一。

Local NumberVar i := 0;
Local StringVar Array items := {someTable.someColumn};
Local StringVar output := "";
while (i < count(items)) do (
  i := i+1;
  output := output + items[i];
);

output;

是否可以遍历列以获取值?

4

2 回答 2

2

您不能在报告标题中执行此操作。您必须使用详细信息部分来读取每个值。

想到的唯一解决方案是使用子报表。虽然你不会pass them this column and iterate it in the details。因为它只会传递列中的第一个值。您可以将报告参数传递给它,它可以用来从数据库中获取列值,就像您的主报告一样。

于 2012-11-29T10:03:47.067 回答
0

我还没有找到在报表页眉中执行此操作的方法,但您可以使用以下公式将其放在报表页脚中:

global StringVar output;
output := output + {someTable.someColumn} + ",";

这将在报告生成过程中每次someTable.someColumn更改时执行,并将其附加到全局变量中。不幸的是,它不会使所有实例都保持最新 - 例如,如果您将其包含在某处的报告详细信息中,您将能够看到output报告过程中的演变。在标题中,它只会显示第一个值。

注意:您不想output := ""在此公式中进行设置,因为每次都会重置该值。不过,Crystal 似乎在创建变量时会自动为您初始化变量,并且仅使用上述公式我没有遇到任何错误(即,我不需要创建第二个公式来初始化output)。我还包括一个分隔符 ( + ","),以帮助分隔每个值,但您可以轻松地将其删除。

于 2012-12-07T20:45:58.590 回答