为什么在使用子报表的 return 值时从组中得到错误的总和?

Why do I get wrong sum from group when using subreport's return value?

我有 JasperReport 的 sub_employment 和一个子报表 sub_salary 我想对 SubReport 中的 return 值求和。

这行得通,但总和会忽略最后一条记录。

查看结果 PDF

我尝试了 "evaluation time" 和 "reset type"

的所有可能性

变量

<variable name="ACTUAL_HOURS" class="java.lang.Double" resetType="Column" calculation="Sum">
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>
<variable name="ACTUAL_SALARY" class="java.lang.Double" resetType="Column" calculation="Sum">
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>
<variable name="ACTUAL_SALARY_MONTH" class="java.lang.Double" resetType="Column" calculation="Sum">
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>
<variable name="SUM_ACTUAL_HOURS" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{ACTUAL_HOURS}]]></variableExpression>
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>
<variable name="SUM_ACTUAL_SALARY" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{ACTUAL_SALARY}]]></variableExpression>
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>
<variable name="SUM_ACTUAL_SALARY_MONTH" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{ACTUAL_SALARY_MONTH}]]></variableExpression>
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>
<variable name="ENTRY_DATE" class="java.util.Date" calculation="Lowest">
    <variableExpression><![CDATA[$F{entry_date}]]></variableExpression>
</variable>
<variable name="BUSINESS_FUNCTION" class="java.lang.String">
    <variableExpression><![CDATA[$F{business_function}]]></variableExpression>
</variable>

频段:

