# Erfahrung mit JasperReports



## uepselon (12. August 2004)

Hallo,

hat von euch jemand Erfahrung mit JasperReports?

Ich hab ein "kleines" Problem finde aber irgendwie keine Lösung. Also für den Fall das sich jemand auskennt: (Verwnede zum designen iReport)

Ich hab auf meinem Detail Band ein Textfeld mit fester Länge. Der Inhalt kann jedoch auch länger sein als die fixe Länge. Nun  wird der Text abgeschnitten wenn er zu lang ist.

Mach ich das Textfeld in der Höhe auf ca. 2 Zeilen, wird der zu lange Text in der 2 ten Zeile dargestellt. Soweit ist das auch gut. Nur wird bei kurzen Texten die 2te Zeile auch gedruckt (Leerzeile) was sehr unschön aussieht und ne Menge Platz kostet.

Wie kann ich also, bei Bedarf das Textfeld 2 Zeilig machen und wenn kein Bedarf ist alles einzeilig lassen?

Hoffe Ihr könnt damit was anfangen.

Gruß,
ueps


----------



## maria-rita (17. August 2004)

*Re: Erfahrungen mit JasperReports*

Erfahrung mit JasperReports

Hallo ueps,

>hat von euch jemand Erfahrung mit JasperReports?

Ja,

>Ich hab ein "kleines" Problem finde aber irgendwie keine Lösung. Also für den Fall das >sich jemand auskennt: (Verwnede zum designen iReport)

Dieses Programm verwenden wir auch in der Arbeit.

>Ich hab auf meinem Detail Band ein Textfeld mit fester Länge. Der Inhalt kann jedoch >auch länger sein als die fixe Länge. Nun wird der Text abgeschnitten wenn er zu lang ist.

>Mach ich das Textfeld in der Höhe auf ca. 2 Zeilen, wird der zu lange Text in der 2 ten >Zeile dargestellt. Soweit ist das auch gut. Nur wird bei kurzen Texten die 2te Zeile auch >gedruckt (Leerzeile) was sehr unschön aussieht und ne Menge Platz kostet.

>Wie kann ich also, bei Bedarf das Textfeld 2 Zeilig machen und wenn kein Bedarf ist >alles einzeilig lassen?

Du musst bei den einzelnen Felder wo dies auftritt markieren und da wo die Karteireiter sind nach dem Begriff Strech with Overflow suchen. Davor ist ein Kästchen und  da muss ein Häckchen rein. Dann wird der Text automatisch umgebrochen, wenn das Feld zu kurz ist. 

Ich hoffe das hilft Dir bei Deinem Problem weiter.

Viele Grüße

Marita Betz


----------



## c_krono (25. August 2004)

*Parameterabfrage*

Moin zusammen.

Bin ja mal froh noch ein paar Leute zu treffen die Jaspperreports mit iReport erstellen (müssen)   

Also ich hab das Problem, dass ich eine Parameterübergabe für z.B. einen Zeitraum von bis einstellen muss. Allgemeine einzelne Parameter (z.B. Lieferscheinnr, Kunde, etc) kann ich innerhalb unserer Java-Anwendung so übergeben, weil das nur ein Datensatz ist. Allerdings müsste ich für die Datenabfrage zum Beispiel eine Parameter-Eingabeaufforderung haben, weil diese Daten nicht im Dialog zu übergeben sind.

Ich habe vorher mit Crystal Reports gearbeitet, und da konnte man eine einfache Parameterabfrage einfach so einstellen. Ist das bei Jasper auch möglich, oder muss ich dafür ein eigenes kleines Java-Programm schreiben?

Wäre nett, wenn ihr euer Wissen diesbezüglich mit mir teilen würdet  

Vielen Dank. Gruß Chris

PS: Gibt es eigentlich ein deutsches Forum, das sich intensiver mit Jasper beschäftigt? Oder gibt es sonst eine Möglichkeit Fragen beantwortet zu bekommen oder sich immer über den neuesten Stand zu informieren?


----------



## maria-rita (25. August 2004)

Hallo Chris,


>Bin ja mal froh noch ein paar Leute zu treffen die Jaspperreports mit iReport >erstellen (müssen)   

Geht mir ebenso.

 Also ich hab das Problem, dass ich eine Parameterübergabe für z.B. einen Zeitraum von bis einstellen muss. Allgemeine einzelne Parameter (z.B. Lieferscheinnr, Kunde, etc) kann ich innerhalb unserer Java-Anwendung so übergeben, weil das nur ein Datensatz ist. Allerdings müsste ich für die Datenabfrage zum Beispiel eine Parameter-Eingabeaufforderung haben, weil diese Daten nicht im Dialog zu übergeben sind.

Ich weiss jetzt nicht genau, ob ich Dir helfen kann, wills aber mal versuchen.

Arbeitest Du mit einer Datenbank? Mit SQL? 

Wir ziehen unsere Daten z. B. für Listen aus der Datenbank mittels SQL und wenn wir Parameterwerte haben, also das z.B. unsere Leute dieses von - bis eingeben können sollen, dann wird in der SQL-Query glaub ich mit 
?<$P{Feldname}> geschrieben. (Wobei ich jetzt gerade nicht sicher weiss, ob die spitzen Klammern wirklich dabei sind oder nicht, da ich gerade nicht in der Arbeit bin, wo ich die Unterlagen habe.)

Dann erscheint in unserem Programm ein leeres Feld wo man dann den Wert eintragen kann. Im IReport muss natürlich dieser Parameter auch definiert werden unter Parameters. Und ein Feld im Report eingerichtet werden, wo die Eingabe von diesem Feld erscheinen soll z. B. in der Liste.   

Für unsere Serienbriefe haben wir von der Firma wo das Programm gemacht hat Parameter vorgegeben bekommen, z. B. für die Anrede, wenn ich diese dann in mein XML-File in die CDATA-Section mit z. B. $P{Feldname} einsetze kommt automatisch der richtige Wert rein. Aber wie das genau gemacht ist, kann ich Dir leider noch nicht sagen. Wir hoffen auch, das wir das mal gezeigt bekommen, weil uns öfter gerade bei den Serienbriefen noch Parameter fehlen, die wir momentan nicht selbst erzeugen können.

 Ich habe vorher mit Crystal Reports gearbeitet, und da konnte man eine einfache Parameterabfrage einfach so einstellen. Ist das bei Jasper auch möglich, oder muss ich dafür ein eigenes kleines Java-Programm schreiben?

Siehe oben, wenn Du damit nicht weiterkommst, kann ich Dir momentan auch nicht weiterhelfen. Vielleicht wäre es hilfreich Du würdest mal schreiben ob Du auf eine Datenbank zugreifst oder sonst wie an Deine Daten kommst.


 PS: Gibt es eigentlich ein deutsches Forum, das sich intensiver mit Jasper beschäftigt? Oder gibt es sonst eine Möglichkeit Fragen beantwortet zu bekommen oder sich immer über den neuesten Stand zu informieren?

Ein deutsches Forum habe ich leider auch noch nicht gefunden. Daran wäre ich auch interessiert. 

Es gibt aber ein englischsprachiges Forums unter 

http://sourceforge.net/forum/?group_id=36382

Viele Glück.

Viele Grüße

Marita Betz


----------



## c_krono (26. August 2004)

Morgen Maria,

also erstmal schonmal vielen Dank für die vielen Tips  
Ich benutze hier auf der Arbeit auch SQL-Anweisungen, um unsere Daten aus der Datenbank (Informix 7) für die Reports zu beschaffen. 

Wie schon gesagt funktioniert die normale Parameterübergabe ganz einfach indem ich halt im Report ein Parameterfeld definiere und das dann mit $P{Feldname} dann ins SQL-Statement einbaue. Dann kann ch auch aus der Anwendung heraus den Report ausführen, wenn ich im Dialog auch nohmal eine Feldzuweisung mache.

Wenn ich allerdings im Report anstatt $P{Feldname} ?<$P{Feldname}> oder ?$P{Feldname} eingebe, dann erscheint in der Anwendung beim starten des Reports eine Fehlermeldung, dass der das SQL-Statement nicht ausführen kann. Und da, wo ich die Parameterübergabe im Statement geschrieben habe steht dann je nachdem entweder be_nr=?<?> oder be_nr = . Muss ich da sonst noch was beachten vielleicht?

Das Forum bei Sourceforge hab ich auch gefunden, nur hab ich meistens keine Lust mich da auf englisch durchzuwurschteln  
Aber ich werd mich melden, wenn ich eins auf deutsch gefunden hab.

Ich werd mal ein bisschen weiter experimentieren hier. Falls dir noch was einfällt, wäre es nett, wenn du nochmal was dazu sagen köntest. 

Vielen Dank und einen wunderschönen Tag noch.

Gruß Chris


----------



## c_krono (26. August 2004)

noch ne Frage, die grade aufgekommen ist, wäre, ob man irgendwie noch mehr Schriftarten in den "pdf font name" einfügen kann. Oder gehen im pdf-Format Schriftarten wie z.B. Arial gar nicht?


----------



## maria-rita (26. August 2004)

Hey Chris,

ich bin jetzt in der Arbeit und habe mir mal ein SQL-Statement von uns rausgesucht. 

Wir haben dort manchmal z. B. so einen Text drin:

where sp.partNumber = '$P!{Seminarteil}'   das ist die Abfrage wo der Benutzer den Seminarteil eingeben kann in unserer Anwendung. Das was ich gestern geschrieben habe, war anscheinend nicht ganz richtig. Im ireport ist dann noch ein Parameter definiert der Seminarteil heißt. 

Das Forum bei Sourceforge hab ich auch gefunden, nur hab ich meistens keine Lust mich da auf englisch durchzuwurschteln  

Kann ich verstehen ;-) Geht mir genauso.

Aber ich werd mich melden, wenn ich eins auf deutsch gefunden hab.

Das wäre nett.

Ich werd mal ein bisschen weiter experimentieren hier. Falls dir noch was einfällt, wäre es nett, wenn du nochmal was dazu sagen köntest. 

Zu Deiner anderen Frage wegen den Fonts für die PDF-Datei. Du kannst doch im Ireport wenn du das Feld doppelt anklickst unter dem Reiter Fonts -> PDF Font Name noch andere als Helvetica auswählen. Allerdings Arial ist nicht dabei, da gebe ich Dir recht, aber Courier usw.

Vielleicht kannst Du mir auch bei einem Problem weiterhelfen.

Ich will mal versuchen es zu beschreiben.

Wir haben eine Tabelle Berufschulblock, da sind pro Berufsschule mehrere Klassen drin und innerhalb der Klasse sind unterschiedlich viele Blockzeiten dort beinhaltet.

Ich habe den Report unter Ireport jetzt schon soweit, das er als erstes die Berufschul-Nr und die Klasse bringt. 
Darunter die Blockzeiten hintereinander, aber wenn ich z. B. 6 Colums gemacht habe und bei der Klasse sind z. B. nur 4 Blockzeiten drin, so werden die übrigen Spalten einfach mit Blockzeiten der nächsten Klasse aufgefüllt, was ich ja nicht haben möchte.

Ich möchte bei jeder Klasse die Blockzeiten hintereinander haben und wenn eine neue Klasse kommt, dann soll er mir die Berufsschul-Nr und die Klasse oberhalb der Blockzeiten wieder angeben und die dazugehörenden Blockzeiten darunter.

Ich habe schon rumprobiert und habe zwei Gruppen mit BerufschulId und Klasse angelegt und dort auch schon verschiedene Einstellungen durchprobiert, aber ich bekomme es einfach nicht hin.

Hattest Du auch schon mal so ein Problem? Wie kann man das lösen?

Viele Grüße

Marita Betz


----------



## c_krono (27. August 2004)

Ja, also so ein Problem hatte ich noch nicht...
Warum hast du denn 6 Columns eingebaut? Eigentlich müsste es doch reichen, die zwei Gruppen (Berufsschule, Klasse) zu definieren, und dann in die Details das Feld mit den Zeiten einzufügen...
Dann dürften nur die Blockzeiten zu einer Klasse rauskommen. Ich weiß nicht genau ob das verständlich genug geschrieben war von mir  
Verstehst du denn was ich meine?


----------



## maria-rita (30. August 2004)

Hey,

>Ja, also so ein Problem hatte ich noch nicht...
>Warum hast du denn 6 Columns eingebaut? Eigentlich müsste es doch reichen, >die zwei Gruppen (Berufsschule, Klasse) zu definieren, und dann in die >Details das Feld mit den Zeiten einzufügen...
>Dann dürften nur die Blockzeiten zu einer Klasse rauskommen. Ich weiß nicht >genau ob das verständlich genug geschrieben war von mir  
>Verstehst du denn was ich meine?

Ich habe es jetzt mal versucht, wie Du das geschrieben hast, aber dann kommen die Blockzeiten (je nach Klasse können das bis zu 10 sein) untereinander und nicht nebeneinander. Inzwischen kommen  aber die Blockzeiten durch das Einfügen der coloums in den Report-Properties nebeneinander und das obwohl ich nur eimal in der ersten coloum das Feld Blockzeit stehen habe. Auf jeder Seite wird mir darüber zusätzlich noch die Berufsschule und die Klasse angezeigt.

Hast Du schon mal was mit subreports zu tun? Da bin ich jetzt gerade dran.

Ich habe jetzt mal in einen Hauptreport einen subreport eingefügt, aber wenn ich dann den Hauptreport aufrufe (mit dem eigefügten subreport), dann kommen keine Daten raus, beim subreport. Es erscheint zwar der Platz wo die Daten stehen sollten, aber sonst nichts. Irgendwie hängt das noch mit der Parameterübergabe zwischen Hauptreport und subreport zusammen, aber das habe ich noch nicht rausbekommen. 

