Наличие множества отдельных наборов данных в iReport

Я использую iReport 2.0.4 для экспорта некоторых данных в Excel из Java-приложения.

Моя проблема в том, что мои подотчеты группируются в отчете верхнего уровня, но я хочу, чтобы они были отдельными отчетами. В настоящее время это выглядит так

Заказ
-Строка заказа 1
Квитанции
-Строка квитанции 1
-Строка квитанции 2
Счета-фактуры
-Строка счета 1
-Строка счета 2
Заказ
-Строка заказа 2
Поступления
-Строка поступления 1
........

Я хочу, чтобы это было 3 отдельных отчета в одной таблице. Нравится

Заказ
все строки заказа
Поступления
все строки поступления
Счета
все строки счета

В настоящее время у меня есть заказы в качестве основного отчета, а квитанции и счета-фактуры в качестве подотчетов, помещенных в детальную группу заказов.

Каков наилучший способ получить этот макет, если это вообще возможно?


person user1544520    schedule 22.07.2012    source источник


Ответы (2)


Вы можете заполнить и скомпилировать три отдельных отчета, а затем использовать < strong>JRPdfExporterParameter.JASPER_PRINT_LIST для построения единого отчета с использованием следующего кода:

JasperReport ordersReport = JasperCompileManager.compileReport(srcOrdersReport);
JasperPrint jpOrdersReport = JasperFillManager.fillReport(ordersReport, ordersParamsMap, ordersDataSource);

JasperReport receiptsReport = JasperCompileManager.compileReport(srcReceiptsReport);
JasperPrint jpReceiptsReport = JasperFillManager.fillReport(receiptsReport, receiptsParamsMap, receiptsDataSource);

JasperReport invoicesReport = JasperCompileManager.compileReport(srcInvoicesReport);
JasperPrint jpInvoicesReport = JasperFillManager.fillReport(invoicesReport, invoicesParamsMap, invoicesDataSource);

List<JasperPrint> printList = new ArrayList<JasperPrint>();

printList.add(jpOrdersReport);
printList.add(receiptsReport);
printList.add(invoicesReport);

JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, printList);

exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output);
exporter.exportReport();

Вы можете посмотреть на это пример для вашей версии JR – 2.0.4, чтобы получить дополнительные сведения.

  • Второй способ. Использование нескольких наборов данных и компонентов списка

Вы можете добавить несколько наборов данных в версию iReport 4.x в один отчет. Каждый набор данных может содержать свой собственный запрос. Компонент список может использовать собственный набор данных.

В этом примере (сборка с iReport 4.5.1) я поместил 3 компонента list в полосу Title :