<band height="14">
        <printWhenExpression><![CDATA[$V{IS_VALID}]]></printWhenExpression>
        <subreport>
            <reportElement x="0" y="0" width="489" height="14" isRemoveLineWhenBlank="true" uuid="0b445260-50f1-4a00-bd12-b278d3d18ec1"/>
            <subreportParameter name="REPORT_RESOURCE_BUNDLE">
                <subreportParameterExpression><![CDATA[$P{REPORT_RESOURCE_BUNDLE}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="OWNER">
                <subreportParameterExpression><![CDATA[$P{OWNER}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="PRODUCT_NAME">
                <subreportParameterExpression><![CDATA[$P{PRODUCT_NAME}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="COPYRIGHT">
                <subreportParameterExpression><![CDATA[$P{COPYRIGHT}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="USER">
                <subreportParameterExpression><![CDATA[$P{USER}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="USER_FIRSTNAME">
                <subreportParameterExpression><![CDATA[$P{USER_FIRSTNAME}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="USER_LASTNAME">
                <subreportParameterExpression><![CDATA[$P{USER_LASTNAME}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="USER_EMAIL">
                <subreportParameterExpression><![CDATA[$P{USER_EMAIL}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="USER_NAME">
                <subreportParameterExpression><![CDATA[$P{USER_NAME}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="EMPLOYEE_ABBREVIATION">
                <subreportParameterExpression><![CDATA[$P{EMPLOYEE_ABBREVIATION}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="REPORT_NAME">
                <subreportParameterExpression><![CDATA[$P{REPORT_NAME}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="PRINT_DATE">
                <subreportParameterExpression><![CDATA[$P{PRINT_DATE}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="VALID_DATE">
                <subreportParameterExpression><![CDATA[$P{VALID_DATE}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="SHOW_EMPLOYMENT_TOTAL">
                <subreportParameterExpression><![CDATA[$P{SHOW_EMPLOYMENT_TOTAL}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="ROUND_SALARY_MONTH_SINGLE">
                <subreportParameterExpression><![CDATA[$P{ROUND_SALARY_MONTH_SINGLE}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="ROUND_SALARY_YEAR_TOTAL">
                <subreportParameterExpression><![CDATA[$P{ROUND_SALARY_YEAR_TOTAL}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="ROUND_SALARY_YEAR_SINGLE">
                <subreportParameterExpression><![CDATA[$P{ROUND_SALARY_YEAR_SINGLE}]]></subreportParameterExpression>
            </subreportParameter>
            <subreportParameter name="ROUND_SALARY_MONTH_TOTAL">
                <subreportParameterExpression><![CDATA[$P{ROUND_SALARY_MONTH_TOTAL}]]></subreportParameterExpression>
            </subreportParameter>
            <dataSourceExpression><![CDATA[$F{hr_employment$hr_employee_salary}]]></dataSourceExpression>
            <returnValue subreportVariable="SUM_ACTUAL_SALARY_MONTH" toVariable="ACTUAL_SALARY_MONTH"/>
            <returnValue subreportVariable="SUM_ACTUAL_SALARY" toVariable="ACTUAL_SALARY"/>
            <returnValue subreportVariable="SUM_ACTUAL_HOURS" toVariable="ACTUAL_HOURS"/>
            <subreportExpression><![CDATA["sub_salary.jasper"]]></subreportExpression>
        </subreport>
    </band>

总结

<summary>
    <band height="15">
        <textField>
            <reportElement x="0" y="1" width="150" height="14" uuid="79b0b8d3-e91d-4b24-81fe-b40c16934fd8"/>
            <textElement verticalAlignment="Middle">
                <font size="10"/>
            </textElement>
            <textFieldExpression><![CDATA["Total"]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true" pattern="#,##0.00" isBlankWhenNull="true">
            <reportElement style="label-W-B-L" x="360" y="1" width="70" height="14" uuid="747fd18d-4afe-4343-bd66-ee8897309e59"/>
            <textElement textAlignment="Right" verticalAlignment="Middle">
                <font size="10"/>
                <paragraph leftIndent="2"/>
            </textElement>
            <textFieldExpression><![CDATA[$V{SUM_ACTUAL_SALARY_MONTH}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true" pattern="#,##0.00" isBlankWhenNull="true">
            <reportElement style="label-W-B-L" x="255" y="1" width="35" height="14" uuid="01a90af5-5fec-42e5-a69e-be21f034b51b"/>
            <textElement textAlignment="Right" verticalAlignment="Middle">
                <font size="10"/>
                <paragraph leftIndent="2"/>
            </textElement>
            <textFieldExpression><![CDATA[$V{SUM_ACTUAL_HOURS}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true" pattern="#,##0.00" isBlankWhenNull="true">
            <reportElement style="label-W-B-L" x="290" y="1" width="70" height="14" uuid="7dfc669e-3d34-4aa0-afc0-b9be20db5a7a"/>
            <textElement textAlignment="Right" verticalAlignment="Middle">
                <font size="10"/>
                <paragraph leftIndent="2"/>
            </textElement>
            <textFieldExpression><![CDATA[$V{SUM_ACTUAL_SALARY}]]></textFieldExpression>
        </textField>
        <line>
            <reportElement x="0" y="0" width="489" height="1" uuid="f7997151-3c20-4e44-b574-c07709f3b35f"/>
            <graphicElement>
                <pen lineWidth="1.0"/>
            </graphicElement>
        </line>
    </band>
</summary>

是的,这样计算变量

<variable name="SUM_ACTUAL_SALARY_MONTH" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$V{ACTUAL_SALARY_MONTH}]]></variableExpression>
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>

$V{ACTUAL_SALARY_MONTH} return 子报告之前完成。

您有多个解决方案

textField

中添加最后一个值
    $V{SUM_ACTUAL_SALARY_MONTH}.doubleValue()+$V{ACTUAL_SALARY_MONTH}.doubleValue()

textField 表达式为:

<textField isStretchWithOverflow="true" pattern="#,##0.00" isBlankWhenNull="true">
        <reportElement style="label-W-B-L" x="255" y="1" width="35" height="14" uuid="01a90af5-5fec-42e5-a69e-be21f034b51b"/>
        <textElement textAlignment="Right" verticalAlignment="Middle">
            <font size="10"/>
            <paragraph leftIndent="2"/>
        </textElement>
        <textFieldExpression><![CDATA[$V{SUM_ACTUAL_SALARY_MONTH}.doubleValue()+$V{ACTUAL_SALARY_MONTH}.doubleValue()]]></textFieldExpression>
</textField>

注意:子报表中的变量ACTUAL_SALARY_MONTHreturn值不应该有计算和resetType。

<variable name="ACTUAL_SALARY_MONTH" class="java.lang.Double">
    <initialValueExpression><![CDATA[new Double(0.0)]]></initialValueExpression>
</variable>

对 return 值使用求和函数。

主变量需要有计算System

no calculation is done and the expression is not evaluated, the value of this variable will be the last value set on it. Useful to store partial results or the final result of a computation.

主要变量

<variable name="SUM_ACTUAL_SALARY_MONTH" class="java.lang.Double" calculation="System"/>

子报表return值

<returnValue subreportVariable="SUM_ACTUAL_SALARY" toVariable="SUM_ACTUAL_SALARY_MONTH" calculation="Sum"/>

注意:calculation="Sum" 如何用于 returnValue