Wie sind Deine Erfahrungen damit. Es ist schade, dass nicht noch mehr mitdiskutieren.

Viele Grüße

Marita


----------



## c_krono (31. August 2004)

Hey, 
freut mich das du das mit den Blckzeiten hinbekommen hast. Ich schreibe normalerweise immer alle Details untereinander, deshalb wusste ich dass nicht genau zu beantworten  

Also die Subreports sind schon ein harter Brocken. Aber ich habe schon ein paar in Benutzung. Also um die Unterberichte aus ireports aus zu starten, musst du folgendes beachten:

1. steht in der Subreport Expression in den Properies im eingebundenen Subreport der Name des Subreports in "". Also z.B. "leergut_subartikel_s.jasper"

2. musst du die Datei startup.bat, die du immer öffnest (liegt bei mir unter D:\Programme\iReports\noAnt\startup.bat), mit nem Editor öffnen. Also z.B. rechte Taste da drauf, und dann auf "Bearbeiten" klicken. Da steht dann irgendwie sowas drinne: 

@echo off
cd ..

set CLASSPATH=%CLASSPATH%;.\classes\
rem Add all jars....
for %%i in (".\lib\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\lib\*.zip") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.zip") do call ".\noAnt\cpappend.bat" %%i

java it.businesslogic.ireport.gui.MainFrame

Danach musst du dazwischen den Classpath setzen, also einen Pfad angeben, indem dein Subreport dann liegen muss. Ich habe bei mir zwei verschiedene angegeben, weil ich mehrere Subreports in mehreren Ordnern liegen habe. Also sieht das bei mir dann so aus: 

@echo off
cd ..

set CLASSPATH=%CLASSPATH%;.\classes\
rem Add all jars....
for %%i in (".\lib\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\lib\*.zip") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.zip") do call ".\noAnt\cpappend.bat" %%i
* set CLASSPATH=%CLASSPATH%;E:\datacon-13000\projekte\dtc-reports-jasper\entwicklung\Datacon
set CLASSPATH=%CLASSPATH%;E:\datacon-13000\projekte\dtc-reports-jasper\entwicklung\Martens\Bestellung * 

java it.businesslogic.ireport.gui.MainFrame

versuch das dann mal zu starten. Vielleicht klappt das dann direkt schon. 

Um das dann in der Anwendung starten zu können, musst du mit eurem Programmierer reden, dass der auch in die Anwendung so einen Classpath reinbaut, zu einem Ordner auf dem Server z.B., in den ihr dann immer die Subreports alle reinlegt. Ich hoffe ich konnte di ein wenig helfen


----------



## maria-rita (31. August 2004)

*Re: Erfahrungen mit Jasperreports*

Hallo,

vielen Dank für Deine Antwort. 

Ich weiss noch nicht, ob mir das was Du geschrieben hast weiterhilft, weil ich ja den Subreport schon in den Hauptreport eingefügen kann und Ihn auch dort sehe und bearbeiten kann. 

Das geht schon, nur bei der Erzeugung vom PDF-File kommen keine Daten raus, welche wenn ich den Subreport allein aufrufe erscheinen. 

Viele Grüße

Marita Betz


----------



## c_krono (31. August 2004)

Also bei mir war in der anwendung mmer das Problem, dass der den Subreport nie gefunden hat...

Von wo aus führst du denn den huptreport aus? Aus eurer Anwendung, oder aus ireport?


----------



## maria-rita (31. August 2004)

*Re: Erfahrungen mit Jasperreports*

Hey,

bist Du aber schnell.

Ich arbeite hier mit dem ireport 0.2.2

Ich habe nur eine Ireport.bat gefunden und in der steht bis jetzt nur:

@echo off

set JAVA_HOME=C:\j2sdk1.4.2_03
set ANT_HOME=C:\programme\java\apache-ant-1.6.0
set IREPORT_HOME=C:\programme\java\iReport-0.2.2

rem %ANT_HOME%\bin\ant javadocs
%ANT_HOME%\bin\ant iReport

Sonst nichts. 

Ich werde jetzt mal das Verzeichnis angeben, wo der Subreport liegt, vielleicht hilft das ja wirklich. Danke für Deine Hilfe.

Auf einem anderen Rechner habe ich aber eine startup.bat, bin mir aber nicht ganz sicher ob das dann die gleiche Version des Ireports ist. 

Ich teste das mit dem Hauptreport (mit eingefügten Subreport) erst in Ireport selbst, und erst wenn es funktioniert wird der Report in die Anwendung überspielt.

Viele Grüße

Marita Betz


----------



## c_krono (31. August 2004)

Ja, ich krieg ja immer ne Email ewnn du hier was reinschreibst  

Also führst du im ireport designer den Report immer als pdf aus? Ich benutze eigentlich immer diesen JRViewer. Ja, is eigentlich egal wie die .bat-Datei heist. Ich meine uf jeden Fall die, die du immer ausführst um ireports zu starten. Da müssten dies Pfade eigentlich eingetragen werden. Ist genau das gleiche, als wenn du ein Bild oder ein Logo oder so einfügen möchtest...


----------



## maria-rita (31. August 2004)

*Re: Erfahrungen mit Jasperreports*

Hey,

>Ja, ich krieg ja immer ne Email ewnn du hier was reinschreibst  

ich auch ;-)

Ist nur gut, dass ich von der Arbeit aus auch auf meine private Mail-Datei zugreifen kann, sonst würde ich das immer erst nach der Arbeit erfahren ob jemand geschrieben hat.

>Also führst du im ireport designer den Report immer als pdf aus? 

Ja, bei mir wird dann immer eine PDF-Datei erstellt, wenn ich im Ireport die xml-Datei ausführe.

Ich benutze eigentlich immer diesen JRViewer. 

Wie bindest Du diesen ein? 

Ja, is eigentlich egal wie die .bat-Datei heist. Ich meine uf jeden Fall die, die du immer ausführst um ireports zu starten. Da müssten dies Pfade eigentlich eingetragen werden. Ist genau das gleiche, als wenn du ein Bild oder ein Logo oder so einfügen möchtest...

Wenn ich Bilder einfügen will, dann gebe ich den Pfad direkt in der xml-Datei mit an. Und dann kommt das Bild auch. Das ist schon so eingestellt. 

Ich habe jetzt mal das mit dem SET Classpath gemacht und dort mein Verzeichnis angeben, wo der Subreport und auch der Hauptreport liegt, aber die Daten kommen trotzdem nicht.

Ich bastle da am Donnerstag weiter. 

Viele Grüße

Marita Betz


----------



## c_krono (31. August 2004)

Also ich arbeite mit de Version 0.2.3.0 und bei mir ist das so, wenn ich in dem Designer bin, kann ich oben uner dem Menüpunkt "Build" mehrere verschiedene previews auswählen. Bei mir stehen da folgende zur Auswahl

pdf, html,java 2D, Excel, CSV und eben dieser JRViewer

Also Subreports sind wie gesagt ziemlich kompliziert... Ich hab da auch ewig gefummelt, bis ich das soweit hatte. Und das muss ich bei jedem neuen Subreport aufs neue machen, weil ich mir nie merken kann, was ich beim letzten mal anders gemacht hab


----------



## c_krono (18. Oktober 2004)

Moin,
ich hab mal wieder eine Frage zum Umgang mit Jasper Reports...
Ich habe schon zwei Gruppen in meinen Report eingebaut und hatte aber eine vergessen. Jetzt habe ich die Gruppe, die ich vergessen hatte zwar eingefügt, die soll aber nicht an dritter Stelle stehen, sondern noch über den beiden anderen Gruppen stehen. Kann man das noch im nachhinein verschieben?

Gruß Chris


----------



## maria-rita (18. Oktober 2004)

Hallo Chris,

ich denke Du musst die beiden Gruppen zuerst wieder löschen und dann die Gruppe wo Du zuerst vergessen hast einfügen und dann die anderen zwei Gruppen wieder einfügen.

Was Du evtl. auch versuchen kannst, z. B. mit dem Peters XML-Editor das xml-File aufrufen und da die Gruppen im xml-File selbst tauschen.

Müsste evtl. auch gehen. Das machen wir z. B. auch wenn wir die Reportgröße ändern
möchten. Das geht im Ireport selbst ja auch nicht.

Ich hoffe Du kannst damit was anfangen.

Welchen Editor benutzt Du denn?

Viele Grüße

Marita Betz


----------



## c_krono (18. Oktober 2004)

hey Maria,
danke für deine Tips wieder  

Ich hab das heute mittag auch schon geschafft. War ein gutes Gefühl   
Ich hab das dann auch im Quellcode direkt geändert. hab das mit dem Text Pad geöffnet und dann manuell geändert. Weil die beiden Gruppen löschen war mir dann auch bischen zuviel arbeit *gg*

Aber danke für deine nette Hilfe. Einen wunderschönen abend noch. Liebe Grüße

Chris


----------



## c_krono (2. November 2004)

Ich hab mal wieder ne Frage..  ;-) 
Gibt es eine Möglichkeit auf nem Report das aktuelle Datum und die aktuelle Uhrzeit auszugeben?

Und mal was generelles: Ich hab festgestellt, dass wenn man irgendwelche Java-Anweisungen für bestimmte Felder eingibt, dann versucht der das immer in einen Einzeiler umzuwandeln, also will der immer einen Rückgabewert haben. Bis jetzt konnte ich das immer so umbauen, doch wenn ich mal komplexere Befehle da eingeben muss, gibts da ne andere Möglichkeit die da einzubauen?

MfG
Chris


----------



## maria-rita (3. November 2004)

Hallo Chris,

entschuldige, aber anscheinend habe ich keine Mail von Deiner letzten Eintrag bekommen oder übersehen.

In MS-SQL kann man mit getdate() das aktuelle Datum bekommen, incl. der Uhrzeit. 

Dann Konvertieren mit convert oder datediff soviel ich noch auswendig im Kopf habe.

Wie es unter Jasper-Reports selbst gemacht wird, kann ich Dir erst morgen schreiben, da bin ich wieder in der Arbeit.

Das mit den Java-Anweisungen kann ich nicht so ganz nachvollziehen, was Du damit meinst.

Kannst Du da mal ein Beispiel hier einfügen.

Ich kann Dir ja mal morgen, wenn ich dazu komme, von uns ein Beispiel schreiben.

Momentan habe ich ein ganz anderes Problem. 

Ich möchte eine Seminarhinweis basteln mit Ireport.

Die Inhalte der verschiedenen Bereiche sind aber unterschiedlich lang. Der Seminarhinweis ist zudem zweispaltig.

Die Leute aus München haben mir geschrieben, dass ich alles in die erste Spalte schreiben soll. Das klappt aber nicht so ganz.

Wie kann ich z. B. verhindern, dass ich die Überschrift z. B. in die erste Spalte bekomme, den zugehörigen Feldinhalt aber in die zweite Spalte.

Ich habe überall "print in the first whole band" angegeben, aber das klappt auch nicht. Was macht er da eigentlich?

Außerdem habe ich noch das Problem, dass mir ein Feld plötzlich 
in beiden Spalten erscheint, obwohl es nur in der ersten Spalte drin ist. Dadurch wird mein ganzer Seminarhinweis verhaut. Es ist zum Weinen :-(

Hast Du (Ihr) eine Idee, wie ich das verhindern kann?

Vielen Dank für Deine (Eure) Hilfe.

Viele Grüße

Marita Betz


----------



## c_krono (3. November 2004)

Moin Marita,
also ich hab das mit dem Datum und der Uhrzeit schon gelöst gehabt. Aber danke trotzdem   
Ich hab ne Variable Date erstellt und in die variable definition new Date() eingetragen und dann in dem Variablenfeld in dem Pattern Feld dd.MM.yyyy hh:mm eingetragen. Funktioniert einwandfrei   

Zu deinem Problem. Also ich hab noch nie mit Spalten gearbeitet... Kannst du mir evtl. mal nen Screenshot schicken doer sowas wie das aussieht, bzw. aussehen soll? Wenn das mit euerem Betriebsgeheimis zu vereinbaren ist   
Sonst kann ich mir jetzt nicht wirklich vorstellen was da falsch sein kann.. Meine Emailadresse hab ich dir per PN geschickt. Ich hoffe dir dann weiterhelfen zu können.

MfG
Chris


----------



## c_krono (3. November 2004)

Achso, ein Beispiel für das was ich meinte wäre z.B.:

für eine Anweisung die ich für ein Feld brauche, würde die Java-Anweisung so aussehen:

if ({artikel.art_preispro} == null || {artikel.art_preispro}.doubleValue() == 0d) {Menge}=0;}
else if ({arechnung.ar_kz_re} != null && {arechnung.ar_kz_re}.equals("R"))
{ {Menge} = {arechpos.arp_menge};}
else {Menge} = {arechpos.arp_menge}.doubleValue()*-1;

weil das aber mehrere Befehle sind, musste ich daraus folgende Anweisung machen:

(($F{art_preispro} == null || $F{art_preispro}.doubleValue() == 0d) ? new Double(0d) :
(($F{ar_kz_re} != null && $F{ar_kz_re}.equals("R")) ? $F{arp_menge} : new Double($F{arp_menge}.doubleValue()*-1)))

und das wird bei größeren Anweisung echt schwierig. Allerdings werde ich so schwieige Anweisungen wohl erstmal nicht brauchen. Deshab ist das nicht ganz so wichtig..


Kann man in die Feldanweisungen auch was anderes ausser Java-Anweisungen reinschreiben?


----------



## c_krono (30. November 2004)

Hallöchen, ich bins mal wieder
Hast du dein Problem schon lösen können? Ich konnte in letzter Zeit nicht viel machen weil ich sehr viel zu un hatte und jetzt letztens noch 3 WochenUrlaub hatte und dann Abschlussprüfung hatte   

