水晶报告 - 有条件的记录选择

时间:2013-07-02 14:47:22

标签: crystal-reports crystal-reports-xi

我正在使用Crystal Reports XI。

我的数据来自数据集。

我有2个表格,如下所示:

产品(产品(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,ELSE显示EAN13”

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

如何创建条件语句,纯粹在'Crystal Reports 2008'中?

到目前为止我尝试的是:

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

但我不确定如何告诉Crystal Reports显示“ProdCode”值,其中'PCType'等于'EAN8'

2 个答案:

答案 0 :(得分:2)

  • 按产品ID对报告进行分组。
  • 按PC类型降序(在产品ID中)订购报告。
  • 在“产品ID”页脚中包含您的报告详细信息(不是详细信息部分)。

答案 1 :(得分:0)

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

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

// {%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
...