Crystal Reports - 访问查询返回的所有行,而不是一次访问一行

问题描述 投票:0回答:1

我使用的是 Crystal 2020,我有两个表,osEntity 和 osCommunication,可以在 osCommunication.fkosEntity=osEntity.PK 上连接。 osCommunication 包含 osEntity 中客户的电话号码,每个客户可以有多个电话号码,因此自然这意味着某些记录如下所示:

Name            Phone
John Smith      555-555-5555
John Smith      555-555-3333

但我希望它在我的报告中看起来像这样:

Name            Phone
John Smith      555-555-5555, 555-555-3333

我尝试通过创建一个子报告并将外部报告中的 osEntity.PK 链接到子报告中的 osCommunication.fkosEntity 来实现此目的,然后创建一个循环遍历 osCommunication.information(包含电话号码的字段)的公式,以像这样连接它们,

stringvar array numbers := {osCommunication.Information};
numbervar cnt := count(numbers);
stringvar out := "";
numbervar i;

for i := 1 to cnt - 1 step 1 do (
    out := out + numbers[i] + ", ";
);
out := out + numbers[cnt];
out

问题是 Crystal 一次只允许我访问一行,所以这个公式产生的结果更像是 5, 5, 5, -, 5, 5, 5, -, 5, 5, 5, 5 而不是555-555-5555、555-555-3333。有没有一种方法可以让我一次访问 osCommunication 查询返回的所有行,而不是一次访问一行?我之前已经用用户输入的参数做过类似的事情,但我很难对查询结果做同样的事情。任何帮助将不胜感激,谢谢。

crystal-reports
1个回答
0
投票

按客户分组。 在组标题中,使用公式重置全局字符串变量。

Global Stringvar Phones := "";

在详细信息部分,将电话号码连接到全局变量:

Global StringVar Phones := Phones + {Customer.Phone} + ", " ;

在组页脚中,使用公式去掉最后一个逗号,并显示电话号码:

Global StringVar Phones;
IF Len(Phones) > 2 Then Phones := LEFT(Phones, Len(Phones) - 2);
Phones;
© www.soinside.com 2019 - 2024. All rights reserved.