Ich habe mal wieder ein kleines Problemchen. Vielleicht weißt du da ja eine Antwort drauf...
Also die Reports die ich mit Jasper baue, starten wir aus unserer Anwendung und erstellen daraus ein pdf-Dokument. Das funktioniert auh ganz toll. Nur ein Kunde von uns will immernoch an den Reports bischen was ändern und benutzt deshalb Adobe Acrobet. Das ändern klappt auch gut, weil man mit dem TouchUp-Textwerkzeug in die einzelnen Felder reinkommt und die bearbeiten kann. 
Wenn man die einzelnen Felder aber mit dem TouchUp-Objektwerkzeug verschieben will, macht der nicht um die einzelnen Objekte inen Rahmen, sondern einen großen Kasten über fast den ganzen Report und verschiebt dann verschiedene Objekte gleichzeitig. Ich kriege einfach nicht raus wie man das einstellen muss damit der jedes einzeln nimmt, oder erkennt. Und ich hab auch noch nicht den Zusammenhang erkannt zwischen den Objekten die er gleichzeitig auswählt. Die sind ienfach von mittendrin irgendwo. Das macht alles irgendwie keinen sinn   

Hast du vielleicht eine Idee?

Gruß
Chris


----------



## maria-rita (2. Dezember 2004)

Hi Chris,

ich werde versuchen morgen mir da Infos zu besorgen, die Dir evtl. weiterhelfen können. Ich habe damit leider keine Erfahrung, weil wir die PDF Files nicht bearbeiten. Aber das kann ich ja auch mal ausprobieren, falls wir die dafür erforderliche Software haben.

