Пустой вложенный отчет в отчете Jasper

#jasper-reports #subreport

#jasper-отчеты #вложенный отчет

Вопрос:

Я видел довольно много вопросов по пустым вложенным отчетам, но ни один из них не предоставляет необходимую мне информацию. У меня есть основной отчет:

 <?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports  http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="sample_report"  pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555"  leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="reportTitle" class="java.lang.String"/>
<parameter name="reportSubTitle" class="java.lang.String"/>
<background>
    <band splitType="Stretch"/>
</background>
<title>
    <band height="65" splitType="Stretch">
        <textField>
            <reportElement x="0" y="0" width="555" height="20"/>
            <textElement textAlignment="Center"/>
            <textFieldExpression><![CDATA[$P{reportTitle}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="434" y="40" width="80" height="20"/>
            <textElement textAlignment="Right"/>
            <textFieldExpression><![CDATA["Page " $V{PAGE_NUMBER} " of"]]></textFieldExpression>
        </textField>
        <textField evaluationTime="Report">
            <reportElement x="514" y="40" width="40" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[" "   $V{PAGE_NUMBER}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="0" y="20" width="555" height="20"/>
            <textElement textAlignment="Center"/>
            <textFieldExpression><![CDATA[$P{reportSubTitle}]]></textFieldExpression>
        </textField>
    </band>
</title>
<pageHeader>
    <band splitType="Stretch"/>
</pageHeader>
<columnHeader>
    <band splitType="Stretch"/>
</columnHeader>
<detail>
    <band height="109" splitType="Stretch">
        <subreport isUsingCache="false">
            <reportElement x="0" y="0" width="555" height="100" isPrintWhenDetailOverflows="true"/>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA["sample_report_activity_report.jasper"]]></subreportExpression>
        </subreport>
    </band>
</detail>
<columnFooter>
    <band splitType="Stretch"/>
</columnFooter>
<pageFooter>
    <band splitType="Stretch"/>
</pageFooter>
<summary>
    <band splitType="Stretch"/>
</summary>
</jasperReport>
 

И вложенный отчет:

 <?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="sample_report_activity_report" pageWidth="802" pageHeight="555" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString language="SQL">
    <![CDATA[SELECT ActivityType, Count, Amount, ActivityDate FROM Activity WHERE ARIID = 1]]>
</queryString>
<field name="ActivityType" class="java.lang.String"/>
<field name="Count" class="java.lang.String"/>
<field name="Amount" class="java.lang.String"/>
<field name="ActivityDate" class="java.lang.String"/>
<background>
    <band splitType="Stretch"/>
</background>
<title>
    <band height="24" splitType="Stretch">
        <staticText>
            <reportElement x="0" y="0" width="802" height="20"/>
            <textElement textAlignment="Center"/>
            <text><![CDATA[Activity Report]]></text>
        </staticText>
    </band>
</title>
<pageHeader>
    <band splitType="Stretch"/>
</pageHeader>
<columnHeader>
    <band height="25" splitType="Stretch">
        <staticText>
            <reportElement x="12" y="0" width="100" height="20"/>
            <textElement/>
            <text><![CDATA[ActivityType]]></text>
        </staticText>
        <staticText>
            <reportElement x="112" y="0" width="100" height="20"/>
            <textElement/>
            <text><![CDATA[Count]]></text>
        </staticText>
        <staticText>
            <reportElement x="215" y="0" width="100" height="20"/>
            <textElement/>
            <text><![CDATA[Amount]]></text>
        </staticText>
        <staticText>
            <reportElement x="315" y="0" width="100" height="20"/>
            <textElement/>
            <text><![CDATA[ActivityDate]]></text>
        </staticText>
    </band>
</columnHeader>
<detail>
    <band height="22" splitType="Stretch">
        <textField>
            <reportElement x="12" y="0" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{ActivityType}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="115" y="0" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{Count}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="215" y="0" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{Amount}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="315" y="2" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{ActivityDate}]]></textFieldExpression>
        </textField>
    </band>
</detail>
<columnFooter>
    <band splitType="Stretch"/>
</columnFooter>
<pageFooter>
    <band splitType="Stretch"/>
</pageFooter>
<summary>
    <band height="42" splitType="Stretch">
        <staticText>
            <reportElement x="0" y="0" width="802" height="20"/>
            <textElement textAlignment="Center"/>
            <text><![CDATA[--- End of Activity Report ---]]></text>
        </staticText>
    </band>
</summary>
</jasperReport>
 

И у меня есть следующий Java-код:

 Map parameters = new HashMap();
parameters.put("reportTitle", "Report");
parameters.put("reportSubTitle", "Activity Date 10/25/2011");

JasperReport jasperReportMain = JasperCompileManager.compileReport("c:\tempfilepath\sample_report.jrxml");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReportMain, parameters, con);
JasperExportManager.exportReportToPdfFile(jasperPrint, "c:\tempfilepath\SampleReport.pdf");
 

Насколько я могу судить, я следовал всем предыдущим советам, и у меня до сих пор нет никаких данных, отображаемых в моем вложенном отчете при запуске основного отчета. Что я делаю не так?

Комментарии:

1. В комментариях ниже вы говорите, что вложенный отчет выполняется нормально сам по себе. Но вы не говорите, работает ли основной отчет — с включенным в него вложенным отчетом — нормально в iReport. Так ли это? Начните с того, что заставьте это работать, затем выясните свой Java-код.

Ответ №1:

Возможно, запрос в вашем вложенном отчете не возвращает ни одной строки. Вы можете попробовать добавить No Data band в свой вложенный отчет, добавить Static Text в него некоторые и установить для свойства (sub) отчета When No Data No Data Section значение .

Ответ №2:

Я не заметил никаких нарушений в вашем XML-коде JR. Во-первых, вы уверены, что ваш источник данных (результирующий набор базы данных) возвращает какие-либо результаты и настроен правильно?

Я бы также рекомендовал установить инструмент IREPORT Designer для отчетов Jasper. Я думаю, что последняя версия — 4.1.2. Это очень поможет вам как в проектировании, так и в обработке ошибок / исключений.

Комментарии:

1. Я использовал iReport для создания этих файлов jrxml. Кроме того, если я распечатаю вложенный отчет самостоятельно, он покажет данные, поэтому я уверен, что источник данных возвращает правильные результаты.

2. Возможно, вам захочется проверить атрибут выражения источника данных, а затем атрибут «Тип подключения» вложенного отчета. Ими следует управлять из шаблона JR основного отчета (в iReport). Кроме того, одна из основных причин, по которой данные во вложенном отчете не отображаются, заключается в том, как источник данных для этого вложенного отчета настроен из основного отчета.

Ответ №3:

Возможно, я ошибаюсь, потому что я не очень понимаю jrxml как код, поскольку я всегда разрабатывал отчеты с использованием iReport. Передаете ли вы параметры из основного отчета во вложенный отчет? Если да, просто проверьте, щелкнув правой кнопкой мыши на вложенном отчете, передали ли вы параметры для своих вложенных отчетов.