【问题标题】:Crystal Report - Conditional selection of recordCrystal Report - 条件选择记录
【发布时间】:2013-07-03 21:29:17
【问题描述】:

我正在使用 Crystal Reports XI。

我的数据来自数据集。

我有 2 个相关的表,如下所示:

产品(产品ID(PK),产品名称)

ProdPC(ProdPCID(PK), ProdID(FK), PCType, ProdCode)

“PCType”字段确定“ProdCode”代表的条形码格式类型。 (例如 EAN13、EAN8)。

在水晶报告中,一个“产品”可以有不止一种条形码,这意味着我的表格最终看起来像这样:

产品:(“1”,“示例产品 1”)

ProdPC:(“0”、“1”、“EAN8”、“01234567”)、(“1”、“1”、“EAN13”、“012345678910”)

在水晶报告中,我只想为每个产品打印 1 个条形码标签。但是,因为它们是“ProdPC”表中的 2 条记录,所以我将为这 1 个产品打印 2 个标签。

我想要做的是在水晶报告中放置一个条件,“如果 EAN13 为 NULL,则显示 EAN8,否则显示 EAN13”

我无权访问数据集,也无法阻止调用 Crystal Reports 创建条形码标签的应用程序为“ProdPC”表发送超过 1 条记录。

我怎样才能创建我的条件语句,纯粹在“Crystal Reports 2008”中?

到目前为止我尝试过的是:

IF {PartPC.PCType} = "EAN-13" AND {PartPC.ProdCode} <> "" THEN 
    {PartPC.ProdCode}
ELSE 
    /* DISPLAY PartPC.ProdCode containing EAN8 value */
;

但我不确定如何告诉 Crystal Reports 在“PCType”等于“EAN8”时显示“ProdCode”值

【问题讨论】:

    标签: crystal-reports crystal-reports-xi


    【解决方案1】:
    • 按产品 ID 对报告进行分组。
    • 按 PC 类型降序排列您的报告(在产品 ID 内)。
    • 在产品 ID 页脚(不是详细信息部分)中包含您的报告详细信息。

    【讨论】:

    • 我使用的是 ABO.NET (XML) 数据集,而不是直接连接到数据库。由于某种原因,我无法使用 Crystal Reports 创建新组?
    • @samb90:是什么让您认为您无法在 Crystal Reports 中创建新组? Group...Insert 菜单上可用吗? Group Expert... 是否可从 Report 菜单获得?
    • 我已前往“专家组”并添加了“PartPC.ProdID”字段。然后我添加了“PartPC.PCType”字段并将选项设置为降序。我不明白你方法的第 3 步?
    • @samb90:您现有的报告在报告的详细信息部分包含条形码标签。您现在应该在报告中同时拥有产品 ID 的组页眉和组页脚 - 因此将您的条形码标签从报告的详细信息部分移动到产品 ID 组页脚。
    【解决方案2】:

    选项 I:创建两列:每个条码一列。在 Crystal Reports 中执行此操作。

    删除 PartPC 表,将其替换为两个 SQL 表达式字段:

    // {%EAN-8}
    (
      SELECT ProdCode
      FROM   PartPC
      WHERE  ProdID=Product.ProdID
      AND    PCType='EAN-8'
    )
    
    // {%EAN-13}
    (
      SELECT ProdCode
      FROM   PartPC
      WHERE  ProdID=Product.ProdID
      AND    PCType='EAN-13'
    )
    

    然后创建一个公式字段来显示相应的:

    // {@barcode}
    If Not(Isnull({%EAN-13})) Then
      {%EAN-13}
    Else
      {%EAN-8}
    

    选项 II:更改 SQL 以创建标量值字段。在您的数据集或 Command 对象(Crystal Reports)中执行此操作。

    SELECT  Product.*,
        (
          SELECT ProdCode
          FROM   PartPC
          WHERE  ProdID=Product.ProdID
          AND    PCType='EAN-8'
        ) EAN_8,
        (
          SELECT ProdCode
          FROM   PartPC
          WHERE  ProdID=Product.ProdID
          AND    PCType='EAN-13'
        ) EAN_13
    FROM  Product
    ...
    

    【讨论】:

    • 嗨克雷格,感谢您的回复。我是否在 Crystal 中输入这些 SQL 表达式?我无权访问应用程序使用的数据库,也无法修改从应用程序发送到 Crystal Reports 的表。
    • 我使用的是 ABO.NET (XML) 数据集,而不是直接连接到数据库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多