Ich hatte gerade eine längere Nachricht an Dich geschrieben, aber immer wenn die Verbindung wieder getrennt wird, muss ich mich neu einloggen und dann ist alles was ich schon geschrieben hatte, weg :-(

Dann bis morgen. 

Viele Grüße

Marita


----------



## c_krono (2. Dezember 2004)

Hey marita, 
danke für deine Hilfe aber ich habe das schon rausgekriegt.  Ich hab halt einfach mal alle Einstellungen ausprobiert. Ich kapiere zwar nicht wieso das so funktioniert, aber das klappt nur, wenn die einzelnen Objekte folgende Einstellungen haben:
nicht Transparent &
nicht "remove line when blank"
find ich ziemlich merkwürdig das ganze aber ist halt nunmal so   
Aber danke trotzdem für die Antwort.
Was arbeitest du eigentlich genau? Also was für ne Firma seid ihr und was ist deine Aufgabe da?

Liebe Grüße
Christian


----------



## neumann (28. Januar 2005)

in unserer Firma soll demnächst JasperReports als Tool zur Erzeugung von Listen verwendet werden und ich habe die Ehre, mit IReport die Templates erstellen zu dürfen („Machen Sie mal....“).  



Ich bin froh, hier ein Forum gefunden zu haben, in dem man sich mit anderen Anwendern austauschen kann. Wobei in dieser Phase ein Austausch wohl nur in eine Richtung führt (von Ihnen/Euch zu mir).



Aber jetzt die eigentliche Frage: gibt es eine deutschsprachige  Dokumentation zu IReport ? Manches ist für einen eher fachlich als technisch orientierten Anwender nicht unbedingt selbsterklärend (z.B. die Group-Funktion).



Ich hoffe, ich habe mich mit dieser Frage nicht gleich disqualifiziert. :-( 


Gruß an alle
neumann


----------



## c_krono (28. Januar 2005)

Hallo Neumann,

ja ein deutsches Forum für Jasper-Reports zu finden ist nicht grade einfach 
Also da wo so ziemlich jedes Problem oder jeder Bug besprochen wird ist http://sourceforge.net/forum/?group_id=36382. Allerdings ist das auf englisch alles.

Eine deutsche Dokumentation für ireports hab ich noch nicht gefunden. Ich habe mir so ziemlich alles selber beigebracht und einiges war auch so wie bei Crystal Reports (damit habe ich vorher gearbeitet)...

Was für in problem mit den Groups hast du denn genau? Also die gruppierung ist nicht allzu schwer. Was genau willst du denn wissen? Mit welcher Version von IReports arbeitest du denn? Ich arbeite mit 0.4.0 und compiliere das ganze mit der Version 0.2.3.0 weil ich das Gefühl habe das 0.4.0 nicht richtig compiliert... 

Also dann sag mal was du wissen willst und ich versuch mal ne Lösung zu geben ;-)

Gruß
Christian


----------



## neumann (31. Januar 2005)

Hallo Christian,

danke für die schnelle Antwort. Bin ganz überrascht, dass es hier so fix abgeht.

Also, das "Problem"....: wir arbeiten hier nicht mit einem unmittelbaren Datenbankzugang. Die Ergebnisse von Batchläufen werden als csv-Dateien + Parametern übergeben.

Ein Datensatz in der Datei beinhaltet Stammdaten (z.B. die Adresse einer Firma) und je eine Buchung. Bei 10 Buchungen also 10 Datensätze mit jeweils gleichen Adressdaten und unterschiedlichen Buchungssätzen (das ist schon mal nicht so schön). Wenn ich nun eine Aufstellung mache, setze ich die Informatinen aus den Datensätzen in den Detail-Bereich und versehe die Felder mit den Stammdaten mit der Eigenschaft "Leer, wenn Wiederholung". Dann kann ich schon mal eine halbwegs ordentliche Aufstellung abbilden.

Lieber wäre es mir, wenn ich je Arbeitgeber gruppieren könnte, also eine Überschrift je Arbeitgeber habe und dann die Buchunssätze anzeige....idealerweise auch mit einer Sortierung (z.B. nach Datum). Wobei die Sortierung auch noch vor Erstellung der csv-Datei erfolgen kann.

Wenn die Gruppierung so funktionieren könnte, hätte ich mehr Platz in der Zeile der Buchungssätze, weil ich dann die "versteckten" Stammdaten nicht mehr hätte.

Ist das der Ansatz der Gruppierung ? Oder bin ich da auf einer völlig falschen Fährte und müsste mit Subqueries arbeiten (was mir erst recht nur Fragezeichen ins Gesicht meißelt  ) ?

Vorab schon mal vielen Dank !
Lieben Gruß
neumann


----------



## c_krono (31. Januar 2005)

Moin Neumann,
Also die Idee mit deiner Gruppe ist schonmal sehr gut. Ich weiß jetzt nicht genau ob das mit deinen csv-Daten genauso funktioniert wie mit meinen direkt aus der Datenbankbezogenen Feldern. Du kannst bei ireports Im Menü "View" -> "Report Groups" einfach eine neue Gruppe hinzufügen und dort in das Feld "Group Expression" das Feld eingeben nachdem du gruppieren willst (z.B. kunde_nummer) oder so. Je nachdem wie das Feld bei dir heist. Wenn du also nach dem Feld kunde_nummer gruppieren willst gibst du das wie folgt in das Feld "Group Expression" ein:

$F{kunde_nummer}

Dann erstellt der automatisch einen Group_Header und einen Group_Footer in der Ansicht. Damit kannst du dann jetzt arbeiten. Hast du auch eine Report query eingegeben? Dort kannst du dann die typische SQL-Syntax zur sortierung benutzen. also z.B.

SELECT * FROM buchung WHERE blabla=xy ORDER BY datum


Guck mal ob das so bei dir funktioniert.
MfG
Christian


----------



## FrechDax1984 (18. Februar 2005)

*Summenbildung im Detail-Bereich*

Hallo,
 hat jemand Ahnung, wie ich in iReport eine Summe im Detailberich pro Zeile bilde!
 z.B.
 Kosten gesamt       Kosten variabel     Kosten fix
 5000                                2500                 2500
 2000                                1000                 1500
 Wie berechne ich die "Kosten gesamt"?
 Vielen Dank im Voraus.


----------



## c_krono (21. Februar 2005)

moin FrechDax,
also so wie ich das verstanden habe, müsstest du eine Variable erstellen. Sagen wir mal deine Felder heißen "kos_fix", "kos_var" und dazu erstellst du eine Variable "kos_ges".
Die Variable muss folgende Einstellungen haben:
Variable Name: kos_ges
class type: java.lang.Double
Calculation type: system
reset type: none
variable expression: new Double($F{kos_fix}.doubleValue() + $F{kos_var}.doubleValue())
Alle anderen Felder leer lassen. Diese Variable dann in die Detailspalte einfügen und dann müsste das denke ich laufen.


----------



## c_krono (28. Februar 2005)

Hallo, ich bins mal wieder.

Ich hab ien Problem bei einem Report und ich frage mic ob einer von euch mir dabei vielleicht helfen kann.
Also ich soll einen Barcode EAN128 in den Report einfügen. Mit der iReport Version 0.4.1 kann man ja einen Barcode sehr einfach einfügen. Nur leider kann man als Barcodetyp EAN128 nicht auswählen. Hat einer von euch eine Ahnung wie ich es schaffe einen EAN128 Barcode einzufügen? Wäre nett wenn ihr euch mal Gedanken dazu machen könntet. Vielen Dank schonmal.

MfG
Christian


----------



## anroo (10. März 2005)

Hallo Leutz,

ich hab ein Problem mit den SubReports.
Meine Frage an euch ist, wie bekomme ich die Daten von dem MainReport zu den Subreport. 
Die Daten werden nicht direkt von JasperReport per Sql gefüllt, sondern die Daten werden von Java gefüllt. 

Ich würd mich freuen, wenn mir jmd helfen könnte, ich stehe so ziemlich auf den schlauch.

Gruß

AR


----------



## c_krono (10. März 2005)

Also ich mache das immer so wenn ich daten an den SubReport übergeben will dann erstelle ich im Main Report in den Eigenschaften von dem Subreport-feld einen oder mehrere Parameter. Dem Parameter gibt man dann nen Namen (z.B. p_aufnr) und schreibt in die Expression dann das Feld rein welches man als Parameter übergeben will (z.B. $F{auftragsnummer}) 

Im Subreport muss man dann nur noch einen Parameter erstellen der genauso heist wie der Parameter den man in dem eigenschaftenfeld vom Subreport erstellt hat. also in dem Fall dann auch p_aufnr. Und mit dem Feld kann man dann im Subreport arbeiten.

Ausserdem muss im Main Report in den Eigenschaften vom Subreport in dem Feld Connection / Datasourcee Expression noch in der Combobox Use connection expression ausgewählt sein und darunter in dem Feld $P{REPORT_CONNECTION}.

Ich hoffe ich konnte ein wenig weiterhelfen.
Gruß
Christian


----------



## anroo (10. März 2005)

Hei, super danke für die schnelle Antwort.

Das hat mich jetzt schon ein Stück weiter gebracht. Aber leider hab ich ein weiteres Problem.
Folgene Ausgangssituation: 
Ich hab im Mainreport eine Wiederhollung von Details. Also für jede Adresse werden die Daten angezeigt. Ich möchte jetzt eine zweite unabhängig von Details(Adressen)  haben. 

So war meine Schlussfolgerung, wenn ich ein Subreport einbinde, habe ich dort eine unabhängige Wiederhollung vom Mainreport.

Wie bekomme ich jetzt diese Fields vom Subreport gefüllt oder kann ich in den Fields auch Parameter benutzen? 
Weil ich bin immer davon ausgegangen, das Parameter wie final Objects sind. 
Oder gibt es eine andere Lösung?

Wird mich freuen, wenn mir jmd aus meinem Desaster helfen könnte.

Und danke nochmals für die vorige schnelle Antwort.

Gruß

Ar


----------



## anroo (11. März 2005)

Hi,

ich bins nochmal, gibt es vielleicht die Möglichkeit zwei JasperPrints zu einem zu fügen. Das wäre nähmlich die Lösung meines Problems. 


Gruß

AR


----------



## c_krono (11. März 2005)

Ach ist doch kein Thema. Ich helf wo ich kann.

Also die einzige Möglichkeit von der ich weiß um zwei Reports zuzsammenzufügen ist einen Subreport zu erstellen. Den Subreport kann man genauso benutzen wie einen ganz normalen Report. Man kann dort eine ganz eigene Query einbauen mit eigenen Parametern die dann sich auf Werte aus dem Main-Report beziehen und man kann dort eigene Variablen erstellen also alles was man will. Ich könnte mir sogar vorstellen das man im Subreport noch nen Subreport einbauen kann. Also wenn ich zwei Querys haben wollte oder Werte aus zwei verschiedenen tabellen die nicht so gut zusammenhängen oder wenn ich mit zwei verschiedenen Zugriffen auf eine Tabelle gucken wollte habe ich das immer mit nem Subreport hinbekommen. 

Wo sollen die Details aus dem Subreport denn erscheinen auf dem Mainreport? Genau neben den Adressdaten?


----------



## anroo (11. März 2005)

Hi,

die sollen eigentlich nach der summary kommen und die sollen eine eigene Wiederhollung haben. Und so wie ich des jetzt verstanden habe, bilde ich gruppen, aber diese gruppen wieder hollen sich um details. Also würde es auch nicht mit Subreport gehen.
Es soll folgendermassen aussehen:

        MainReport:
-pageheader
--summary_gruppe
---antrag_gruppe_header
----detail                       --> diese wird Wiederhollt
---antrag_gruppe_footer
--summary_gruppe  --> indem befindet sich das subreport
-

       Subreport:
--text_gruppe_header   --> diese wird Wiederhollt
---detail                       --> diese wird Wiederhollt
--text_gruppe_footer

Auch wenn ich den Subreport mit den Mainreport füllen kann. Sobald ich die Fields vom Mainreport fülle und danach die vom Subreport, wiederhollt er meine Details vom Mainreport, was ich eigentlich ja nicht bezwecken wollte. 

Ich hoffe. ich habe das problem einigermassen gut erklärt. 

Gruß AR


----------



## anroo (11. März 2005)

Hei,

ich hab die Lösung, juppiee. 
Man kann in JasperPrint Pages hinzufügen. So hab ich halt die Seiten von dem Subreport zu dem MainReport hinzugefügt.

Juppiieee.

Und danke nochmals.


----------



## c_krono (11. März 2005)

Hey das freut mich. Hab ich gerne gemacht.

Ich hatte auch mal so einen Fall den hab ich folgendedrmaßen gelöst:

Zuerst sollte ein Lieferschein mit allen Details auskommen und unten drunter eine Leergut liste mit allen Details. Das hab ich so gemacht:

auftrag_header
aufpos_header
artikel_header
details
artikel_footer
aufpos_footer
und dann im auftrag footer den subreport eingebaut

subreport:
pageheader
auftrag_header
details
auftrag_footer


das klappt auch ganz prima. Aber gut das du auch ne Lösung gefunden hast. viel Erfolg noch.

Gruß
Chris


----------



## maria-rita (11. Juli 2005)

Hallo Christian,
hallo an alle,

ich habe heute ganz erstaunt festgestellt, dass wieder neue Beiträge zum Jasper-Report gekommen sind. Ich dachte man bekommt immer Nachricht wenn ein neuer Beitrag zu diesem Thema kommt. Ist aber anscheinend nicht so. :-(

Heute habe ich auch mal wieder ein Problem, vielleicht kann mir jemand von Euch weiterhelfen.

Gibt es eine Möglichkeit in Jasper-Report Text und Bild zu verknüpfen?

Bei uns in der Firma müssen Zertifikate ausgedruckt werden, wo einmal die Definitionen zwischen männlichen und weiblichen Teilnehmern anders sind und dahinter soll gleich ein Logo mit dran gehängt werden.


Momentan haben wir jeweils ein Report für die männlichen Teilnehmer und ein Report für die weiblichen Teilnehmer. Es wird dadurch ziemlich unübersichtlich.

Meine Idee war, dass ich eine Variable mache, wo die Anrede abfrägt und da dann wenn dort in der Anrede Herr steht, dann soll er den männlichen Titel + Bild rausgeben ansonsten den weiblichen Titel + Bild. 

Aber das geht so nicht. Ich habe es schon mit + und && zwischen den Titel und Bild probiert.

Es wäre toll, wenn jemand von Euch mir weiterhelfen könnte.

Vielen Dank für Eure Mühe.

Viele Grüße

Marita Betz
Das Problem ist ja hauptsächlich das der Titel ein Text ist und das Bild ein Image.


----------



## elmato (11. Juli 2005)

Wenn du mit Verknuepfen meinst wie man ein Bild mit JasperReports einfuegt dann kann ich dir helfen....
Du musst einen neuen Parameter anlegen vom Typ jav.lang.Object

```
<parameter name="IMGAGE" class="java.lang.Object" />
```
und dann in deinem Band auf Image casten

```
<imageExpression class="java.awt.Image">
<![CDATA[ $P{IMGAGE} ]]> 
</imageExpression>
```
dann musst du halt in deiner Java Aplikation einen Parameter gennant Image uebergeben

```
HashMap map = new HashMap();
Image img = deinImage;
map.put("IMAGE", img);
//und dann die HashMap deinem JasperFillManager uebergeben
```
ich wuerde das gleiche evt. auch fuer die maennlich/weiblich Geschichte machen, ueber Parameter, dann kann dein Java Programm entscheiden was maenlich/weiblich ist und du uebergibst einfach nur die Parameter

```
//im jrmx file
<parameter name="gender" class="java.lang.String" /> 

//in der Java Aplikation
boolean gender = false; //z.b. fuer maenliche Teilnehmer
HashMap parameter = new HashMap();
...
if(gender == true){
parameter.put("gender", "Frau");
}else{
parameter.put("gender", "Herr");
}
JasperFillManager.fillReport("deinReportFile", parameter, deineDataSource());
```
Ansonsten, kannst du mal nach groovy googeln, das ist eine Scriptsprache fuer JasperReports(oder kann zumindest in JasperReports verwendet werde) damit kenne ich mich jedoch nicht aus, evt. koennte man das ganze auch mit den criplets von JasperReports machen, aber damit habe ich leider auch keine Erfahrung ;(
So ich hoffe ich konnte dir ein wenig weiterhelfen 
mfg
elmato


----------



## maria-rita (12. Juli 2005)

Hallo elmato,
hallo an alle,

vielen Dank für Dein Posting.

Dein Ansatz ist interessant, aber ich kann nichts in meine Java-Applikation selbst was eintragen. Wir haben ein fertiges Schulprogramm hier, wo wir zwar Parameter über den Bildschirm eintragen können, aber das wars dann auch schon. 
Und das Bild wo mit an den Text hinten angehängt werden soll, liegt auf einem bestimmten Platz, welchen man mit  /xxx/yyy/Bild182px_breit.gif" von dort einliest.

Es handelt sich um ein .gif Datei die als Bild hinten angehängt werden soll. Es ist ein Logo.

Das mit dem HashMap map = new HashMap()
Image img = deinImage;
map.put("IMAGE", img);
usw. werde ich wohl nicht machen können.

Ich habe ja nur die Möglichkeit im JasperReport die Daten entweder durch eine SQL-Abfrage aus der Datenbank zu holen oder mittels Variablen kann ich Abfragen machen wo ich dann mit ein wenig Java-Code einfügen kann. Aber ob ich da den obigen Code von Dir einsetzen kann, weiss ich nicht. Bis jetzt habe ich da nur mit sogenannten if Abfragen gearbeitet.  

z. B. 

<variable name="VonBis" class="java.lang.String" resetType="None" calculation="Nothing">
<variableExpression><![CDATA[$P{paraSeminarPartStartDate}.equals($P{paraSeminarPartEndDate})
?"am " + $P{paraSeminarPartStartDate}
: "vom " + $P{paraSeminarPartStartDate} + " bis " + $P{paraSeminarPartEndDate}]]></variableExpression>
	</variable>

Bis jetzt haben wir noch keinen Parameter Image im XML-Code das könnte ich noch einfügen.

Auch das mit dem <imageExpression class="java.awt.Image">
<![CDATA[$P{IMAGE}]]>
</imageExpression> 
kann ich ja im XML-Code noch einfügen.

Was mir dabei nicht klar ist, wie bekomme ich dann den Text und das Bild hintereinander und wie kann ich dabei erreichen, dass wenn der Text einige Zeichen länger wird, dann das Bild immer gleich weit weg ist vom Text?

Bis jetzt wurde das Bild genau dahinter positioniert (In x und y wurde genaue Positionsdaten hineingeschrieben). Was aber eben erforderlich machte, das wir für männliche und weibliche Personen jeweils ein extra Zertifikat haben, da die Positionierung des Bildes nicht automatisch sich ändert, wenn der Text davor länger ist.

Oder kann man das irgendwie steuern? 

Bis jetzt ist das Bild so eingefügt.

<image scaleImage="FillFrame" vAlign="Top" hAlign="Left" isUsingCache="false" evaluationTime="Now" hyperlinkType="None">
<reportElement mode="Opaque" x="312" y="481" width="15" height="11" forecolor="#000000" backcolor="#FFFFFF" key="image-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/>
<graphicElement stretchType="NoStretch" pen="None" fill="Solid"/>
<imageExpression class="java.lang.String"><![CDATA["/xxx/yyy/Bild182px_breit.gif"]]></imageExpression>
</image>

Es wäre toll, wenn Du mir da noch ein wenig auf die Sprünge helfen könntest. 
Ich gebe auch zu, dass ich kein Java-Experte bin, wir hatten hier zwar mal eine Woche Java-Kurs. Aber das ist auch schon wieder eine Weile her und seit dem konnte ich in Java nichts mehr machen. Und ausserdem ist es im Jasper-Report drin doch wieder anders als wenn ich ein reines Java-Programm erstelle.

Vielen Dank für Eure Hilfe.

Viele herzliche Grüße

Marita Betz


----------



## elmato (12. Juli 2005)

Oh je, hmm, da bin ich jetzt etwas ueberfragt, aber ich verstehe dich leider auch nicht so wirklich 


> Was mir dabei nicht klar ist, wie bekomme ich dann den Text und das Bild hintereinander und wie kann ich dabei erreichen, dass wenn der Text einige Zeichen länger wird, dann das Bild immer gleich weit weg ist vom Text?


Was meinst du den genau mit dahinter? So das es aussieht wie ein Wasserzeichen? Vielleicht hast du einen Screenshot von einem fertigen Zertifikat, dann kann ich mir das evt. besser vorstellen. Und den zweiten Teil verstehe ich auch nicht ganz, ist das Bild quasi hinter dem Text(also rechtsbuendig davon)? Soweit ich mich erinnern kann gab es bei JasperReports Optionen wie relativTo, damit ginge das vielleicht, ich mach mich da noch mal schlau und wegen maennlich/weiblich, wenn du abfragen schreiben kannst in der XML dann ist doch alles gut, dann erstellt du dir einen Parameter "Geschlecht" und uebergibst das Geschlecht als Wahrheitswert wenn du deine SQL abfrage machst..
mfg


----------



## ATha1 (14. Juli 2005)

Ich habe auch mal so anbei eine Frage an euch...

Ich habe mir die Beispiele von Jasper durchgesehen.
Kann es sein, das die Samples zum Teil was ganz anderes machen, als man eigentlich erwartet?

Beispiel Subreport, da gibts 2 Subreports, es wird aber beim Füllen nur einer der Subreports angegeben.

Hat sich denn jemand diese Beispiele angesehen?

LG
Thomas


----------



## elmato (14. Juli 2005)

Nein, die machen schon was sie machen sollen(kannst ja auch selber ausprobieren, die Demos sind bei JasperReports dabei), da bei dem Subreort Sample aber einige Seiten rausgenommen wurden, um Platz zu sparen, kann es gut sein das Ausversehen oder mit Absicht einer der Subreport rausgenommen wurde..


----------



## ATha1 (15. Juli 2005)

Ja ich habs ja ausprobiert, und eben grade das ist, bzw. war das Verwirrende, dass eben der fertige PDF Report eigentlich ein anderer ist, als der der mittels Javacode generiert werden würde...

Aber gut, wenn du meinst es war aus speicherökonomischen Gründen, dann sollte es OK sein.

Finde es aber trotzdem doof wenn jemand samples rausgibt, die sich anders verhalten als sie es im Ergebnis zeigen.

Übrigens geht das eigentlich, dass man verschiedene Datasources für Subreports hat...
Denn aus den Beispielen die ich gesehen habe werden die Subreports am Anfang mit dem JRLoader geladen (die bereits kompilierten ;-) und anschließend die Subreports als parameter übergeben wenn der Hauptreport gefüllt wird. Jedoch beim Füllen gebe ich erst recht wieder nur eine Datasource an, und nicht mehrere...

Gibts da noch was?
Theoretisch könnte man sich ja mit einer eigenen DataSource sich behelfen...
doch ich glaube nicht, dass dies dann besser ist.


----------



## elmato (15. Juli 2005)

Ich habe es noch nicht ausprobiert, aber soweit ich das im JasperReports Forum lesen konnte geht es, du musst da mal schauen, wie gesagt habe ich es selber noch nicht gemacht...
mfg


----------



## maria-rita (15. Juli 2005)

Hallo Elmato,

jetzt komme ich endlich dazu Dir zu antworten.

>Zitat:
>Was mir dabei nicht klar ist, wie bekomme ich dann den Text und das Bild hintereinander und wie >kann ich dabei erreichen, dass wenn der Text einige Zeichen länger wird, dann das Bild immer >gleich weit weg ist vom Text?

Was meinst du den genau mit dahinter? So das es aussieht wie ein Wasserzeichen? 

Nein. Kein Wasserzeichen. Der Text ist nicht auf dem Bild sondern das Bild kommt nach dem Text.

Also "Titel"  Bild

>Und den zweiten Teil verstehe ich auch nicht ganz, ist das Bild quasi hinter dem >Text(also >rechtsbuendig davon)? 

Ja.

>Soweit ich mich erinnern kann gab es bei JasperReports Optionen wie relativTo, damit ginge das >vielleicht, ich mach mich da noch mal schlau 

Was ich gesehen habe, gibt es nur ein RelativeToTop oder ein RelativeToBottom, das heißt man kann nur von oben und unten her was anscheinend relativ machen und nicht von links und rechts.
Oder hast Du noch was anderes gefunden?

Das Problem an der Sache bis jetzt ist das man in Jasper-Reports feste Werte eintragen muss in den Koordinaten für das Bild. Diese sich aber änderen, wenn es sich um eine weibliche oder männliche Person handelt. (Bei weiblichen Personen heisst es z. B. "Teilnehmerin" und bei der männlichen Person "Teilnehmer", danach soll das Logo kommen. Da ich die Werte der Koordinaten der Position des Bildes nicht automatisch anpassen kann, habe ich dann das Problem, welches ich
gerne lösen würde.

>und wegen maennlich/weiblich, wenn du abfragen schreiben kannst in der XML dann ist doch alles >gut, dann erstellt du dir einen Parameter "Geschlecht" und uebergibst das Geschlecht als >Wahrheitswert wenn du deine SQL abfrage machst.

Das automatisch der richtige Titel angezeigt wird, egal ob männlich oder weiblich, das habe ich schon gelöst, das ist einfach. Problem ist, dass das Logo immer den gleichen Abstand zum Text haben soll. Und da liegt der Hund begraben.

Ein Screenshot vom Zertifikat kann ich Dir nicht so einfach machen, wegen Datenschutz.

Aber ich kann Dir ja eine Word-Datei zukommen lassen, wo ich das Problem so nochmal aufzeichnen könnte, wenn Du jetzt immer noch nicht weisst, was ich meine. Dazu müsste ich aber Deine Mail-Adresse wissen, weil hier im Forum kann ich ja keine Anhänge mitsenden, oder?

Vielen Dank für Deine Bemühungen.

Viele Grüße

Marita Betz


----------



## elmato (15. Juli 2005)

Hmm, tja ich habe mcih mal ungesehen im Inet, aber leider auch nichts brauchbares gefunden. Das einzige was ich dir anbieten kann ist ein WorkAround.
Es ist moeglich ueber einen Parameter(mal wieder  ) abzufragen ob etwas dargestellt werden soll oder nicht, das geht uebr printWhenExpression, du erstellst dir dann einen Report in dem !beide! Logos an den Koordinaten sind an denen sie sein sollen, dann musst du halt Abfragen ob der Parameter(vom typ Boolean0gesetzt ist oder nicht

```
<parameter name="g" isForPrompting="false" class="java.lang.Boolean"/>
...
<image.......
<printWhenExpression><![CDATA[$P{g}]]></printWhenExpression>
</image>
```
dann wird das Bild nur angezeigt wenn der Parameter gsetzt ist. Das ist die einzige moeglickeit die mir im moment einfaellt..
mfg


----------



## ATha1 (18. Juli 2005)

Soweit ich gesehen habe, ist das die Standardmethode, mit der PrintWhenExpression zu arbeiten, wenn man eben verschiedene Anzeigen benötigt.

Was die Positionierungen angeht, gibt es FixRelativeToTop, Float und FixRelativeToBottom als Positionierungstyp.


----------



## maria-rita (19. Juli 2005)

Hallo Elmato,

ich wollte mich bedanken für deinen Tipp, werde ich demnächst wenn ich wieder in der Arbeit bin ausprobieren. 

Zu ATha1 noch eine kurze Bemerkung. Die Positionierungstypen sind mir bekannt. Sie wirken aber nur 
auf die Positionierung von oben von unten und vom nächsthöheren Element. Damit kann ich leider bei meinem Problem nichts anfangen. Aber die Idee von Elmato, könnte sich evtl. umsetzen lassen.

Viele Grüße

Marita Betz


----------



## maria-rita (22. Juli 2005)

Hallo Elmato,

ich bin gerade dabei dein WorkAround auszuprobieren, dabei sind mir aber doch einige Sachen noch nicht ganz klar.

Du hast ja geschrieben, dass ich die beiden Logos mit den unterschiedlichen Koordinaten im Report aufnehmen soll.

Da sehe ich aber noch Probleme

1,) Wie sollen diese denn unterschieden werden, Images haben ja leider keinen eindeutigen Namen. Oder kann man diesen doch irgendwie eindeutige Namen zuordnen?

2.) Wenn ich beide Logos im Report aufnehme sieht man ja beide Logos übereinander, nur etwas versetzt. Wie kann ich das verhindern? Ich will ja nur das Logo angezeigt bekommen welches
ich gerade brauche. 

3. Auch ist mir noch nicht 100% klar was Du mit dem Parameter g willst. Du hast Ihn ja auf "isforPrompting="False" gesetzt. Das heißt doch, dass man da nichts eingeben kann, weil kein
Feld auf dem Bildschirm erscheint. Ist ja schon klar, weil es ja ein Boolean-Wert ist der entweder true oder false ist. 

Aber mir ist einfach nicht klar, wie das Programm dann wissen soll, welches Logo 
dann angezeigt werden soll. Irgendwie stehe ich da noch voll auf dem "Schlauch".

Diese <printWhenExpression><!CDATA[$P{g}]]></printWhenExpression>muss ich ja bei beiden Images setzen oder? 

Irgendwie fehlt mir da noch eine Verbindung zwischen dem Text der erscheint und dem Logo welches angezeigt werden soll. 

Leider wird man dass ja nicht in einer Variablen machen können so in der Art:

Wenn Titel weiblich dann Text Titel weiblich und Logo 1
ansonsten Titel männlich und Logo 2

Daran bin ich ja schon vorher gescheitert. Das ich die Verknüpfung zwischen Text und Bild in einer
Variablen nicht hinbekommen habe.

Ich hoffe Du hast alles einigermaßen verstanden, es ist immer schwierig so einen Sachverhalt zu beschreiben. 

Vielleicht kannst Du noch ein wenig Licht ins Dunkel bringen.

Vielen herzlichen Dank für Deine Bemühungen.

Viele Grüße

Marita Betz


----------



## ATha1 (25. Juli 2005)

so ich hoffe ich verstehe dein Problem richtig, und ich denke ich habe eine Lösung.

Also allgemein den Imagepfad zu beeinflüssen (z.B. mit Parametern) scheint bei mir ohne Probleme zu funktionieren, dafür gibts die ImageExpression:

<imageExpression class="java.lang.String"><![CDATA[$P{BaseDir}+"/images/logo.gif"]]></imageExpression>

Dann ist das Logo halt immer an der selben Position.

Weil du aber 2 Logos hast an unterschiedlichen Positionen musst du dann 2 mal ein Image einfügen, und dann mit der PrintWhenExpression bei beiden abfragen.
Natürlich schließt die eine Expression die andere aus...

Und der Parameter muss ja auch nicht notwendigerweise ein Boolean sein.
Und wenn du die Geschlechterinfo eh aus der Datenbank bekommst, dann kannst das doch auch mit einem Feld anstatt eines Parameters machen...

Ich denke so solltest du dein Problem lösen können oder?


----------



## maria-rita (25. Juli 2005)

Hallo an alle,

ich wollte mich nochmal für die Hilfe bedanken. 

Inzwischen ist unser Problem gelöst.

Viele Grüße

Marita Betz


----------



## Alex02 (5. Juli 2006)

Hallo, 

ich sehe Ihr beschäftigt euch auch mit iReport.  

Ich hab da auch ein Porblem mit dem Datum:

Ich möchte einen Report generieren, bei dem das Startdatum als Parameter übergeben werden soll. Aber irgendwie klappt es nicht so wie ich will, eigentlich klappts garnicht.

Ich hab folgede SQL-Anweisung "DT_XANTRAGSDATUM_57EA5290 >= '$P!{DATUM}')".

Bekomme aber immer den gleichen Fehler:

 Compiling to file... .\Abfrage1.jasper -> C:\Programme\JasperSoft\iReport-1.2.2\Abfrage1.java
Errors compiling .\Abfrage1.jasper!
it.businesslogic.ireport.ReportClassLoader@e19358  net.sf.jasperreports.engine.JRException:Errorswereencounteredwhencompilingreportexpressionsclassfile: 1.Syntaxerrorontoken".05",?expected value=(java.sql.Timestamp)(09.01.0500:00); <-> 2.Syntaxerrorontoken".05",?expected value=(java.sql.Timestamp)(09.01.0500:00); <-> 3.Syntaxerrorontoken".05",?expected value=(java.sql.Timestamp)(09.01.0500:00); <-> 3errors  atnet.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:193) atnet.sf.jasperreports.engine.design.JRDefaultCompiler.compileReport(JRDefaultCompiler.java:104) atnet.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:127) atnet.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:109) atit.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:473) atjava.lang.Thread.run(UnknownSource)

