Вопрос по ireport, subreport, java, jasper-reports – Наличие множества отдельных - невыпущенных наборов данных в iReport

4

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

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

Order
& # xA0; & # xA0; & # xA0; -заказ 1
& # XA0; & # xA0; & # xA0; & # xA0;Receipts
& # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; -Поступление строки 1
& # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; -Поступление строки 2
& # XA0; & # xA0; & # xA0; & # xA0;Invoices
& # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; -строка счета 1
& # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; -строка счета 2
Order
& # xA0; & # xA0; & # xA0; -заказ 2
& # XA0; & # xA0; & # xA0; & # xA0;Receipts
& # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; -Поступление строки 1
& # XA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; ........

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

Order
& # xA0; & # xA0; & # xA0; & # xA0; все строки заказа
Receipts
& # xA0; & # xA0; & # xA0; & # xA0; все строки квитанции
Invoices
& # xA0; & # xA0; & # xA0; & # xA0; все строки счета

В настоящее время у меня есть Заказы в качестве основного отчета и Квитанции и Счета как вложенные отчеты, добавленные в детализированный диапазон Заказы.

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

Ваш Ответ

2   ответа
0

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

"First way. Using 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));
8
First way. Using JasperReports API

а затем использовать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 version - 2.0.4 Больше подробностей.

Second way. Using several datasets and list components

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

В этом примере (сборка сiReport 4.5.1) Я разместил 3list компоненты к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>

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

The report's design in iReport

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

The report's result

Во фрагменте для первого способа вы определяете: List & lt; JasperPrint & gt; printList = ...; и затем вы используете jprintlist, который не определен: jprintlist.add (jpOrdersReport);
@ Роберто Спасибо :)
@ user1544520 Добро пожаловать :)
Я использовал добавление 3 отчетов в список, а затем в метод экспорта. Работал хорошо. Спасибо за это. user1544520

Похожие вопросы