3

iReport 4.0.2 を使用しており、メイン レポートに結果を表示したいと考えています。たとえば、私のメイン レポートには 2 つの列があり、次の形式のように、その 2 つの列の合計を取得したいと考えています。

A      B     sum
10     5      15

A はメイン レポートの 1 つのフィールドで、B はサブレポートの戻り値です。これはうまくいきます。ただし、重要な点は、サブレポートが値を返さない場合があることです。これが問題です。この場合、合計の結果は次のようになります。

A       B      sum
10             NULL

ここでわかるように、 B はサブレポートの戻り値ですが、その値は NULL でも 0 でもありません。だからこそ、私たちはその問題を抱えています。

SQL が結果を返さない場合に、サブレポートから戻り値を取得する方法を見つけようとしています。iReport に「When No Data」という名前のプロパティがあることは知っていますが、役に立ちません。iReport で問題を解決する別の方法があるかどうか、または SQL スキルを使用するかどうかを知りたいです。

4

2 に答える 2

2

2番目の例では、Bは実際にはnullであると思いますが、おそらくテキストフィールドに「BlankWhenNull」プロパティが設定されています。Bの空白を除いて、結果を再現することができました。

本当の問題は、null値で加算または減算できないことです。JasperReportsはnullを出力します。式の変数の1つがnullの場合、デフォルト値を提供するロジックを追加する必要があります。例えば

$F{MAIN_REPORT_FIELD} - ($V{SUB_RESULT} == null ? 0 : $V{SUB_RESULT})

残念ながら、これはJasperReports 4.0.2(ケース0005138)の式にGroovyを使用するレポートでは機能せず、常にnullを返します。

いくつかのオプションがあります。

  1. この問題を解決するJasperReports/iReport4.1.1にアップグレードできます。
  2. 式にJavaを使用するように切り替えることができます。

    あなたの報告に応じて、これは痛みがないか、雑用になります。正しい式クラスを持たないフィールドは修正する必要があり、プリミティブ/ラッパー以外のタイプで操作を実行する式では、おそらくより明示的にする必要があります。

于 2011-09-19T14:53:47.797 に答える
0
  1. メイン レポートでメイン フィールドとサブ レポート フィールドの合計を実行している場合は、合計式 (メイン レポート フィールド + (subreportfield==null ? 0 : subreportfield) で計算します。

  2. サブレポートの値をメイン レポート変数に返します。

次に、メイン レポート フィールドとベアポート リターン変数の合計を計算します。

上記と同じ条件を実行します。

于 2012-01-05T08:41:19.220 に答える