Wenn ich anstatt dem Parameter mit einem Datum arbeite z.B '09.01.05 00:00'
funktioniert es erst dann, wenn ich den von mir eingefügten Parameter aus der Parameterliste lösche.
 

Wenn mir jemand von Euch ein ein Beispiel für das Anlegen von einem Parameter posten könnte, wäre ich sehr dankbar.

Gruß

Alex


----------



## ATha1 (5. Juli 2006)

Alex02 hat gesagt.:
			
		

> Ich hab folgede SQL-Anweisung "DT_XANTRAGSDATUM_57EA5290 >= '$P!{DATUM}')".



Also da ist nach dem $P ein Rufzeichen  zuviel...
aber gut das könnte jetzt ein einfacher Tippfehler sein.

Ich glaube du hast ein anderes Problem, du willst ein Datum innerhalb der Datenbank mit einem Date Objekt vergleichen...
also eigentlich wird das dann einen Fehler geben...
du müsstest das entweder auf ein Date Format der DB bringen (z.B. bei Oracle die to_date Funktion).



			
				Alex02 hat gesagt.:
			
		

> Wenn ich anstatt dem Parameter mit einem Datum arbeite z.B '09.01.05 00:00'
> funktioniert es erst dann, wenn ich den von mir eingefügten Parameter aus der Parameterliste lösche.



? das klingt sehr ungewöhnlich...
Denn eigentlich sollte es vollkommen egal sein, ob du einen Parameter verwendest oder nicht.
Das gleiche gilt für Fields oder Variablen.
Übrigens wie meinst du das mit einem Datum arbeiten?

mfg
ATha1


----------



## Alex02 (5. Juli 2006)

Hallo ATha1,

mein SQL-Befehl sieht folgendermaßen aus: 
Select *
From DATAGROUPB2DADD8D 
Where DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}

(das ist nur mal kurz zusammengefasst, ich hab da ca. 8 joins)
Ich habs mittlerweile auch zum Laufen bekommen, mit der Parameterdeklaration: 

Name: DATUM
Parameter Class Type:java.util.Date
Default value expression: new Date(1,9,2005)

Das schein syntaktisch zu .

Das Problem jedoch ist, dass er alle Eintrage aus der DB (SQL-Server) ausliest.

Die Felder, die ich mit dem Paramter vergleiche sind vom Typ "Timestamp".

Wenn ich mir das Datum über folgenden Befehl:
Date datum;
System.out.println(datum =   new Date(1,9,2005) );

 rausgeben lasse, bekomme ich dieses Ergebnis:

Thu Mar 28 00:00:00 CET 1907
  


Hast Du möglicherweise einen Lösungsvorschlag

Und noch eine Frage:

Ich möchte disen Report später über eine java.class komplett kompilieren und ausgeben (pdf und xls).
Ohne Parameter stellt es kein Problem dar, bei pdf auch mit. Weisst Du, wie ich Parameter an xls übergeben kann
Irgendwie mit :
Map inhalt = new HashMap ();
		Date datum = new Date(1,9,2005);
		inhalt.put("$P{DATUM}",datum); ?


Gruß

Alex


----------



## ATha1 (5. Juli 2006)

Alex02 hat gesagt.:
			
		

> mein SQL-Befehl sieht folgendermaßen aus:
> Select *
> From DATAGROUPB2DADD8D
> Where DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}
> ...



Schon klar... vielleicht solltest du einfach alljene selektieren die du auslesen willst.
Ich weiß gar nicht ob das JasperReports das mittlerweile zuordnen kann, in welche Felder das dann kommt (ich verwendet immer eine JRDataSource zum lesen von Daten).

Sonst musst du halt ohne dem Stern arbeiten...
und wenn dir die Bezeichnungen nicht passen sollten das AS Schlüsselwort in der Query verwenden.

Also statt select * from ...
select xyz as field_xyz from ...
und du hast dann ein Field welches field_xyz lautet.

Der Typ wird natürlich auch passen müssen.
Also kein Integer, wenns ein String ist, und so Sachen...




			
				Alex02 hat gesagt.:
			
		

> Die Felder, die ich mit dem Paramter vergleiche sind vom Typ "Timestamp".
> 
> Wenn ich mir das Datum über folgenden Befehl:
> Date datum;
> ...



Ich weiß nicht genau wie der Timestamp abgesetzt wird, jedoch wie machst du denn sonst die Queries?
also wie machst du sonst deine Queries mit denen du auf den Timestamp selektierst?
Gibst du da einen Zahlenwert an?
Ich verwendet wenn ich Datum Werte verwende für Oracle die Funktion to_date(...). Ich kann aber nicht sagen ob es diese Funktion auch bei deiner Datenbank gibt.
Ansonsten übergib statt dem Date Field einen String, und der String muss das Format haben wie er in der Query benötigt wird...



			
				Alex02 hat gesagt.:
			
		

> Ich möchte disen Report später über eine java.class komplett kompilieren und ausgeben (pdf und xls).
> Ohne Parameter stellt es kein Problem dar, bei pdf auch mit. Weisst Du, wie ich Parameter an xls übergeben kann
> Irgendwie mit :
> Map inhalt = new HashMap ();
> ...



Also prinzipiell wird bei Jasper unterschieden zwischen Kompilierung und Generierung (Füllen des Reportkompilats).
Die Kompilierung wandelt deine JRXML Datei in eine JASPER Datei um, die eigentlich nichts anderes als eine binäre Javaklasse (Classfile) ist.
Die Kompilierung muss nur einmal gemacht werden. Bei der Kompilierung werden die statischen Teile etc. für den Report vorbereitet.

Das Füllen (die eigentliche Generierung) passiert dann mit der Angabe des JASPER Files, den Parameter (du hast recht, es ist eine Map die übergeben wird) und einer DataSource (Interface JRDataSource) oder einer Connection (wenn man eine SQL Abfrage innerhalb des Reports verwendet).

So wie sieht das ganze in Java Code aus:

