Wie übergebe ich aus einem Subreport eine Variable in den Mainreport?

maggo

Grünschnabel
Hallo zusammen,

da ich keine hilfe im Jasper Forum bekommen habe wende ich mich an euch und hoffe es kann mir jemand helfen.

ich habe einen main Report und zwei subreports. In diesen Subreports möchte ich nun den Wert eines Summenfeldes an den main Report übergeben.
Wie mache ich das?

Viele Beiträge erzählen was von Shared Variable oder von Prametern oder return values aber nirgendwo finde ich etwas das an einem Bespiel zeigt was genau zu tun ist.
Ein step by step guide wäre da wahnsinn.

Danke euch

da maggo
 
Hi,

ich hier nochmal, ich hab mir nun das Buch gekauft iReport 3.7.
Wenn ich nun wie im Buch angegeben einen Subreport erstelle und dort eine Variable anlege sollte ich diese über die Subreport Properties, return value übergeben können allerdings kann ich wenn ich auf ADD klicke diese Variable nicht auswählen.

Hat hier jemand eine Ahnung woran das liegen kann?


Gruß maggo
 
Hi,

ich hier nochmal, ich hab mir nun das Buch gekauft iReport 3.7.
Wenn ich nun wie im Buch angegeben einen Subreport erstelle und dort eine Variable anlege sollte ich diese über die Subreport Properties, return value übergeben können allerdings kann ich wenn ich auf ADD klicke diese Variable nicht auswählen.

Hat hier jemand eine Ahnung woran das liegen kann?


Gruß maggo

Hi, ohne Dein Problem genauer zu beleuchte, rate ich Dir, mal zu überprüfen, ob Deine Variable im richtigen Scope liegt.
 
Hi gorefest,

was verstehst du als scope? Ich bin leider ein frischling auf diesem Gebiet und auch nicht sehr bewandert was XML Code angeht.
Ich habe nun eine verfügbare Variable PAGE_COUNT ausgewählt und dann im XML Code diese Variable auf mein erstellte abgeändert aber leider funktioniert das nicht

Der XML Code sieht nun wie folgt aus

Code:
<?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="report2" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
	<queryString>
		<![CDATA[SELECT
     project_task_work."hours" AS project_task_work_hours
FROM
     "public"."project_task_work" project_task_work]]>
	</queryString>
	<field name="project_task_work_hours" class="java.lang.Double">
		<fieldDescription><![CDATA[]]></fieldDescription>
	</field>
	<variable name="variable1" class="java.lang.String"/>
	<variable name="project_task_work_hours_1" class="java.lang.Double" calculation="Sum">
		<variableExpression><![CDATA[$F{project_task_work_hours}]]></variableExpression>
	</variable>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="79" splitType="Stretch"/>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="61" splitType="Stretch"/>
	</columnHeader>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="130" splitType="Stretch">
			<subreport>
				<reportElement x="84" y="0" width="200" height="100"/>
				<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
				<returnValue subreportVariable="variable1" toVariable="variable1"/>
				<subreportExpression class="java.lang.String"><![CDATA["/root/report2_subreport1.jasper"]]></subreportExpression>
			</subreport>
			<textField>
				<reportElement x="334" y="88" width="170" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.Double"><![CDATA[$V{project_task_work_hours_1}]]></textFieldExpression>
			</textField>
		</band>
	</summary>
</jasperReport>

Wenn ich dann aber die preview öffne bekomme ich folgende Fehlermeldung

Code:
Errorfillingprint...Variablevariable1isnotassignablefromsubreportvariablevariable1 
net.sf.jasperreports.engine.JRException:Variablevariable1isnotassignablefromsubreportvariablevariable1 atnet.sf.jasperreports.engine.fill.JRFillSubreport.checkReturnValues(JRFillSubreport.java:1001) atnet.sf.jasperreports.engine.fill.JRFillSubreport.validateReport(JRFillSubreport.java:914) atnet.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:367) atnet.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:266) atnet.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:256) atnet.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:482) atnet.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummaryNoLastFooterSamePage(JRVerticalFiller.java:1060) atnet.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:1025) atnet.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:283) atnet.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:117) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:923) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:826) atnet.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:59) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) atcom.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:858) atorg.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) atorg.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) 
Print not filled. Try to use an EmptyDataSource..

Hoffe dir sagt das mehr als mir.


Beste Grüße

maggo
 
Zuletzt bearbeitet:
Hi gorefest,

ich habe nun noch die Variablen angepasst, so dass sie beide vom Typ double sind, nun bekomme ich als ausgabe an der Stelle der Variable im preview die Ausgabe NULL.

Gruß Marco
 
Ich nutze primär ireports. Dort lege ich für eine Variable (z.B. Summe) fest, in welchem Block sie gesetzt wird.

*raff*

Aaaah, Du nutzt einen Subreport. Habe ich noch nicht gebraucht, sorry also, falls ich Dich verwirrt haben sollte. Aber falls Du für Dein Problem eine Lösung findest, poste Sie doch mal hier.
 
Hi gorefest,

hehehe ja den nutzte ich. Mir ist bisher keine andere Lösung eingefallen wie ich aus mehreren SQL Abfragen diese Werte auf einen Report bekomme.
Gibt es da noch eine andere Lösung? Ich dachte evtl. geht das über Datasets aber das hab ich noch nicht so recht verstanden wofür die sind.

Also vielleicht gibt es ja auch einen anderen weg um folgendes Problem zu Lösen.
Ich möchte für die unterschiedlichsten Monate die durch ihr datum eingegränzt werden die gesamtstunden aller Mitarbeiter ausgeben lassen in Abhängigkeit von dem Projektnamen.
Zu letzt soll dann ganz unten noch die summe aller gesamstunden stehen.


Es soll dann am Ende ungefähr so aussehen.

Projekt 1 | Projekt 2 | Summe
Januar 300 | 150 | 450
Februar 200 | 50 | 250
.
.
.
.
------------------------------------------------------
Gesamt 500 200 700


Evtl. hat hier jemand einen guten Hinweis.


Gruß Marco
 
Ich arbeite gerne mit Bean-Datenquellen. Das hat den charmanten Vorteil, dass ich meine Daten in Objektform in den Report bekomme und auch mit Indirektionen ala detail.master.master.getAttribut() arbeiten kann.

Diese Beanquellen wiederum lasse ich mir mittels Hibernate befüllen. Der Nachteil ist, dass Du eine statische Funktion brauchst, die Dir Demodaten zurückliefert und diese wiederum in ein JAR packst, welche Du dann in iReport einbindest. Da sich die Testdaten aber kaum ändern, wenn die Objektstruktur steht, ist man mit 2-3 JAR-Erzeugungen dabei.

Grüße
gore
 
Hi gorefest,

das hört sich nach Java Programmierung an, da hab ich noch weniger Ahnung wie vom iReport und XML nämlich keine ;-)
Na dann werde ich mal weiter nach einer Lösung suchen müssen.


Gruß maggo
 
Zurück