1

Crystal Reports で 1 対多の関係にある 2 つのテーブルをレポートする際に問題があります。


例の表:

dbo.ストック

Barcode   Qty   
12345     3     
11111     5     
22222     6     

dbo.sales

Barcode    SalesDate    QtySold<br/>
12345      1/1/2013     1          
12345      1/1/2012     1
12345      1/1/2010     1
11111      1/1/2000     1

テーブルは経由でリンクされています

dbo.stock Left Outer Join On dbo.sales             

レポート構成:

Group 1 Header |
Sales          |Sales.barcode Sales.QtySold
Group 1 Footer |Group(Barcode) Sum(QtySold) Stock.Qty

問題: 販売と在庫を表示する (販売日制限なし)

Barcode    Sold    OnHand
12345      3       3
11111      1       5
22222              6

ただし、データ範囲が選択されている場合、出力は選択されたデータ範囲外の売上を持つ有効な製品を削除します。2012 年 1 月 1 日から 2013 年 1 月 1 日と言う

Barcode    Sold    OnHand
12345      2       3
22222              6

サブレポートを使用して機能するバージョンがありますが、サブレポートが行ごとに実行されるため、使用するにはオーバーヘッドが大きすぎます。

これを回避する方法を考えることができますか?(サブレポートを使用しない場合)

ありがとうB


システム ノート:
ODBC ドライバ経由の Crystal 8.5 データベース .dbf ファイル アクセス

4

3 に答える 3

2

問題は、左外部結合を行っているにもかかわらず、右側のテーブルで日付範囲を選択しているため、実質的に内部結合になっていることです。レコード選択式に次のようなものがある場合は{Sales.SalesDate}={?DateParameter}、それを削除してください。

代わりに、 を使用して詳細セクションをisnull({Sales.SalesDate}) or {Sales.SalesDate}<>{?DateParameter}非表示にして、目的の日付の売上のみがレポートに表示されるようにします。グループ フッターで「販売数量」を処理するには、日付範囲内のレコードのみを単純に合計するのではなく、累計を使用します。

于 2013-03-26T02:25:11.470 に答える
1

すべてのバーコード情報が必要ですが、日付範囲に該当する売上のみが必要ですか?

dbo.sales.SalesDate in {?daterange} then {dbo.sales.QtySold} else 0 の場合は、この数式を詳細に試してください

グループ フッターに概要を挿入

注: 数式エディターで Null の既定値に切り替えるか、数式で NULL 値を考慮する必要がある場合があります。

于 2013-03-26T01:41:33.547 に答える
0

Crystal Report の 2 つのテーブルを left out join で結合したいと同時に、sales.SalesDate>='1-JAN-2014' などの右側のテーブルに基づいてレポートをフィルタリングしたい場合、結合は等結合に変換されて解決されます。一部の人々が使用を提案する問題 (ISNULL(sales.SalesDate) OR sales.SalesDate>='1-JAN-2014')

上記のソリューションは、在庫の売上が 0 であり、それらの在庫を表示したい場合にのみ機能しますが、一部の在庫の売上が 0 を超えていて、販売日が ON または BEFORE '31-DEC-2013' である場合はどうなりますか。このような状況では、ISNULL(sales.SalesDate) は機能しません。このような問題を解決するには、コマンド オブジェクトを追加するか、次のように sales テーブルのビューを作成する必要があります

  1. 次の sql でコマンド オブジェクトを作成します。stock.Barcode、sales.Salesdate を選択します。stock.Barcode=order.Barcode および sales.SalesDate>='1-JAN-2014' の在庫左外部結合オーダーから選択します。

  2. 2 番目の解決策は、create or replace view view_Sales as Select * として販売のビューを作成します。

于 2015-02-05T15:02:02.457 に答える