```
/**
	 * Kompiliert einen Report und liefert das File mit dem kompilierten JasperReport.
	 *
	 * @param xmlFile Report XML File
	 * @return JasperReport File (.jasper Endung)
	 */
	public File compileReport(File xmlFile) {
		try {
			String jasperFileName = JasperCompileManager.compileReportToFile(xmlFile.getPath());
			return new File(jasperFileName);
		} catch (Exception e) {
			e.printStackTrace(System.err);
			return null;
		}
	}

	/**
	 * Generiert ein PDF File aus einem bereits kompilierten JasperReport File.
	 * Die Daten für den Report werden aus der Parameter Map und der Datenbank Connection bezogen.
	 *
	 * @param jasperFile JasperReport File (.jasper Endung)
	 * @param parameters Parameter Map
	 * @param connection Verbindung zu einer Datenbank
	 * @return PDF File
	 */
	public File generatePDF(File jasperFile, Map parameters, Connection connection) {
		try {
			String pdfFile = JasperRunManager.runReportToPdfFile(jasperFile.getPath(),
			        parameters,
			        connection);
			return new File(pdfFile);
		} catch (Exception e) {
			e.printStackTrace(System.err);
			return null;
		}

	/**
	 * Generiert aus einem bereits kompilierten JasperReport File die dazugehörigen PDF Daten.
	 * Die Daten f?r den Report werden aus der Parameter Map und der JRDataSource bezogen.
	 *
	 * @param jasperFile JasperReport File (.jasper Endung)
	 * @param parameters Parameter Map
	 * @param datasource JRDataSource mit Daten f?r den Report
	 * @return Byte Array gefüllt mit den PDF Daten
	 */
	public byte[] generatePDFBytes(File jasperFile, Map parameters, JRDataSource datasource) {
		try {
			byte[] data = JasperRunManager.runReportToPdf(jasperFile.getPath(),
			        parameters,
			        datasource);
			return data;
		} catch (Exception e) {
			e.printStackTrace(System.err);
			return null;
		}
	}

	/**
	 * Generiert ein XLS (Excel) File aus einem bereits kompilierten JasperReport File.
	 * Die Daten für den Report werden aus der Parameter Map und der JRDataSource bezogen.
	 *
	 * @param jasperFile JasperReport File (.jasper Endung)
	 * @param parameters Parameter Map
	 * @param datasource JRDataSource mit Daten für den Report
	 * @return XLS Bytes
	 */
	public byte[] generateXLSBytes(File jasperFile, Map parameters, JRDataSource datasource) {
		if (!systemInitialized) {
			logger.error("ReportGenerator is not initialized!");
			return null;
		}
		try {
			ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024 * 32);

			JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile.getPath(), parameters, datasource);
			JExcelApiExporter exporter = new JExcelApiExporter();

			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
			exporter.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

			exporter.exportReport();

			return outputStream.toByteArray();
		} catch (Exception e) {
			e.printStackTrace(System.err);
			return null;
		}
	}
```

so das waren ein paar Beispiele...
es ist so, dass die Parameter Map einfach als Key den Namen des Parameters hat, und Value ist der Wert oder Objekt des Parameters...

also:

```
Map parameterMap = new HashMap();
parameterMap.put("MeinParameterName", new Double(2.5)); // Parameter "MeinParameterName" <=> $P{MeinParameterName}
```

Probier das mal, und schau dir mal die JavaDoc Doku von JaserReports an, es gibt nämlich noch weitere Methoden um Reports zu erzeugen...

mfg
ATha1


----------



## Alex02 (5. Juli 2006)

Das mit der Selection passt, ich poste sie mal (nicht erschrecken):


SELECT     DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 AS Antragsdatum, DATAGROUPB2DADD8D.DT_XBESTELLTAM_43668461 AS Bestelldatum, 
                      DATAGROUPB2DADD8D.DT_XLIEFERTERMIN_3420E199 AS Liefertermin,
                      DATAGROUPB2DADD8D.DT_XSTATUSCONTROLLIN2_9840EB85 AS Statuscontrolling, 
                      DATAGROUPB2DADD8D.DT_XSTATUSEINKAUFAM_4C759322 AS StatusEinkauf, 
                      DATAGROUPB2DADD8D.DT_XSTATUSGESCHFTSFH2_02092353 AS StatusGeschftsFühr, 
                      DATAGROUPB2DADD8D.DT_XSTATUSLEITERSEAM_48D39E6C AS StatusLeiterSE, 
                      DATAGROUPB2DADD8D.DT_XSTATUSABTEILUNGS2_F8511DBB AS StatusAbteilung, 
                      DATAGROUPB2DADD8D.DT_FESTGESETZTERLIEFE_28C2A04C AS FestgesetzterLiefertermin, 
                      DATAGROUPB2DADD8D.DT_GELIEFERTAMDATETIM_C1FAC53E AS geliefertAm, 
                      DATAGROUPB2DADD8D.STR_GESAMTSUMME_713C9B6C AS Gesamtsumme, Abfr1.text AS VermerkControlling, Abfr2.text AS VermerkEinkauf, 
                      Abfr3.text AS VermerkGeschäftsf, Abfr4.text AS VermerkIt, Abfr5.text AS VermerkLeiterSE, Abfr6.text AS VermerkAbteilung, 
                      Abfr7.text AS VermerkBestellung, Abfr7.text AS Bemerkung
FROM         DATAGROUPB2DADD8D LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKCONTROLLIN_80FD76D3 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKCONTROLLIN_80FD76D3 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}) Abfr1 ON 
                      Abfr1.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKCONTROLLIN_80FD76D3 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKEINKAUF_1FC9A1B9 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKEINKAUF_1FC9A1B9 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}) Abfr2 ON 
                      Abfr2.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKEINKAUF_1FC9A1B9 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKGESCHFTSFH_90CBDED7 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKGESCHFTSFH_90CBDED7 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}) Abfr3 ON 
                      Abfr3.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKGESCHFTSFH_90CBDED7 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKIT_99D4C80E AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON DATAGROUPB2DADD8D.TXT_XVERMERKIT_99D4C80E = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}) Abfr4 ON 
                      Abfr4.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKIT_99D4C80E LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKLEITERSE_C75E7D16 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKLEITERSE_C75E7D16 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}) Abfr5 ON 
                      Abfr5.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKLEITERSE_C75E...............................................

wenn ich sonst eine Timestamp abfrage, sieht es so aus: 

WHERE     (DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= '09.01.2005 00:00') 

hab porbier das auch so einem parameter mitzuteile, aber irgendwie streikt er. Es kommt dann zu garkeiner Selection  

Ach Manno, irgenwie wills nicht. 

Auf jeden Fall danke für Deine Hilfe

Gruß

Alex


----------



## ATha1 (5. Juli 2006)

Dann verwende statt eines Date Objektes ein String Object, wo genau das Format drinnen steht...

und dann halt:
where ... = '${datum}'

sollte eigentlich dann funktionieren...

oder sonst machs mit einer DataSource...
ist zwar mehr Arbeit, aber das geht eigentlich immer, und man kann noch viel Komplexere Möglichkeiten innerhalb der DataSource programmieren.

mfg
ATha1


----------



## Alex02 (5. Juli 2006)

Hallo,

das mit dem String ist eine gute Idee, danke.

Soll ich das bei iReport auch in die Parameterliste eintragen
Und der Aufruf erflogt trotz Parameter ohne das 'P'?


Gruß

Alex


----------



## ATha1 (5. Juli 2006)

Alex02 hat gesagt.:
			
		

> Soll ich das bei iReport auch in die Parameterliste eintragen
> Und der Aufruf erflogt trotz Parameter ohne das 'P'?
> Alex



Was meinst denn jetzt konkret?

also wenn du einen String Parameter verwendest muss der natürlich vorher auch im Report angelegt werden, damit du ihn verwenden kannst, und der Typ des Parameters muss dann logischerweise auch ein String sein.

Die Ausgabe bzw. Verwendung des Parameters unterscheidet sich nicht.
also wenn dus verwendest immer so: $P{ParameterName}

also wenns in der SQL ist dann eben so "Select .... Where ... = '" + $P{ParameterName} + "'"

Wenn Jasper den Report kompiliert wird daraus eine Java - Variable.
Die Abfrage ist dann mehr oder weniger eine Konkatenation von Strings...
String + String + String ....

Mehr machst du da oben ja auch nicht...
Nur Jasper fügt das Ganze dann zusammen...

Ich hoffe ich habe dich jetzt nicht noch mehr verwirrt  

mfg
ATha1


----------



## Alex02 (5. Juli 2006)

Hi,

also irgendwie................. nicht ganz 

Hab jetzt Folgendes fabriziert:

SELECT     DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 AS Antragsdatum, DATAGROUPB2DADD8D.DT_XBESTELLTAM_43668461 AS Bestelldatum, 
                      DATAGROUPB2DADD8D.DT_XLIEFERTERMIN_3420E199 AS Liefertermin,
                      DATAGROUPB2DADD8D.DT_XSTATUSCONTROLLIN2_9840EB85 AS Statuscontrolling, 
                      DATAGROUPB2DADD8D.DT_XSTATUSEINKAUFAM_4C759322 AS StatusEinkauf,   
                      DATAGROUPB2DADD8D.DT_XSTATUSGESCHFTSFH2_02092353 AS StatusGeschftsFühr, 
                      DATAGROUPB2DADD8D.DT_XSTATUSLEITERSEAM_48D39E6C AS StatusLeiterSE, 
                      DATAGROUPB2DADD8D.DT_XSTATUSABTEILUNGS2_F8511DBB AS StatusAbteilung,  
                      DATAGROUPB2DADD8D.DT_FESTGESETZTERLIEFE_28C2A04C AS FestgesetzterLiefertermin, 
                      DATAGROUPB2DADD8D.DT_GELIEFERTAMDATETIM_C1FAC53E AS geliefertAm, 
                      DATAGROUPB2DADD8D.STR_GESAMTSUMME_713C9B6C AS Gesamtsumme, Abfr1.text AS VermerkControlling, Abfr2.text AS VermerkEinkauf, 
                      Abfr3.text AS VermerkGeschäftsf, Abfr4.text AS VermerkIt, Abfr5.text AS VermerkLeiterSE, Abfr6.text AS VermerkAbteilung, 
                      Abfr7.text AS VermerkBestellung, Abfr7.text AS Bemerkung
