【问题标题】:Crystal Reports 2016 crosstab supress rows based on value of specified columns that are conditionally availableCrystal Reports 2016 交叉表根据条件可用的指定列的值抑制行
【发布时间】:2021-05-07 19:02:23
【问题描述】:

我有一个这样的交叉表

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

这适用于在仓库和网点之间移动库存。因此,如果 Col1 显示 Warehouse 的库存,而 Col2 和 Col3 是网点,则 Row2 和 Row4 的产品不可用,并且不应显示行。

但是,如果 Col1 和 Col2 是仓库,而 Col3 是出口,那么只有 Row4 不可用,因此应该被禁止。

仓库的 ID 比 X 小,网点的 ID 比 X 高。我找到了这个 solution 并尝试使用代码来应用它:

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

但该代码仅适用于 VENUE_ID 小于 X 的 Stock。因此,仅当所有 Stock 值都等于 0 时才会抑制行。 如果有办法让一行中的所有单元格显示 0 值,那么就会被抑制。 哪个是正确的方法,我应该继续这条路径并尝试修改代码,以便连续的其他单元格依赖于指定的单元格,还是应该在别处寻找?

对于我想要实现的目标有更好的解决方案吗?

【问题讨论】:

    标签: crystal-reports


    【解决方案1】:

    我已通过修改 SQL 服务器端的视图解决了我的问题。以下是如果有人遇到同样问题的步骤:

    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. 在 Cross-tab Expert 中转到自定义样式选项卡,选择 @Warehouse_stoc 行并选中“隐藏空行”复选框。

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

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多