jasper-reports - parametros - reset type jasper
¿Cómo puedo incrementar una variable con el valor de otra variable en JasperReports? (3)
Agregue el calculation="Sum"
atributo calculation="Sum"
al variable name="grandCount"
o pase grandCount
a subinforme como parámetro
<subreportParameter name="grandCount">
<subreportParameterExpression><![CDATA[$P{grandCount}]]></subreportParameterExpression>
</subreportParameter>
en el subinforme declare los elementos de cuenta variables con valor inicial del parámetro grantCount
<variable name="countItems" .... >
<variableExpression><![CDATA[$P{itemCount} + $P{grandCount}]]></variableExpression>
<initialValueExpression><![CDATA[$P{grandCount}]]></initialValueExpression>
</variable>
y volver
<returnValue subreportVariable="countItems" toVariable="grandCount" calculation="Sum"/>
Necesito hacer un total general de los artículos que estoy contando en un subinforme. Para hacer eso, creo que necesito agregar el valor de esa variable a otra variable para cada iteración, o "incrementarla" por ese valor. El subinforme se llama para cada grupo y obtengo un total para ese grupo. Necesito agregar los valores variables, en lugar de columnas / campos de la base de datos.
Recibo un valor de subReport
entero del subReport
, que es en sí mismo el recuento de filas en el subReport
. Quiero obtener el total general, ya que se llama a este subReport
varias veces para los diferentes resultados (cada uno para un GRUPO) desde mi consulta SQL principal. Quiero sumar todos los resultados, pero obtengo un valor null
. Intenté agregar una operación al subReport
como un nuevo valor de returnValue
y elegir Sum
como la operación, pero eso también dio como resultado un null
.
...
<returnValue subreportVariable="countItems" toVariable="itemCount"/>
<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>
No sé exactamente cómo escribirlo en JRXML desde que uso iReport. En iReport, creo una nueva Variable, con el tipo de clase "Integer" y el tipo de cálculo "System". El tipo de cálculo es importante aquí.
En la expresión variable, necesitará algo como $ V {grandCount} = $ V {grandCount} + $ V {itemCount}
NOTA: JasperReports procesa banda por banda, por lo que no podrá usar la variable grandCount en una banda antes de la banda de subinforme.
Espero que no sea demasiado tarde
Puede intentar aumentar su variable (yo la llamé totalSum) solo cuando la banda (grupo) es igual a aquella en la que se encuentra el subinforme. Para ello, necesitará un campo en el informe para proporcionarle la banda actual (grupo).
<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>
No estoy seguro de si esto funciona, no tengo el contexto para probarlo. Pero también puede intentar una segunda solución , con tres variables. Por ejemplo, mantiene el valor devuelto del subinforme (digamos returnValue ) en una variable y usa otras dos variables para mantener la suma: una hasta que se llame el subinforme (digamos partialSum ) y la segunda para almacenar la suma entre ReturnValue y la parcialSum. Llamémoslo totalSum. Entonces tendrías algo como esto para 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>
Para parcialSum, tendrás algo como esto:
<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>
Espero que esto ayude un poco. Sería más fácil hacer todas estas configuraciones desde iRport directamente en el informe que desea usar.