FROM         DATAGROUPB2DADD8D LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKCONTROLLIN_80FD76D3 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKCONTROLLIN_80FD76D3 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= "'"+ $P{DATUM}+"'") Abfr1 ON 
                      Abfr1.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKCONTROLLIN_80FD76D3 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKEINKAUF_1FC9A1B9 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKEINKAUF_1FC9A1B9 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= "'"+ $P{DATUM}+"'") Abfr2 ON 
                      Abfr2.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKEINKAUF_1FC9A1B9 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKGESCHFTSFH_90CBDED7 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKGESCHFTSFH_90CBDED7 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= "'"+ $P{DATUM}+"'") Abfr3 ON 
                      Abfr3.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKGESCHFTSFH_90CBDED7 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKIT_99D4C80E AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON DATAGROUPB2DADD8D.TXT_XVERMERKIT_99D4C80E = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= "'"+ $P{DATUM}+"'") Abfr4 ON 
                      Abfr4.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKIT_99D4C80E LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKLEITERSE_C75E7D16 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN
                                                   DATAGROUPB2DADD8D_TXT ON 
                                                   DATAGROUPB2DADD8D.TXT_XVERMERKLEITERSE_C75E7D16 = DATAGROUPB2DADD8D_TXT.LID
                            WHERE      DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= "'"+ $P{DATUM}+"'") Abfr5 ON 
                      Abfr5.schl1 = DATAGROUPB2DADD8D.TXT_XVERMERKLEITERSE_C75E7D16 LEFT OUTER JOIN
                          (SELECT     DATAGROUPB2DADD8D_TXT.TEXTAREA AS text, DATAGROUPB2DADD8D.TXT_XVERMERKABTEILUNGS_B27FD102 AS schl1
                            FROM          DATAGROUPB2DADD8D JOIN

Ich hab auch vesucht das "+" durch "&" zu ersetzen. Irgendwie mag er nicht. Bekomme diese Fehlermeldung: 

 Compiling to file... .\Abfrage1.jasper -> C:\Programme\JasperSoft\iReport-1.2.2\Abfrage1.java
it.businesslogic.ireport.ReportClassLoader@12a543b 
Compilation running time : 297 
 Filling report... 
 Locale: Deutsch (Deutschland)
Errorfillingprint... 
java.sql.SQLException:UngültigerSpaltenname'''. atnet.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365) atnet.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781) atnet.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224) atnet.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628) atnet.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:418) atnet.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:693) atnet.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:115) atnet.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:632) atnet.sf.jasperreports.engine.fill.JRFillDataset.setDatasource(JRFillDataset.java:576) atnet.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:565) atnet.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:874) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:689) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:647) atnet.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) atit.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:674) atjava.lang.Thread.run(UnknownSource)  NESTEDBY: java.sql.SQLException:UngültigerSpaltenname'''. atnet.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365) atnet.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781) atnet.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224) atnet.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628) atnet.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:418) atnet.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:693) atnet.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:115) atnet.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:632) atnet.sf.jasperreports.engine.fill.JRFillDataset.setDatasource(JRFillDataset.java:576) atnet.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:565) atnet.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:874) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:689) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:647) atnet.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) atit.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:674) atjava.lang.Thread.run(UnknownSource)  NESTEDBY: net.sf.jasperreports.engine.JRException:ErrorexecutingSQLstatementfor:Abfrage1 atnet.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:121) atnet.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:632) atnet.sf.jasperreports.engine.fill.JRFillDataset.setDatasource(JRFillDataset.java:576) atnet.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:565) atnet.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:874) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:689) atnet.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:647) atnet.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) atit.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:674) atjava.lang.Thread.run(UnknownSource) Causedby:java.sql.SQLException:UngültigerSpaltenname'''. atnet.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365) atnet.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781) atnet.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224) atnet.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628) atnet.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:418) atnet.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:693) atnet.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:115) ...11more 
Printnotfilled.TrytouseanEmptyDataSource...! 

Hmmmmmmmmmm, nicht gut!?

Gruß

Alex


----------



## Alex02 (5. Juli 2006)

Sorry, 

ich habs doch hinbekommen. Hab dafür die ganzen "'" Sachen weggelassen. Und....
es hat gefunzt.

Vielen Dank, hast mir echt geholfen

Gruß

Alex


----------



## ATha1 (5. Juli 2006)

Kein Problem...

Viel Spass beim Report designen...

mfg
ATha1


----------



## Alex02 (6. Juli 2006)

Hallo,

ich hab doch noch ein kleines Problemsche mit den Parametern:

ich übergeb einen String:

String datum = "07.06.05";

Map inhalt = new HashMap ();

inhalt.put("DATUM",datum);

Connection con;

.............

jRep = JasperCompileManager.compileReport(design);			
			jasperPrint = JasperFillManager.fillReport(jRep,inhalt, con);

Wenn dieser String mit 05 endet,  alles wunderbar. 
Ändere ich aber diesen String z.B. auf  "07.06.03", bekomme ich folgede Fehlermeldung

java.lang.OutOfMemoryError

Dabei wird das pdf-Dokument problemlos erzeugt. Es wird auch ein xls-File angelegt, dieses bleibt jedoch leer!!

Hier mein Code:

JasperExportManager.exportReportToPdfFile(jasperPrint, svar + "/Telefonverzeichnis.pdf");
			//-------------------------------------------------------------------------------------------
			//Speichern als Xls-File

			OutputStream output = new FileOutputStream(new File(svar + "/Telefonverzeichnis.xls"));
			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
			exporter.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

			exporter.exportReport();

Weiß jemand möglicherweise warum?

Gruß

Alex


----------



## Alex02 (6. Juli 2006)

Hallo,

ich möchte in iReport selbst eine Differenz aus zwei Timestamps machen.
Ich nehm mal an, das kann man über eine Variable machen. Blos wie

Kennt jemand einen Ansatz?

Gruß

Alex


----------



## Alex02 (16. August 2006)

Hallo, 
ich versuche gerade einen Hauptreport mit einem Subreport zu starten.
Der Subreport befindet sich im gleichen Verzeichnis, wie der Hauptreport, wird vom Hauptreport jedoch nicht gefunden. 

Folgende Fehlermeldung:
net.sf.jasperreports.engine.JRException: Could not load object from location : UmgesetzteBedarfe_subreport2.jasper

Kann mir jemand sagen, wie ich dem Hauptreport mitteilen kann, wo sich der Subreport befindet

Wie kann ich an den Subreport Parameter übergeben?

Hier mein Code:

public void berichte (String pfad, String reportname, String jahr, int param) throws FileNotFoundException  
	{

		String name = "";


		if (param == 1)
			name = "PersonalentwicklungsAufwandJeMa";
		else if (param == 2)
			name = "PersonalentwicklungsTage";
		else if (param == 3)
			name = "UmgesetzteBedarfe";
		else if (param == 4)
		{
			name = "UmgesetzteBedarfeJeZuord";

		}

		else if (param == 5)
			name = "";



		Map inhalt = new HashMap ();

		inhalt.put("JAHR",jahr);	
		Connection con;

		try {
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			System.out.println(e);
		}//endtry

		try 
		{

			con = DriverManager
					.getConnection("..");

			System.out.println("Verbunden");
//----------------------------------------------------------------------------------------------		

		JasperReport jRep;

		JasperPrint jasperPrint;
		JRXlsExporter exporter = new JRXlsExporter();




		try
		{


			InputStream input = new FileInputStream (new File("..internal/files/" + name + ".jrxml")); 

			System.out.println("Gefunden");
			JasperDesign design = JRXmlLoader.load(input);

			jRep = JasperCompileManager.compileReport(design);		

			jasperPrint = JasperFillManager.fillReport(jRep,inhalt, con);
			System.out.println("Jasperprint erstellt");

			//Speichern als pdf-File 

			//JasperExportManager.exportReportToPdfFile(jasperPrint, pfad + "/" + reportname + ".pdf");
			//-------------------------------------------------------------------------------------------
			//Speichern als Xls-File




			OutputStream output = new FileOutputStream(new File(pfad + "/" + reportname + ".xls"));
			System.out.println("pfad erstellt");
			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

			System.out.println("jasperprint");
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
			System.out.println("output");
			exporter.exportReport();

			System.out.println("exportiert"); 

			try {
				output.close();
				con.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	

//---------------------------------------------------------------------------------------------------	

		}//endtry Jasperreport

		catch (JRException e)
		{
			System.out.println(e);
			//e.printStackTrace();
			//System.out.println("----------------------------------------------------");
			//System.out.println(e.getCause());
			//System.out.println(e.getClass());		
		}//endcatch jasperreport

		}//endtry

		catch (SQLException e) 
		{
			System.out.println("SQL-Fehler: " + e);
		}//endcatch 
	}

}


Gruß

Alex


----------



## gwynevere (29. August 2006)

Alex02 hat gesagt.:
			
		

> Hallo,
> ich versuche gerade einen Hauptreport mit einem Subreport zu starten.
> Der Subreport befindet sich im gleichen Verzeichnis, wie der Hauptreport, wird vom Hauptreport jedoch nicht gefunden.
> 
> ...



Hallo, ich bin noch recht neu im Umgang mit Jasperreports, verwendest du IReport?

 Wenn du da den Subreport im Hauptreport einbindest, kannst du in den Eigenschaften des Subreports unter Subreport (other) Parameter festlegen. Diese musst du dann in deinem Subreport direkt anlegen und kannst in der ReportAnfrage (bspw. via SQL Statement) diese Parameter mit $P{parameter} verwenden... also z.B. in der WHERE klausel mit 

where kd_nr = $P{parameter}

dann müsste das gehn.

Und was das finden angeht: In denselben Eigenschaften muss unter Subreport auf jeden fall der Parameter $P{REPORT_CONNECTION} in der connection expression stehn.
Willst du den Pfad explizit angeben, kannst du einen Parameter SUBREPORT_DIR anlegen, wo du dann den Pfad reinschreiben kannst. Diesen Parameter musst du dann wieder in den Subreport eigenschaften angeben.

Zur verdeutlichung:
Parameter name = SUBREPORT_DIR
class type = STRING
Default value expr. "H:\\JasperReporting\\dein_Reportverzeichnis\\"

und in den subreporteigenschaften:
in Subreport (other) unter Subreport expression:
$P{SUBREPORT_DIR} + "/subreport_name.jasper"

dann greift er darauf zu.

hoffentlich hilfts ;-)

gruss
katya


----------



## gwynevere (29. August 2006)

So, und jetzt hab ich auch mal ne kleine Frage...

bin ja froh, dass es ein gutes forum hier gibt, hab schon ein paar hilfreiche Tipps gefunden.

Mein Problem ist folgendes. Ich muss Werte nach Jahren gruppieren (DAS kann ich), allerdings will ich mir nicht alle werte anzeigen lassen, sondern nur die Jahressummen. Die Monatswerte interessieren nicht für den Bericht. Ich habs mit Variablen versucht, aber die bleiben halt leer, wenn ich die dazugehörigen Felder nicht anzeigen lasse. 

hat jemand ne idee?

gruss


----------



## gwynevere (29. August 2006)

gwynevere hat gesagt.:
			
		

> So, und jetzt hab ich auch mal ne kleine Frage...
> 
> bin ja froh, dass es ein gutes forum hier gibt, hab schon ein paar hilfreiche Tipps gefunden.
> 
> ...



ha, das war ja einfach... musste die Summenvariablen einfach nur in den Groupfooter setzen...


----------



## CrazyK (12. September 2006)

Hallo,
ich habe mal ein paar Grundlegende Fragen:

wir haben eine Anwendung aus der wir im Moment Crystal Report ansteuern. (über eine ODBC-Verbindung zur Datenbank) Das heisst in der Anwendung kann man Reports "einbinden". Wenn ein neuer Report erstellt werden muss, geht das ziemlich schnell und derjenige muss auch nicht programmieren können. Jetzt denke ich über eine Umstellung auf JasperReports nach. Darum ein paar Fragen:

1. Kann man es realisieren, dass aus einer Anwendung, die nicht in Java geschrieben ist Reports aufgerufen / gedruckt werden können. Wenn ja, wie groß wäre etwa der Aufwand. Ein paar Stichworte wären toll.

2. Können neue Reports erstellt werden, ohne das derjenige Programmierkenntnisse hat?

3. Wie findet ihr JasperReports generell. Würdet ihr eine Umstellung von Crystal empfehlen?

Danke für eure Antworten.

Mit freundlichen Grüßen

Marco Westermann


----------



## fred_fire (14. September 2006)

Jasper Reports erscheint wirklich interessant.

Aber mir ist nicht klar, wie ich Parameter im Bericht ueber eine Eingabeaufforderung vom Benutzer setzen lassen kann.

Wenn ich iReport zum Berichtserstellen benutze, gibt es bei Parameter das Attribut "Is for prompting". Bei der Ausführung ueber iReport werden die auch abgefragt.

Wenn ich aber den Bericht ueber eine JAVA Anwendung aufrufe (mit JasperViewer.viewReport() ) werden sie nicht abgefragt.

Uebserseheh ich etwas beim Aufruf oder ist das nicht vorgesehen? Wie kann man das geschickt loesen? Danke.


----------



## katie99 (13. Dezember 2006)

Hallo,

seit drei Jahren setzen wir in unserem Projekt JasperReports in der Version 0.4.4 ein.
Seit kurzem treten zwei Probleme bei einem Bericht auf, der unter anderem eine Beschreibung und eine Nummer gruppiert nach Jahren ausgibt. Diese beiden Angaben werden von einem Rahmen umgeben.

Problem 1:
Wenn die Beschreibung durch Zeilenumbruch größer als die angegebene Zellenhöhe ist, wird der Test vollständig angezeigt, der Rahmen aber nicht mehr (Sieht aus als würde die vordere Linie fehlen).  Bei allen weiteren Elementen dieser Zeile wird der Rahmen korrekt angezeigt. 

Alle Grafikelemente und Textelemente, die mehrzeilig ausfallen können, sind in einer elementGroup zusammengefasst.

<elementGroup>
   <rectangle>
	<reportElement x="0" y="0" width="335" height="20" 
                positionType="Float" isPrintWhenDetailOverflows="true"/>
	<graphicElement pen="1Point" stretchType="RelativeToTallestObject"/>
   </rectangle>
   <textField isStretchWithOverflow="true" evaluationTime="Now">
	<reportElement x="5" y="1" width="244" height="19" 
                isPrintInFirstWholeBand="true" isPrintWhenDetailOverflows="false"  
                positionType="Float" />
	<textElement>
		<font reportFont="Arial_Bold" size="6"/> 
	</textElement>
	<textFieldExpression class="java.lang.String">
		$F{Bez_Lang}
	</textFieldExpression>
   </textField>
   <rectangle>
	<reportElement x="335" y="0" width="110" height="20" positionType="Float" 
                isPrintWhenDetailOverflows="true" />
	<graphicElement pen="1Point" stretchType="RelativeToTallestObject"/>
   </rectangle>


Problem 2:
Wenn bei der Gruppierung ein neues Jahr in die letzte Zeile einer Seite fällt, dann wird auf der nächsten Seite in der ersten Zeile nicht das neue Jahr sondern das Jahr davor angezeigt.

group name="JahrGroup" 
	minHeightToStartNewPage="10" 
	isStartNewColumn="false" 
	isStartNewPage="false" 
	isResetPageNumber="false" 
	isReprintHeaderOnEachPage="true">
	<groupExpression>$F{Jahr}</groupExpression> 
 	<groupHeader>
<band height="20">
<rectangle>
    <reportElement x="0" y="0" width="335" height="20" positionType="Float" />
    <graphicElement pen="1Point" stretchType="RelativeToTallestObject"/>
</rectangle>
<rectangle>
   <reportElement x="0" y="0" width="335" height="20" positionType="Float"   
   backcolor="#C0C0C0">
</reportElement>
   <graphicElement pen="1Point" stretchType="RelativeToTallestObject"/>
</rectangle>
<textField>
   <reportElement x="5" y="1" width="90" height="19" positionType="Float" />
   <textElement>
      <font reportFont="Arial_Bold" size="6" /> 
   </textElement>
   <textFieldExpression class="java.lang.String">
      $F{Jahr}
   </textFieldExpression>
</textField>

Ich bin für jede Hilfestellung dankbar.

Vielen  Grüße
Katie


----------



## mwetzel (29. Oktober 2007)

Hallo Community,

ich hab auch mal eine Frage zu IReport.
und zwar möchte ich mir eine Liste ausgeben lassen von Konten, auf der die letzte Bewegung mehr als 60 Tage her ist. Dazu muss ich doch bestimmt eine Differenz aus dem aktuellen Datum bilden und dem Datum der letzten Buchung.

Ich habe jedoch keine Ahnung wie ich das anstellen soll.
Wäre euch für jede Hilfe dankbar!

Grüße

Micha


----------



## ATha1 (5. November 2007)

Hallo

Zuerst einmal eine Frage.
Was verwendest du für den Report?
Also verwendest du eine Connection oder eine Datasource für die DatenQuelle deines Reports? Sollte es nämlich eine Connection sein zu deiner DB dann verwendest du höchstwahrscheinlich eine Report Query um die Daten zu erhalten.
Dann kannst du gleich im SQL die Einschränkung aufs Datum machen.
z.B.
select  ...  from ... where ... *datum < sysdate - 60* ...
sysdate - 60 liefert dir hier dann das Datum vor 60 Tagen.

Solltest du eine Datasource für deinen Jasperreport verwenden, dann würde ich die Einschränkung im Javacode der Datasource machen.

Theoretisch könntest du auch in der PrintWhen Expression ein Java Codefragment angeben, welches dir prüft ob dein Datumsbereich passt, jedoch ist das nicht wirklich eine schöne Lösung, da du dann nicht die Datenselektion einschränkst, sondern lediglich die Ausgabe manipulierst.

Ich hoffe ich konnte dir weiterhelfen.

LG
ATha1


----------



## mwetzel (5. November 2007)

Hallo,

danke für deine Antwort!

Also ich benutze Jasper 1.2.3 bzw 1.2.8

um an meine Daten zu gelangen benutze ich folgende SQL-Query:

" select * from opstamm

order by bulw DESC "

wenn ich dich richtig verstanden habe, dann müsste ja eine ergänzte Query um deinen Vorschlag folgender Maßen aussehen:

" select * from opstamm

order by bulw DESC

where zval < sysdate - 60 "


Oder habe ich da etwas falsch verstanden?

Gruß


----------



## ATha1 (7. November 2007)

du hast es soweit schon richtig verstanden, jedoch solltest du dich an die SQL Syntax halten, denn ORDER BY kommt meines Wissens nach dem WHERE Teil.

Auf einer Oracle Datenbank müsste es eigentlich dann so funktionieren.
Ich habe jetzt auswendig leider keine Ahnung wie es bei anderen Datenbanken aussehen würde, aber dazu müsstest einfach mal im Internet suchen (Datumsoperationen oder so...).

LG
ATha1


----------



## mwetzel (8. November 2007)

hi

hmm das würde erklären warum es bei mir nich funktioniert.. ich hab mssql und mysql hehe

aber dann muss ich mal weitergoogeln !

Vielen, vielen Dank für deine Hilfe!


----------



## mwetzel (15. November 2007)

Hi,

ich habe das Problem jetzt gelöst!
und zwar sieht meine Query jetzt folgendermaßen aus:

"select *
from opstamm, debstamm

where zval < current_date - 200 and bulw >= 10000
and (opstamm.kto=debstamm.kto)

order by zval desc"


die Zeile die mir gefehlt hatte war

where zval < current_date - 200

wobei "zval" die datumsabfrage aus meiner datenbank und das "current_date" ne allgemeine abfrage vom derzeitigen Datum ist.

also bei mir läuft es jetzt!

achso. ursprünglich wollte ich ja 60 tage abziehen. das geht aber in der form nicht, da in meiner abfrage ein Monat so zu sagen 100 tage hat. das kommt von dem format das wir benutzen. also hab ich die 100 tage durch 30 geteilt für 30 Tage/Monat und dann eben einfach das ergebnis mal 2 genommen... daraus folgen logischerweise 200 hehe

und so passt es jetzt alles wie ich es haben möchte!!

Also vielen Dank für die vielen Hilfe-Ansätze!

Gruß
Micha


----------



## chrishawaii (17. November 2007)

hallo liebe jasper-leute,

mich hat's jetzt auch getroffen und will/muss einen report erstellen.
ich nutze für die jasper-datei: ireport 2.0.2
input: generiertes xml
output: pdf
ein von mir generiertes xml sieht beipielsweise so aus:
<?xml version="1.0" encoding="UTF-8"?>
<Risiko>
  <MetaInformation>
    <GeneratedAt>Sat Nov 17 16:07:06 +0100 2007</GeneratedAt>
    <GeneratedBy>
      <UserName>crolle</UserName>
    </GeneratedBy>
  </MetaInformation>
  <Vorgang>
    <bez>Gondel</bez>
    <lebensphase>Errichtung</lebensphase>
    <beschreibung>Zur Beurteilung</beschreibung>
    <System>      
      <RisikoKlasse>
        <risiko_klasse_bez>Elektrik</risiko_klasse_bez>
      </RisikoKlasse>
      <RisikoKlasse>
        <risiko_klasse_bez>Heben/Bewegen</risiko_klasse_bez>
      </RisikoKlasse>
    </System>
    <System>
      <RisikoKlasse>
        <risiko_klasse_bez>Elektrik</risiko_klasse_bez>
      </RisikoKlasse>
      <RisikoKlasse>
        <risiko_klasse_bez>Heben/Bewegen</risiko_klasse_bez>
      </RisikoKlasse>
    </System>
    <System>
      <RisikoKlasse>
        <risiko_klasse_bez>Elektrik</risiko_klasse_bez>
      </RisikoKlasse>
      <RisikoKlasse>
        <risiko_klasse_bez>Heben/Bewegen</risiko_klasse_bez>
      </RisikoKlasse>
    </System>
  </Vorgang>
</Risiko>

nun will ich eine verschachteltet tabelle erstellen. dazu bleibt mir ja nur der subreport (wenn ich die einträge bisher richtig deute). meine frage ist nun, wie kann ich die unteren knoten (RisikoKlasse) an den subreport übergeben? ich vermute, ich brauche dafür parameter? habe da auch schon was probiert, aber die werte kommen im subreport nicht an, oder werden dort nicht ausgegeben? außerdem wundert mich folgendes:
die felder haben einen feldnamen (bsp. lebensphase) und eine feld-beschreibung: (bsp. /Risiko/Vorgang/lebensphase). 
in resultierender jrxml-datei:
	<field name="lebensphase" class="java.lang.String">
<fieldDescription><![CDATA[/Risiko/Vorgang/lebensphase]]></fieldDescription>
	</field>
und
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{lebensphase}]]></textFieldExpression>
				</textField>

seltsamerweise kann ich die werte der untersten knoten (bsp. risiko_klasse_bez) nur bekommen, wenn ich diesen pfad nicht angebe --> feld-beschreibung: risiko_klasse_bez anstatt /Risiko/Vorgang/System/risiko_klasse_bez.
in resultierender jrxml-datei:
	<field name="risiko_klasse_bez" class="java.lang.String">
		<fieldDescription><![CDATA[risiko_klasse_bez]]></fieldDescription>
	</field>
und
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{risiko_klasse_bez}]]></textFieldExpression>
				</textField>

kann mal bitte jemand generell beschreiben, wie man auf die werte zugeifen kann? habe auch schon sehr viel gegoogelt und in der ireport-doku gesucht.
ich komme echt nicht weiter.
irgendwie erschließt sich mir das prinzip der parameter-übergabe (zum einen auslesen aus xml und übergabe an subreport) in ireport nicht.

viele grüße und danke für jede antwort
christian


----------



## chrishawaii (18. November 2007)

hallo, ich nochmal,

nachdem ich weiter im netz geforscht habe (is leider sehr spährlich), bin ich zu dem schluss gekommen, dass ich womöglich gar keinen subreport brauche, sondern eine gruppierung der daten (Gruppe). mein problem ist und bleibt aber der zugriff aif die xml-daten. mir ist einfach schleierhaft, warum ich bei den innersten knoten keinen pfad angeben darf/soll. erscheint mir unlogisch. ich habe dann in ireports versucht eine solche gruppe mit dem berichts-assistent anzulgen, aber ich weiss nicht welche datenquelle (xml-datei ist es ja nicht, da es aus einem stream gelesen wird). wenn ich keine verbindung oder datenquelle angebe, sthen mir natürlich auch keine felder zur auswahl. ich nutze jasper-rails mit dem XmlJasperInterface.

jeder hinweis ist gold wert.

viele grüße
christian


----------



## takidoso (20. November 2007)

Hallo allesammt.
man das ist ja echt toll dass sich doch einige hier mit JasperREports beschäftigen. Ich selbst bin da mittlerweile aus der Übung kann mich aber noch sehr gut daran erinnen (ca 2003) als ich mich mit dem Thema auseinandersetzen musste. Anfangs noch ohne einen Editor. alles in XML zu Fuß(grusel)
Als ich dann Opensource mäßige Editoren fand entschied ich mich erst für einen anderen als IReport, da IReport zu dieser Zeit noch Microsoft-Java-Lastig war. Als ich dann jedoch bemerkte dass der Editor nicht mehr wirklich weiterentwickelt wurde und er noch so manche Bugs hatte und mittlerweile IReports auf standard Java richtig lief wechselte ich und war super super glücklich. 
Jetzt bin ich woanders tätig und arbeite gar icht mehr damit, aber wer weiß vielleicht ja irgendwann mal wieder.


----------



## mwetzel (27. November 2007)

Guten morgen,

ich bin mal wieder auf eine neues Problem mit IReport gestoßen.
Und zwar habe ich mir einen Bericht mit Datenbank-Query erstellt und möchte diesen Bericht in eine andere Software einbinden, sodass ich ihn dort anklicke und er direkt geöffnet wird.

Nun taucht aber leider ein Problem auf. und zwar bekomme ich dann folgende Meldung:

net.sf.jasperreports.engine.JRRuntimeException: com.lowagie.text.DocumentException: Font '' with 'Cp1252' is not recognized.
	at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:1486)
	at net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:1363)
	at net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:1346)
	at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:1703)
	at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:585)
	at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:549)
	at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:514)
	at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:283)
	at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdf(JasperExportManager.java:188)
	at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:283)
	at de.businessindex.actions.JasperReportAction.execute(JasperReportAction.java:130)
	at de.businessindex.servlets.SCPortalController.processRequest(SCPortalController.java:315)
	at de.businessindex.servlets.SCPortalController.handleRequest(SCPortalController.java:202)
	at org.apache.velocity.servlet.VelocityServlet.doRequest(VelocityServlet.java:358)
	at org.apache.velocity.servlet.VelocityServlet.doGet(VelocityServlet.java:317)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)
Caused by: com.lowagie.text.DocumentException: Font '' with 'Cp1252' is not recognized.
	at com.lowagie.text.pdf.BaseFont.createFont(BaseFont.java:403)
	at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:1474)
	... 40 more


Kann mir bitte jemand sagen was da genau das Problem ist und wie ich es beheben kann?

Vielen Dank im Voraus.

Gruß
Micha


----------



## mwetzel (27. November 2007)

Hey Leute, 

ich hab das Problem selbst gelöst. und zwar war es schlicht und einfach das, dass ich in einem meiner Felder keine PDF-Ausgabe-Sprache eingestellt hatte.

Kleine Ursache, große Wirkung... wie immer eben hehe

Gruß
Micha


----------



## mwetzel (27. November 2007)

Hey Leute, 

ich hab das Problem selbst gelöst. und zwar war es schlicht und einfach das, dass ich in einem meiner Felder keine PDF-Ausgabe-Sprache eingestellt hatte.

Kleine Ursache, große Wirkung... wie immer eben hehe

Gruß
Micha


----------



## mwetzel (12. Dezember 2007)

*Mehrere aktive Verbindungen*

Hallo zusammen,

ich bin bei der Arbeit mit IReport mal wieder auf ein Problemchen gestoßen und hoffe, dass ihr mir helfen könnt.

und zwar Folgendes:

Ich habe Berichte in IReport erstellt und kann die auch anzeigen lassen. Allerdings möchte ich nun so zu sagen mehrere aktive Verbindungen in EINEM Bericht laufen lassen.

Zweck davon ist es, dass ich ein und das selbe Konto in mehreren Firmen habe. Die Umsätze des Kontos möchte ich mir nun von allen Firmen in ein und dem selben Bericht anzeigen lassen. Die verschiedenen Firmen liegen jedoch in verschiedenen Datenbanken.

weis jemand von euch vielleicht, wie ich das hinbekommen kann?
wäre für jede Hilfe sehr dankbar!

Gruß


----------



## mwetzel (14. Januar 2008)

hallo,

und schon wieder ein Problem.
Und zwar möchte ich gerne, dass die Druckreihenfolge im IReport nicht vertikal, sondern fortlaufend horizontal ist.

weis jemand von euch, wie ich das hinbekommen könnte?

Gruß


----------



## Peregrin (10. März 2008)

Wie kann man denn in ireport mehrere SQL Abfragen erstellen ? Geht dies nur mit einem Subreport ?


----------



## NX74205y (16. Juli 2008)

Ich habe ein Problem mit Subreports. Wenn ich nur den Subreport aufrufe läuft der. Wenn ich den Masterreport aufrufe wir mir alles außer dem Teil mit dem Subreport angezeigt. Ich hab mir schon ein ganz einfaches Beispiel gemacht, wo im Master und im Sub jeweils nur ein paar statische Texte sind. Es läuft trotzdem nicht.

Der Teil im Masterreport, wo der Subreport aufgerufen wird:

```
<detail>
			<band height="245"  isSplitAllowed="true" >
				<subreport  isUsingCache="true">
					<reportElement
						x="0"
						y="0"
						width="481"
						height="150"
						key="subreport-1"/>
					<subreportParameter  name="jkl">
						<subreportParameterExpression><![CDATA[$P{jkl}]]></subreportParameterExpression>
					</subreportParameter>
					<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
					<subreportExpression  class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "unbenannter_bericht1.jasper"]]></subreportExpression>
				</subreport>
				<staticText>
					<reportElement
						x="101"
						y="167"
						width="214"
						height="31"
						key="staticText-2"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font/>
					</textElement>
				<text><![CDATA[second text]]></text>
				</staticText>
			</band>
		</detail>
```


----------



## gellie (14. Oktober 2008)

Hallo zusammen,

ich bin gerade dabei mich mit JasperReports "anzufreunden".
Leider komme ich im Moment an einem Punkt nicht weiter...
Vielleicht könnt ihr mir ja helfen 

Ich nutze als Editor Jasperassisant, meine Datenquelle ist ein xml-File, das folgende Struktur besitzt:

<a>

<b>

<c>
...
</c>
<c>
...
</c>​</b>​</a>

Ich möchte nun in meinem Report auf alle Elemente die unter c liegen zugreifen und das so oft es das Element c gibt.

Leider bekomm ich das nicht so hin 
Ich habe in Jasperassisant als in der Konfiguation der Datenquelle bei XPath Select "/a" eingegeben.

Wenn ich nun die Felder definiere und in der Description "b/c..." eingebe erhalte ich nur für das erste Element vom Typ c die entsprechenden Daten.

Gebe ich bei der Konfiguration der Datenquelle in XPath select aber /a/b/c ein und in den Feldern dann die entsprechenden Unterelemente von c erhalte ich für jedes Element c die entsprechenden Daten.

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt 

hat da wer von euch eine Idee?

Gruß,
Frank


----------