<?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="several_queries" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <subDataset name="OrdersDataset">
        <queryString>
            <![CDATA[SELECT TOP 5 ORDERID AS orderId, SHIPNAME AS orderShipName, SHIPCOUNTRY AS orderShipCounty, SHIPCITY  AS orderShipCity
FROM orders]]>
        </queryString>
        <field name="ORDERID" class="java.lang.Integer"/>
        <field name="ORDERSHIPNAME" class="java.lang.String"/>
        <field name="ORDERSHIPCOUNTY" class="java.lang.String"/>
        <field name="ORDERSHIPCITY" class="java.lang.String"/>
    </subDataset>
    <subDataset name="ReceiptsDataset">
        <queryString>
            <![CDATA[SELECT TOP 10 ID AS receiptId, CITY AS receiptCity FROM receipts]]>
        </queryString>
        <field name="RECEIPTID" class="java.lang.Integer"/>
        <field name="RECEIPTCITY" class="java.lang.String"/>
    </subDataset>
    <subDataset name="InvoicesDataset">
        <queryString>
            <![CDATA[SELECT TOP 7 ID AS invoiceId, TOTAL AS invoiceSum FROM invoices]]>
        </queryString>
        <field name="INVOICEID" class="java.lang.Integer"/>
        <field name="INVOICESUM" class="java.math.BigDecimal"/>
    </subDataset>
    <subDataset name="dataset1"/>
    <queryString>
        <![CDATA[SELECT 1 as t FROM dual WHERE 1=2]]>
    </queryString>
    <field name="t" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="243" splitType="Stretch">
            <componentElement>
                <reportElement positionType="Float" x="0" y="44" width="555" height="19"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="OrdersDataset">
                        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                    </datasetRun>
                    <jr:listContents height="19" width="555">
                        <textField>
                            <reportElement x="0" y="0" width="100" height="19"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{ORDERID}]]></textFieldExpression>
                        </textField>
                        <textField>
                            <reportElement x="100" y="0" width="100" height="19"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{ORDERSHIPNAME}]]></textFieldExpression>
                        </textField>
                        <textField>
                            <reportElement x="200" y="0" width="100" height="19"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{ORDERSHIPCOUNTY}]]></textFieldExpression>
                        </textField>
                        <textField>
                            <reportElement x="300" y="0" width="100" height="19"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{ORDERSHIPCITY}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
            <componentElement>
                <reportElement positionType="Float" x="0" y="130" width="400" height="18"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="ReceiptsDataset">
                        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                    </datasetRun>
                    <jr:listContents height="18" width="400">
                        <textField>
                            <reportElement positionType="Float" x="100" y="0" width="100" height="18"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{RECEIPTCITY}]]></textFieldExpression>
                        </textField>
                        <textField>
                            <reportElement positionType="Float" x="0" y="0" width="100" height="18"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{RECEIPTID}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
            <staticText>
                <reportElement positionType="Float" x="0" y="4" width="400" height="20"/>
                <box topPadding="1" leftPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Orders]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="24" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[ID]]></text>
            </staticText>
            <staticText>
                <reportElement x="100" y="24" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[Customer name]]></text>
            </staticText>
            <staticText>
                <reportElement x="200" y="24" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[Customer country]]></text>
            </staticText>
            <staticText>
                <reportElement x="300" y="24" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[Customer city]]></text>
            </staticText>
            <staticText>
                <reportElement positionType="Float" x="0" y="109" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[ID]]></text>
            </staticText>
            <staticText>
                <reportElement positionType="Float" x="100" y="109" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[City]]></text>
            </staticText>
            <staticText>
                <reportElement positionType="Float" x="0" y="89" width="200" height="20"/>
                <box topPadding="1" leftPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Receipts]]></text>
            </staticText>
            <componentElement>
                <reportElement positionType="Float" x="0" y="201" width="400" height="18"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                    <datasetRun subDataset="InvoicesDataset">
                        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                    </datasetRun>
                    <jr:listContents height="18" width="400">
                        <textField pattern="###0.00;-###0.00">
                            <reportElement positionType="Float" x="100" y="0" width="100" height="18"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{INVOICESUM}]]></textFieldExpression>
                        </textField>
                        <textField>
                            <reportElement positionType="Float" x="0" y="0" width="100" height="18"/>
                            <box leftPadding="10" rightPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{INVOICEID}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
            <staticText>
                <reportElement positionType="Float" x="0" y="161" width="200" height="20"/>
                <box topPadding="1" leftPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Invoices]]></text>
            </staticText>
            <staticText>
                <reportElement positionType="Float" x="100" y="181" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[Sum]]></text>
            </staticText>
            <staticText>
                <reportElement positionType="Float" x="0" y="181" width="100" height="20"/>
                <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[ID]]></text>
            </staticText>
        </band>
    </title>
</jasperReport>

Дизайн отчета таков:

Оформление отчета в iReport

Результат будет (через предварительный просмотр iReport):

Результат отчета

person Alex K    schedule 23.07.2012
comment
Я использовал добавление 3 отчетов в список, а затем в метод экспорта. Работал хорошо. Спасибо за это. - person user1544520; 24.07.2012
comment
В сниппете для первого способа вы определяете: List‹JasperPrint› printList = ...; а затем вы используете jprintlist, который не определен: jprintlist.add(jpOrdersReport); - person Roberto; 22.04.2014
comment
@ Роберто Спасибо :) - person Alex K; 22.04.2014

В JasperReports 6.1.1 API JRPdfExporterParameter.JASPER_PRINT_LIST и JRPdfExporterParameter.OUTPUT_STREAM Устаревший Я добавляю в @Alex K ответ на текущий не устаревший метод:

"Первый способ. Использование JasperReports API"

заменить (устаревший код):

exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, printList);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output);

с участием

exporter.setExporterInput(SimpleExporterInput.getInstance(printList));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(output));
person Petter Friberg    schedule 28.10.2015