0

Crystal Reports XI を使用しています。

私のデータはデータセットから来ています。

次のように関連する2つのテーブルがあります。

製品 (製品 ID (PK)、製品名)

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

「PCType」フィールドは、「ProdCode」が表すバーコード形式のタイプを決定します。(例: EAN13、EAN8)。

Crystal レポートでは、1 つの「製品」に複数の種類のバーコードを含めることができます。これは、テーブルが次のようになることを意味します。

製品: ("1", "製品例 1")

ProdPC: ("0", "1", "EAN8", "01234567"), ("1", "1", "EAN13", "012345678910")

Crystal レポートでは、製品ごとに 1 つのバーコード ラベルのみを印刷したいと考えています。ただし、「ProdPC」テーブルには 2 つのレコードがあるため、この 1 つの製品に対して 2 つのラベルが印刷されます。

私がやりたいことは、Crystal レポートに「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 */
;

しかし、「PCType」が「EAN8」に等しい「ProdCode」値を表示するようにCrystal Reportsに指示する方法がわかりません

4

2 に答える 2

0

オプション I: バーコードごとに 1 つずつ、合計 2 つの列を作成します。Crystal Reports でこれを行います。

PartPC テーブルを削除し、2 つの 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
...
于 2013-07-02T16:41:43.533 に答える