1

詳細バンドでサブレポートを作成する必要があります。メイン レポートの同じデータソースをサブレポートに渡しています。サブレポートに入るときに直面している問題は、残りのサブレポートを追加できないインデックスカウンターをインクリメントします。

MainReport.jrxml

<group name="Account Summary">
    <groupHeader>
        <band height="100" splitType="Stretch">
            <printWhenExpression><![CDATA[$F{accountSummary.hasRepots}]]></printWhenExpression>
            <subreport isUsingCache="false">
                <reportElement x="28" y="0" width="540" height="100" isRemoveLineWhenBlank="true"/>
                <subreportParameter name="accountSummary">
                    <subreportParameterExpression><![CDATA[$F{accountSummary.hasRepots}]]></subreportParameterExpression>
                </subreportParameter>
                <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </groupHeader>
</group>

SubReport.jrxml

<detail>
    <band height="100" splitType="Stretch">
        <subreport isUsingCache="false">
            <reportElement positionType="Float" x="0" y="0" width="540" height="100" isRemoveLineWhenBlank="true"/>
            <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
            <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + $F{subreportFileName}]]></subreportExpression>
        </subreport>
    </band>
</detail>

たとえば、「SubSubReport.jrxml」などのデータソースから $F{subreportFileName} を渡しますが、最初のレポートしか表示されません。サブサブレポートでインデックスカウンターが不足しているため、サブレポートの詳細バンドは表示されません。各要素に行きます。

SubSubReport.jrxml

<field name="chartData.label" class="java.lang.String"/>
<field name="chartData.value" class="java.lang.Float"/>
<field name="value1" class="java.lang.String"/>
<field name="value2" class="java.lang.String"/>
<field name="value3" class="java.lang.String"/>
<pageHeader>
    <band height="114" splitType="Stretch">
        <staticText>
            <reportElement style="lbl-light-golden" x="12" y="19" width="170" height="67"/>
            <textElement>
                <font size="26"/>
            </textElement>
            <text><![CDATA[Some Label]]></text>
        </staticText>
        <pieChart>
            <chart evaluationTime="Band">
                <reportElement x="272" y="0" width="268" height="114"/>
                <chartTitle/>
                <chartSubtitle/>
                <chartLegend position="Left"/>
            </chart>
            <pieDataset>
                <keyExpression><![CDATA[$F{chartData.label}]]></keyExpression>
                <valueExpression><![CDATA[$F{chartData.value}]]></valueExpression>
                <labelExpression><![CDATA[null]]></labelExpression>
            </pieDataset>
            <piePlot isShowLabels="false" isCircular="true">
                <plot/>
                <itemLabel/>
            </piePlot>
        </pieChart>
    </band>
</pageHeader>
<columnHeader>
    <band height="18" splitType="Stretch">
        <line>
            <reportElement x="0" y="1" width="540" height="1"/>
        </line>
        <staticText>
            <reportElement style="lbl-black-table-header" x="12" y="4" width="158" height="14"/>
            <textElement/>
            <text><![CDATA[Header 1]]></text>
        </staticText>
        <staticText>
            <reportElement style="lbl-black-table-header" x="205" y="4" width="199" height="14"/>
            <textElement textAlignment="Right"/>
            <text><![CDATA[Header 2]]></text>
        </staticText>
        <staticText>
            <reportElement style="lbl-black-table-header" x="445" y="4" width="74" height="13"/>
            <textElement textAlignment="Center"/>
            <text><![CDATA[Header 3]]></text>
        </staticText>
        <line>
            <reportElement x="0" y="17" width="540" height="1"/>
        </line>
    </band>
</columnHeader>
<detail>
    <band height="18" splitType="Stretch">
        <textField isStretchWithOverflow="true">
            <reportElement positionType="Float" x="12" y="1" width="158" height="16"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{value1}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true">
            <reportElement positionType="Float" x="205" y="1" width="199" height="16"/>
            <textElement textAlignment="Right">
                <font isStrikeThrough="false"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{value2}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true">
            <reportElement positionType="Float" x="445" y="1" width="74" height="16"/>
            <textElement textAlignment="Right"/>
            <textFieldExpression><![CDATA[$F{value3}]]></textFieldExpression>
        </textField>
    </band>
</detail>

また、「SubReport.jrxml」で次のように詳細バンドの代わりにグループを使用してみました

SubReport.jrxml

<group name="Sub report 1">
    <groupHeader>
        <band height="100" splitType="Stretch">
            <subreport isUsingCache="false">
                <reportElement positionType="Float" x="0" y="0" width="540" height="100" isRemoveLineWhenBlank="true"/>
                <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubSubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </groupHeader>
</group>
<group name="Sub report 2">
    <groupHeader>
        <band height="200" splitType="Stretch">
            <staticText>
                <reportElement x="110" y="10" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[Sub report 2]]></text>
            </staticText>
            <subreport isUsingCache="false">
                <reportElement positionType="Float" x="0" y="40" width="540" height="100" isRemoveLineWhenBlank="true"/>
                <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubSubReport1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </groupHeader>
</group>

「サブレポート2」ラベルを印刷しますが、「SubSubReport1.jasper」の印刷に成功しません

私が間違っているのは、提案や助けになる方向性です。

4

1 に答える 1

1

レポート データ ソースをサブレポートのフィードに使用しないでください。REPORT_DATA_SOURCE は、消費可能なオブジェクトであるデータ ソースです。

これは、一度だけレポートをフィードするために使用できることを意味します。したがって、マスター レポートのすべてのレコードに独自のサブレポートがある場合 (マスター レポートにレコードが 1 つしかない場合を除く)、パラメーター手法は適していません。これが、1つしか表示されない理由である可能性があると思います。

于 2011-12-13T12:34:53.397 に答える