Erfahrung mit JasperReports

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.

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

Wie kann ich an den Subreport Parameter übergeben?

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
 
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 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.

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

ha, das war ja einfach... musste die Summenvariablen einfach nur in den Groupfooter setzen...
 
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
 
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.
 
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
 
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
 
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
 
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ß
 
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
 

Neue Beiträge

Zurück