基于有条件可用的指定列的值,Crystal Reports 2016交叉表抑制行

时间:2018-10-25 13:19:00

标签: crystal-reports

我有一个像这样的交叉表

    Col1 Col2 Col3
Row1   1    0    1
Row2   0    1    1
Row3   1    0    0
Row4   0    0    1

这是为了在仓库和销售点之间移动库存。因此,如果第1列显示仓库的库存,而第2列和第3列是出口,则第2行和第4行的产品不可用,并且不应显示行。

但是,如果Col1和Col2是仓库,而Col3是出口,则仅第4行不可用,因此应予以禁止。

仓库的ID小于X,而商店的ID大于X。我发现了这个solution,并尝试通过使用代码来应用它:

If {Stock}=0 and {VENUE_ID} < X Then
  {%DB_NULL}
Else
  {Stock}

但是该代码仅适用于VENUE_ID小于X的Stock。因此,仅当所有Stock值都等于0时,行才被禁止。 如果有一种方法可以使一行中的所有单元格都显示0值,那么将被抑制。 正确的方法是哪种,我应该继续尝试并尝试修改代码,以便一行中的其他单元格依赖于指定的单元格,还是应该在其他地方查看?

我要实现的目标是否有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我通过修改SQL Server端的视图解决了我的问题。如果有人遇到相同问题,请执行以下步骤:

1在我从CR调用的SQL视图中添加另一列。该列存储仓库库存的价值。在将仓库和商店的所有库存值都存储在一列之前。

2使用以下代码创建一个字段{@Warehouse_Stock}:

If {Warehouse_Stock}=0 Then
  {%DB_NULL}
Else
  {Stock}

3将{@Warehouse_Stock}字段添加到交叉表的行组

4创建另一个字段{@Shop_stock}并添加代码

If {Stock}=0 Then
  {%DB_NULL}
ELSE IF {@Warehouse_stock} = 0 THEN
  {%DB_NULL}
Else
  {Stock}

5将{@Shop_stock}添加到交叉表作为摘要字段

6在“交叉表专家”中,转到“自定义样式”选项卡,选择@Warehouse_stoc行,然后选中“隐藏空行”复选框。

这对我有用。希望该解决方案也能对其他人有所帮助。