当详细信息中不仅包含指定参数时,显示所有详细信息

时间:2014-05-14 18:56:01

标签: crystal-reports crystal-reports-2008

标题可能有点长/混乱,可能会产生误导,所以让我设置方案。

Columns - {Table.FruitDesc} {Table.FruitColor} {Table.FruitQty}

GH1a    | Basket 1                  |
GH1b    | Fruit      | Color  | Qty |
GH1c    |------------|--------|-----|
Details | Strawberry | Red    |  3  |
  ...   | Apple      | Green  |  1  |
  ...   | Banana     | Yellow |  9  |

<new set>

GH1a    | Basket 2                  |
GH1b    | Fruit      | Color  | Qty |
GH1c    |------------|--------|-----|
Details | Kiwi       | Green  |  1  |
  ...   | Grape      | Purple |  7  |
  ...   | Plum       | Red    |  2  |

<new set>

GH1a    | Basket 3                  |
GH1b    | Fruit      | Color  | Qty |
GH1c    |------------|--------|-----|
Details | Apple      | Green  |  8  |
  ...   | Kiwi       | Green  |  5  |

现在让我说我有一个参数{?Fruit},我用它来显示所有可能的水果列表。

我想将该参数传递给报告,并让它返回包含指定水果的篮子中的所有水果。

类似于:{?Fruit} IN {Table.FruitDesc} - 这不起作用。

如果我选择Apple {?Fruit}我希望它返回Basket 1Basket 3的所有结果,而不仅仅是Basket 1和{{} 1}}在细节中只显示Basket 3行,因为这会甩掉篮子大小的总计。

换句话说 - 我正在寻找包含Apple的所有篮子以及他们的ACTUAL大小及相关内容。

希望我能很好地解释自己。

2 个答案:

答案 0 :(得分:0)

您的要求是simple,但实施是单调乏味的任务

我的方法是:

  1. 请勿在记录排序专家中使用{?Fruit} IN {Table.FruitDesc},因为这会根据您的要求产生错误的结果......

  2. 根据您的要求,您需要将Fruit的所有值存储在数组中,如下所示。 Creata公式@Add

    Shared StringVar Array x;
    
    x:=x+Fruit;
    1
    

    将上面的公式放在详细信息部分的最右边...并压制它。

  3. 现在转到GH1aGH1bGH1cDetails的专家部分并编写一个简写公式,以便在{?Fruit}时在数组中然后是dont supress,如果不存在supress

    EvaluateAfter{@Add};
    Local NumberVar i;
    Local BooleanVar a;
    Shared StringVar Array x;
    for i:=0 to count(x) do
    (
    if x[i]={?Fruit}
    then 
    a:=true
    else 
    a:=false
    );
    
    if (a=true)
    then false    //if true then don't supress.. here true means value in array
    else true     //if true then supress.. here false means value is not in array
    
  4. 如果{?Fruit}未在列表中退出,上面的公式将会显示将显示

答案 1 :(得分:0)

您可以通过创建公式(常规公式而非记录选择公式)来执行此操作,如:

// {@MatchFruit} formula
if {?Fruit} in {Table.FruitDesc} then 1 else 0

如果此公式的总和等于0,那么您需要做的就是压制您的组。换句话说,如果篮子中没有水果与参数匹配,则取消组:

// Suppression formula for your Basket group
if sum({@MatchFruit},{Table.BasketID})=0