Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Having many separate - unrleated datasets in iReport

I'm using iReport 2.0.4 to export some data to excel from a java application.

My problem is my subreports are grouping under the top level report but I want them to be discrete reports. Currently it looks like this

Order
   -Order Line 1
    Receipts
       -Receipt Line 1
       -Receipt Line 2
    Invoices
       -Invoice Line 1
       -Invoice Line 2
Order
   -Order Line 2
    Receipts
       -Receipt Line 1
       ........

I want it to be 3 separate reports in one spreadsheet. Like this

Order
    all Order lines
Receipts
    all Receipt lines
Invoices
    all Invoice lines

Currently I have the Orders as the master report and the Receipts and Invoices as subreports, dropped into the detail band Orders.

What is the best way to get this layout, if it's possible at all?

like image 273
user1544520 Avatar asked Feb 20 '23 18:02

user1544520


1 Answers

  • First way. Using JasperReports API

You can fill and compile three separate reports and then use JRPdfExporterParameter.JASPER_PRINT_LIST parameter for building the single report using code like this:

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();

You can look at this sample for your JR version - 2.0.4 for more details.

  • Second way. Using several datasets and list components

You can add several datasets in iReport 4.x version to the single report. Every dataset may contain its own query. The list component can use its own dataset.

In this sample (build with iReport 4.5.1) I've placed 3 list components to the Title band:

<?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 is:

The report's design in iReport

The result will be (via iReport preview):

The report's result

like image 162
Alex K Avatar answered Mar 03 '23 14:03

Alex K