Jasper Reports Seitenzahlen drucken

peterbanane

Grünschnabel
Hallo Leute,
ich habe ein Jasper Reports Problem. Mein Bericht enthält 12 Unterberichte welche auch recht lang werden können. Wenn ich diese Unterberichte im pageHeader oder pageFooter platziere bekomme ich den Fehler des Überlaufs:
"FehlerbeimFüllen...Infiniteloopcreatingnewpageduetopageheaderoverflow.
net.sf.jasperreports.engine.JRRuntimeException:Infiniteloopcreatingnewpageduetopageheaderoverflow."
Daher habe ich alle Daten und Unterberichte im title-Abschnitt platziert. Funktioniert auch hervorragend. Bis auf die Anzeige der Variablen PAGE_NUMBER welcheich im Abschnitt pageFooter platziert habe. Diese wird nur auf der letzten Seite ausgedruckt. Versteht hier jemand mein Problem und kennt eine pragmatische lösung ?
Über jeden Beitrag bin ich dankbar.
Es grüßt euch
Peterbanane
 
Hi!
Wieso fügst du deine Subreports denn nicht in den Detail Bereich deines Hauptreports ein? Da gehören sie in deinem Fall doch wohl auch rein..

Grüße!
 
Hallo Artorius,
erste einmal vielen Dank das sich überhaupt jemand zu meinem Schei..problem meldet, deinen Vorschlag habe ich auch schon versucht, die Seitennummerierung funktioniert halbwegs (1von1, 2von0, 3von0, 4von1, 5von0, 6von0, 7von1, 8von0, 9von0, 10von1, 11von0, 12von0, 13von0) aber leider kommen 13 statt 4 Seiten, die Unterberichte im Detailbereich werden 4 mal gedruckt.
Hast du vielleicht noch eine Idee was ausprobieren kann ?
Gruß,
Peter
 
Hi!
Das kann an sehr vielen Dingen liegen, hier mal was mir gerade dazu einfällt:
Deine Subreports hast du auch korrekt aufgebaut, d.h. das was in den Detail Bereich gehört in den Detailbereich gepackt, das was in den Titlebereich gehört in den Titlebereich etc etc?
Wie füllst du die Subreports? Sorgen diese selbst für ihre Daten? Dann überprüfen, ob die Abfragen eindeutig sind und nicht mehrere Datensätze geliefert werden obwohl du nur von einem Datensatz ausgehst.
PageNumber:
$V{PAGE_NUMBER} muss zweimal in deine Footer eingefügt werden. Einmal mit der EvaluationTime "Now" um die aktuelle Seitenzahl zu bestimmen, einmal mit der EvaluationTime "Report" und die Gesamtzahl der Seiten zu bestimmen.

Mehr fällt mir erstmal nicht dazu ein..

Grüße!
 
Hi,
das mit der Paginierung funktioniert jetzt perfekt, vielen Dank erst mal für diesen super Tipp.
Ich habe den SQL-Select mal in einem SQL-Developer ausgeführt und bekomme tatsächlich 4 Treffer. Dies liegt daran das ich im Hauptbericht (Tabelle REPORT) 4 Felder aus einem der Unterberichte abfrage. Ich mache das weil ich den Unterbericht nur anzeigen darf wenn der in der Unterberichtstabelle (U_REPORT) min. eines dieser Felder gefüllt hat. Sonst kommen nämlich nur die Überschriften der anzuzeigenden Felder und keine Daten und das sieht nicht gut aus. Diese
"Drucken wenn Ausdruck" - Abfrage im Unterbericht lautet bei mir:
(($F{U_REPORT_NAME_1} !=null) ||
($F{U_REPORT_NAME_2} !=null ) ||
($F{U_REPORT_NAME_3} !=null ) ||
($F{U_REPORT_NAME_4} !=null ) ?
Boolean.TRUE : Boolean.FALSE)
Kennst du vielleicht eine elegantere Variante um abzufragen ob in dem Unterbericht eines dieser Felder gefüllt ist ? In der Tabelle U_REPORT gibt es leider immer einen Leersatz zur Haupttabelle daher kann ich nicht auf den Primärindex abfragen, da hab ich immer einen Treffer, aber leider nicht immer Daten. Der Unterbericht mit Überschriften und Daten soll aber wie gesagt nur angezeigt werden wenn Daten vorhanden sind.
Ich hoffe du kannst dich in mein Problem etwas hineindenken und noch mehr hoffe ich dass dir eine Lösung einfällt. Vielen Dank für deine Bemühungen und deine Geduld mit mir.
Gruß,
Peter
 
Zuletzt bearbeitet:
Hi,
ehrlichgesagt so 100% folgen kann ich dir nicht. Aber soweit ich dich verstehe, hast du eher ein Problem mit der SQL-Abfrage, oder?
Wenn du wissen willst, ob mind. 1 von 4 Feldern gefüllt ist, könntest du eventuell so etwas konstruieren (Getestet auf ORACLE):
Code:
select nvl(column1,'') ||nvl(column2,'')||nvl(column3,'')||nvl(column4,'') ...
und das Ergebnis dann überprüfen, ob es leer ist.

Aber da ich deine Datenbanktabellenstruktur nicht kenne und auch nicht deinen Select Befehl, ist das jetzt nicht mehr als einen Schuss ins Blaue.
Falls dein Problem nun an der SQL-Abfrage liegt, würde ich dir empfehlen, hier im SQL Forum deine Frage nochmal zu stellen, und dabei noch mal konkret sagen, wie die Tabellen miteinander in Verbindung stehen, wie deine Abfrage aussieht, etc. etc...

Grüße!
 
Hallo Artorius,
du hattest natürlich völlig recht. Meine SQL-Abfrage war nicht ganz sauber, habe es jetzt mit einem geschachteten SQL-Befehl geschafft.
Vielen Dank noch mal für deine guten Tipps.
Gruß,
Peter
 
Zurück