将多值参数连接到子报表

时间:2013-11-22 12:51:25

标签: parameters crystal-reports parameter-passing crystal-reports-xi subreports

我有一份水晶xi报告,主要报告和许多子报告。

我已将所有子报告链接到2个参数,这些参数非常适合各个标准匹配,但是我现在需要能够为我可以设置的参数之一选择多个条件,但它不是将详细信息传递给子报告。

这是我目前在主要报告记录选择中的内容

{Communication.Comm_Status} = "Complete" and
isnull ({Communication.Comm_Deleted}) and
{Communication.Comm_Action} = "PhoneOut" and
{Communication.comm_Result} in ["0", "1", "2"] and
not ({Communication.Comm_UpdatedBy} in [30, 33, 59]) and
{Communication.Comm_DateTime} in LastFullWeek and
{Territories.Terr_Caption} = {?Client} and
{Company.comp_campaign} = {?Campaign}

这就是我在子报告记录选择中的含义

isnull ({Communication.Comm_Deleted}) and
{Communication.Comm_Status} = "Complete" and
{Territories.Terr_Caption} = {?Pm-Territories.Terr_Caption} and
{Territories.Terr_Caption} = {?Pm-Territories.Terr_Caption} and
{Communication.comm_Result} in ["0", "1", "2", "3", "4"] and
not ({Communication.Comm_UpdatedBy} in [30, 33, 59]) and
{Communication.Comm_DateTime} in LastFullWeek and
{Company.comp_campaign} = {?Pm-Company.comp_campaign}

我想我最理想的是参数2中的'='parameter1和'contains'

我试图搜索决议,但我不知道我应该寻找加入的条款;多值参数或其他什么?

提前感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我在你的例子中不太确定哪个参数是哪个,但你可以这样做:

({tableName.tableField} = {?parameter1} AND
InStr({tableName.tableField}, {?parameter2}) > 0)

这将确保您的字段等于参数1并且该字段中包含参数2。如果字段是不同的数据类型,则可能需要将字段转换为字符串。

编辑:

对不起,我想我没有100%关注这个问题。如果你有一个多值参数,那么你必须把它当成一个数组(这就是你原始公式出错的原因)。为了循环遍历数组,您需要创建一个如下公式:

 WhilePrintingRecords;
 numbervar x := 1;
 numbervar y := 0;

 while x <= ubound({?Campaign})

 do
 (if instr({Company.comp_campaign},{?Campaign}[x],1) > 0
 then y := y + 1;
 x := x + 1);

 y

编辑:

 WhilePrintingRecords;
 stringvar array campaign := {?Campaign};
 numbervar x := 1;
 numbervar y := 0;

 for x := 1 to ubound(campaign)
 do
 (if instr({Company.comp_campaign},{?Campaign}[x],1) > 0
 then y := y + 1;
 x := x + 1);
 y

然后在您的记录中选择您需要检查公式&gt; 0