web-dev-qa-db-ja.com

JasperReportsで変数を別の変数の値でインクリメントするにはどうすればよいですか?

サブレポートでカウントしているアイテムの総計を作成する必要があります。そのためには、反復ごとにその変数の値を別の変数に追加するか、その値で「インクリメント」する必要があると思います。サブレポートはグループごとに呼び出され、そのグループの合計を取得します。データベースの列/フィールドではなく、変数値を追加する必要があります。

returnValueから整数subReportを受け取りました。これは、それ自体がサブレポートの行数です。そのsubReportは、メインのSQLクエリからのさまざまな結果(それぞれがGROUPに対して)に対して複数回呼び出されるため、総計を取得したいと思います。すべての結果を合計したいのですが、nullの値を取得しています。 subReportに新しいreturnValueとして操作を追加し、操作としてSumを選択しようとしましたが、nullも生成されました。


   <variable name="itemCount" class="Java.lang.Integer" resetType="None"/>
   <variable name="grandCount" 
      class="Java.lang.Integer" 
      incrementType="Group" 
      incrementGroup="ITEM_BUNDLE">
      <variableExpression><![CDATA[$V{itemCount}]]></variableExpression>
   </variable>


... <returnValue subreportVariable="countItems" toVariable="itemCount"/>
17
sventechie

属性を追加calculation="Sum"からvariable name="grandCount"

または、grandCountをパラメータとしてサブレポートに渡します

<subreportParameter name="grandCount">
<subreportParameterExpression><![CDATA[$P{grandCount}]]></subreportParameterExpression>
</subreportParameter>

サブレポートで変数を宣言しますcountItemsパラメータのinitialValueを使用しますgrantCount

<variable name="countItems" .... >
   <variableExpression><![CDATA[$P{itemCount} + $P{grandCount}]]></variableExpression>
   <initialValueExpression><![CDATA[$P{grandCount}]]></initialValueExpression>
</variable>

そして戻る

<returnValue subreportVariable="countItems" toVariable="grandCount" calculation="Sum"/>
7
cetnar

バンド(グループ)がサブレポートのバンド(グループ)と等しい場合にのみ、変数(totalSumと名付けました)をインクリメントしようとする場合があります。このためには、現在のバンド(グループ)を提供するためにレポートにフィールドが必要になります。

<variable name="totalSum" 
         class="Java.lang.Integer" 
         resetType="Report" 
         incrementType="Group" 
         incrementGroup="ITEM_BUNDLE"
         calculation="Nothing">
 <variableExpression>
 <![CDATA[new Boolean($F{reportPart}.equals("The_band_with_the_subreport")).booleanValue() ? $V{returnValue} : $V{totalSum}]]>
 </variableExpression>
 <initialValueExpression>
           <![CDATA[new Integer(0)]]>
 </initialValueExpression>
</variable>

これが機能するかどうかはわかりません。テストするためのコンテキストがありません。ただし、3つの変数を使用して2番目のソリューション-を試すこともできます。たとえば、サブレポートから返された値(たとえば、returnValue)を変数に保持し、別の2つの変数を使用して合計を保持します。1つはサブレポートが呼び出されるまで(たとえば、partialSum)と、returnValueとpartialSumの間の合計を格納する2番目。それをtotalSumと呼びましょう。次に、totalSumに対して次のようなものがあります。

<variable name="totalSum" 
         class="Java.lang.Integer" 
         resetType="Report" 
         incrementType="Group" 
         incrementGroup="ITEM_BUNDLE"
         calculation="Nothing">
   <variableExpression>
        <![CDATA[$V{returnValue} +  $V{partialSum}]]>
   </variableExpression>
   <initialValueExpression>
           <![CDATA[new Integer(0)]]>
   </initialValueExpression>
</variable>

PartialSumの場合、次のようになります。

<variable name="partialSum" 
         class="Java.lang.Integer"
         resetType="Report"
         calculation="Sum"
         incrementType="None">
    <variableExpression>
        <![CDATA[new Boolean($F{reportPart}.equals("The_band_with_the_subreport")).booleanValue() ? $V{returnValue} : new Integer(0)]]>
    </variableExpression>
    <initialValueExpression>
         <![CDATA[new Integer(0)]]>
    </initialValueExpression>
  </variable>

これが少し役立つことを願っています。使用するレポートで、iRportからこれらすべての設定を直接行う方が簡単です。

1
Jenny Smith

私はiReportを使用しているので、JRXMLでそれを書く方法を正確に理解していません。 iReportで、クラスタイプが「整数」、計算タイプが「システム」の新しい変数を作成します。ここでは、計算タイプが重要です。

変数式では、$ V {grandCount} = $ V {grandCount} + $ V {itemCount}のようなものが必要になります

注:JasperReportsはバンドごとにレンダリングするため、サブレポートバンドの前のバンドでgrandCount変数を使用することはできません。

手遅れではないことを願っています

1
medopal