我在详细信息部分有一个记录集
示例:
Column1----Column2
value_1----5678976
value_2----7263535
value_1----1938773
value_2----3333445
value_3----2848465
因此,在报告标题中,我需要指定Column1中所有不同的值,以逗号分隔。从提到的示例中,正确的字符串将是:
value_1,value_2,value_3
我尝试使用公式
WhilePrintingRecords;
shared stringvar final_result;
shared stringvar current_value;
if len(final_result) = 0 then final_result = "";
current_value:= {Column1};
final_result := final_result+ "," + current_value;
这不起作用
尝试过不同的
WhilePrintingRecords;
stringVar final_result := "";
final_result = final_result + (
if InStr(final_result, {Column1}) > 0 then ""
else final_result := "," + {Column1};
);
也没有结果。 我哪里出错?
由于
答案 0 :(得分:1)
为了使公式显示任何内容,您需要在声明它们之后调用它们。 所以你的公式看起来应该更像这样:
WhilePrintingRecords;
shared stringvar final_result;
shared stringvar current_value := {Column1};
if len(final_result) < 1 then final_result := {Column2};
final_result + ", " + current_value
问题是,由于公式位于报表头中,因此您只能获得一条记录。如果您创建了一个数组并尝试在报表标题中显示它,也会发生同样的情况。我认为您最好的选择是创建一个子报表,然后将其显示在报表标题中。
干杯,
克里斯
编辑:这花了我一段时间,但我想我终于明白了。关键是WhileReadingRecords和WhilePrintingRecords之间的区别。您需要在读取记录时填充第一个公式,这将确保当您实际显示数据(WhilePrintingRecords)时,Header中的公式中包含要显示的内容。所以这里: 公式1(详细信息部分):WhileReadingRecords;
stringvar array a;
numbervar i;
if not({Column1} in a) then
(
i := i + 1;
redim preserve a[i];
a[i] := {Column1};
);
a[i]
公式2(放在报表头中):
WhilePrintingRecords;
stringvar array a;
stringvar fin;
numbervar j;
for j := 1 to ubound(a) do
(
fin := fin + a[j] + ", ";
)
fin
希望现在有效。 -Chris
答案 1 :(得分:0)
在Chris的第二个公式中只有一个小语法错误。分号应在FOR循环的右括号后向下移动一行,因此最后三行应为:
fin := fin + a[j] + ", "
);
fin