# Rechnungsausdruck mit JasperReports + IReports



## csman (11. April 2006)

Hallo!

Nachdem ich mir jetzt schon einiges über JasperReports durchgelesen haben stehen leider immer noch Fragen offen 

Wir realisieren in einem Schulprojekt eine Software um Arztrechnungen zu erstellen. Grundsätzlich gibt es da soweit keine Probleme. Das ganz wird in Java realisiert und die Speicherung der Rechnungen sowie der Patienten erfolgt in einer Oracle XE Datenbank. 

Nun geht es aber darum wie man die Rechnungen ausdruckt. Ich habe dazu schon einiges über JasperReports gelesen und bin mal soweit einen Report von einem fixen SQL Statement zu erstellen.

Doch jetzt stellt sich mir die Frage ob ich das SQL Statement für den Report aus dem Java Programm beeinflussen kann?! (Also es wäre dann in etwa das selbe SQL Statement nur wäre abhängig vom gewünschten Ausdruck die Prüfung der Rechnungsnummer unterschiedlich.)
Oder wäre es besser die Daten mittels SQL Statements in das Java Programm zu holen und anschließend dann an den Report zu übergeben?

Leider konnte ich für beide Möglichkeiten nicht sehr viel finden. D.h. ich weiß zur Zeit nicht wie und ob ich das SQL Statement beeinflussen kann bzw. wie ich Daten vorher an den Report übergeben kann.


Mit Bestem Dank schon mal im Vorraus
csman


----------



## elmato (12. April 2006)

Ich verstehe nicht so ganz was du unter beeinflussen meinst, aber du kannst dir mit deinem Programm die Daten aus der Datenbank holen und sie dann JasperReports übergeben(wie willst du es auch sonst mache?) Und wenn du an unterschiedlichen Stellen unterschiedliche Daten brauchst kannst du ohne weiteres sagen wenn ein Wert null/0 ist dann drucke ihn ncht mit aus.. Ich hoffe das war es was du wissen möchtest, ansonsten präzisiere deine Frage am besten mit einem kleinen Beispiel 

mfg
elmato


----------



## csman (12. April 2006)

Grundsätzlich sehe ich darin kein Problem die Daten im Java Programm aus der Datenbank zu holen. Allerdings findet man nirgendwo Anleitung wie man die Daten dann ein den Report übergibt bzw. wie man einen Report überhaupt erstellt wenn kein SQL Statement benützt wird.

Bei allen Anleitungen usw. die ich bis jetzt gefunden habe wird ein simples SQL Statement und eine JDBC Datenbank Connection verwendet.


----------



## elmato (12. April 2006)

Nunja, es kommt auf die Struktur deiner Daten an, jenachdem musst du dir eine eigene JRDataSource schreiben oder wenn du es z.B. Tabellenform hast kannst du auf die JRTablemodelDatasource zurückgreiffen, es gibt auch noch JRBEanCollectionDatasource  u.a., ich hatte da mal eine ziemich gute Website zu ich schau mal ob ich sie wiederfinde..

jup hier ist sie 
http://www.infoviae.it/jasperreports_e.html


----------



## csman (13. April 2006)

Verstehe ich das richtig, ich erstelle in IReport Felder mit dem Namen der Spalten.
Dann greife ich im Java Programm auf die Datenbank zu und bekommen beispielsweise ein ResultSet. Dieses ResultSet kann ich dann mit fillReport an den Report übergeben und es werden die Felder, die ich in der Tabelle habe automatisch ausgefüllt.?!


----------



## elmato (14. April 2006)

Ja so ist das ganze gedacht..


----------



## csman (22. April 2006)

So mein Report ist jetzt im Großen und ganzen fertig 

Nur habe ich jetzt noch eine Frage:

Es gibt 3 Felder in der Tabelle (Titel, Vorname, Nachname).
Wie kann ich die Felder nacheinander hängen und sagen, wenn der Titel leer ist soll er einfach mit dem Vornamen anfangen als zB so "Max Mustermann" oder "DI Max Mustermann".

Ich hab es folgendermaßen versucht

```
$F{titel}+" "+$F{vname}+" "+$F{nname}
```

Wenn jetzt der Titel aber leer ist dann sieht es so aus "null Max Mustermann"

Bei einem einzelnen Feld kann man ja sagen, wenn das Feld null ist, dann soll es nicht angezeigt werden, aber wie funktioniert das, wenn ich die 3 Felder verbinde?


----------



## BLOEBAUM (24. April 2006)

Hallo,

Bei drei Feldern funktioniert das ganze genauso.
Du musst dir nur alle möglichen Kombinationen überlegen, die auftreten können.
Diese Kombinationen musst du dann in geschachtelte Abfragen packen.
Bsp. Feld 1, Feld 2, Feld 3

Wenn Feld 1 = null
   dann wenn Feld 2 = null 
       dann wenn feld 3 = null 
                        dann druck nichts
               sonst
                        druck nur Feld 3 (nur Feld 3 ist gefüllt)
   sonst
       wenn Feld 3 = null
            dann druck Feld 2
      sonst druck Feld 2 und Feld 3

usw.


----------



## csman (25. April 2006)

Hi!

Dein Tipp funktioniert für Strings sehr gut, doch jetzt will ich zwei Date Datentypen vergleichen und er vergleicht irgendwie gar nichts:


```
(($F{enddat}==$F{startdat})?("Behandlungsdatum:"):("Behandlungszeitraum:"))
```

Es wird immer der Text "Behandlungszeitraum:" ausgeben.

Ich verwende die gleiche Zeile für einen Stringvergleich da funktioniert alles!

Kann mir jemand sagen was an dieser Zeile nicht stimmt bzw. warum er den Vergleich nicht durchführt?!

Danke!


----------

