-
Hi Leutz.
Ich habe einen Report mit IReport erstellt und will eine Zeile nur dann anzeigen wenn mein feld ($F{kart_menge10) NICHT 0 ist.
Dieses kommt aus einer Datenbank und ist vom Typ BigDecimal.
eigentlich sollte es doch so gehen.. also diesen Code bei "Drucken wenn Ausdruck"
einfügen. Aber das will einfach nicht..
kann mir irgendwer helfen
so gehts nicht
Code :1
( $F{kart_menge10}==new BigDecimal(0) ? Boolean.FALSE : Boolean.TRUE )
so auch nicht
Code :1
( $F{kart_menge10}==BigDecimal.ZERO ? Boolean.FALSE : Boolean.TRUE )
heisst wenn das Feld vom Typ BigDecimal 0 oder 0.00(<-- das ist glaub mein Problem) ist FALSE zurück geben, sonst TRUE.
-
Mal eine Frage von welchem Typ ist denn Dein Feld?
ist es ein String dann müstest Du es vermutlich umwandeln in BigDecimal.
ist es schon ein BigDecimal... dann würde ich es mal mit BigDecimal.compareTo(BigDecimal nummer) versuchen.
Grüße und gutes Gelingen
Takidoso
Nachtrag: vielleicht hilft Dir ja auch schon die equals-Mehtode weiter
-
Das Feld das ich vergleichen will ist ein BigDecimal.
Und ich will einfach abfragen ob der wert 0 ist.
Aber irgendwie geht das nicht.
0 nimmt er gar nicht und bei 0.00 komme ich nicht auf das gewünschte ergebnis.
heist ob jetzt 1.23 oder 0.00 drin steht er liefert immer das selbe zurück.
ich müsste eigentlich nur TRUE zurück liefern wenn die Zahl 0.00 ist.
nur das erweist sich schwerer als man denkt
-
Hi
Wieso 0.00 und nicht 0.0? Haben die BigDecimals in dem Feld $F{kart_menge10} die Auflösung von zwei Dezimalstellen?
Hast du takidosos Vorschlag (compareTo) ausprobiert? Scheint das einzig Wahre zu sein:
Das hier klappt bei mir:compareTo
public int compareTo(BigDecimal val)
Compares this BigDecimal with the specified BigDecimal. Two BigDecimals that are equal in value but have a different scale (like 2.0 and 2.00) are considered equal by this method. This method is provided in preference to individual methods for each of the six boolean comparison operators (<, ==, >, >=, !=, <=). The suggested idiom for performing these comparisons is: (x.compareTo(y) <op> 0), where <op> is one of the six comparison operators.
Parameters:
val - BigDecimal to which this BigDecimal is to be compared.
Returns:
-1, 0 or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
Code java:1
System.out.println(new BigDecimal(-0.0).compareTo(new BigDecimal(0.00))==0? "true": "false");
GrussKonnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)
----------------------
Pofessional tutorials.de lover ;)
-
hast Du es denn schon mit meinem obigem Vorschlag experimentiert? Benutze nicht den Operator == sondern die Routine equals oder die Routine compareTo
Der Grund warum es mit dem == Operator nicht geht ist, dass Du damit die Identität der Objekte abfragst (genauso wie bei Strings) daher benötigst Du hier eine der dafür vorgesehenen Vergleichsroutinenen!Geändert von takidoso (18.03.09 um 12:58 Uhr)
-
o mann.. endlich.. vielen vielen dank leutz.
so gehts
Code :1
new Boolean(($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? "false": "true"))
aber mal ne Frage. WIe oder wo lässt du dir das im IReport mit System.out.println() anzeigen... wenn ich das könnte hätte ich warscheinlich net soviel Probs
und warum man false und true als String zurück gibt ist mir ehrlich gesagt nicht ganz klar!
Na Ok.. bei IReport ist mir ehrlich gesagt fast nichts wirklich klar
-
lol
Das habe ich natürlich nicht in iReport gemacht.
In iReport ist
natürlich sinnvollerCode java:1
($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? Boolean.FALSE : Boolean.TRUE)

Sonst hast du da noch einen cast von String zu Boolean. Unnötiger Overhead.
Dachte das wäre klar
GrussKonnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)
----------------------
Pofessional tutorials.de lover ;)
-
Das ist weniger eine Frage von IReports, mehr eine Frage von Java. Der Konstruktor für Boolean bietet die Möglichkeit auch mit den Strings "true" und "false" zu arbeiten. Bedeutet aber wie schon von jeipack erwähnt einen gewissen Overhead und sollte besser nur dann verwendet werden, wenn es nicht anders geht.
Schau doch mal in die Sourcen der Klasse Boolean nach, dann siehst Du auch warum sowohl Deine als auch jeipacks Lösung geht und warum jeipacks optimierter ist.
BTW: Jeipack hat in seinem 1. Vorschlag keinen Code in IReport bzw JasperReport integriert, sondern sein Beispiel geht von reinem Java aus.
-
Ich tu mich sehr sehr schwer mit IReport.
mit Boolean.FALSE wollt ich es schon zu beginn machen
Wie gasagt, mit java komm ich ziemlich gut klar, aber im IReport abfragen oder bedingungen zu formulieren ist ne Sache für sich
Dann markier ich den Thread mal als erledigt und sag noch mal vielen dank euch zweien das ihr euch auch noch die Zeit genommen habt mir das zu erklären
gruss
MScalli
-
Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)
----------------------
Pofessional tutorials.de lover ;)
-
o mann.. jetzt muss ich diesen Thread noch mal aufmachen

kann mir einer dabei helfen
ich hab ein Feld vom Typ BigDecimal.. in diesem steht entweder
0.00
1,00
oder 2,00 drin
um das zu testen will ich einfach den wert zurück geben.. ich hab das mal so im IReport gemacht, aber es kommen bei 2 sätzen fehlerhafte ergebnisse..
mein code (im IReport)
Code :1 2 3 4 5 6
($F{a_pe_vk}.compareTo(new BigDecimal(0.00))==0 ? new BigDecimal(0.00) : ($F{a_pe_vk}.compareTo(new BigDecimal(1.00))==1 ? new BigDecimal(1.00) : ($F{a_pe_vk}.compareTo(new BigDecimal(2.00))==2 ? new BigDecimal(2.00) : new BigDecimal(111.00) ) ) )
heisst ich schau zuerst.. steht 0 drin
ja :0,00 zurück geben
nein: schauen ob 1 drin steht
ja: 1,00 zurück geben
nein: schauen ob 2 drin steht
ja: 2,00 zurück geben
nein 111,00 zurück geben
ich bekomme leider je nach menge der sätze verschiedene werte..
hab ich da nen hund drin? Ich verstehs echt bald nicht mehr..
übrigens die Zahlen die ich zurück gebe sind frei erfunden.. einfach um zu sehen was passiert
plz HELP
gruss
MScalli
-
Hi
Schau dir die Doku zu compareTo mal genau an. Vorallem den Rückgabewert:
Das heisst: wenns gleich sind kommt 0 zurück. Wenn der zu vergleichende Wert kleiner ist kommt -1 zurück wenn er grösser ist kommt 1 zurück.Returns:
-1, 0 or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
Heisst für dich:
Ahja und 0.00 ist nicht nötig. 0.0 reicht.Code java:1 2 3 4 5 6
($F{a_pe_vk}.compareTo(new BigDecimal(0.00))==0 ? new BigDecimal(0.00) : ($F{a_pe_vk}.compareTo(new BigDecimal(1.00))==0 ? new BigDecimal(1.00) : ($F{a_pe_vk}.compareTo(new BigDecimal(2.00))==0 ? new BigDecimal(2.00) : new BigDecimal(111.00) ) ) )
GrussKonnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)
----------------------
Pofessional tutorials.de lover ;)
-
Noch 1 winzige Frage.. Wo finde ich diese Doku

(hab mir jetzt das Buch besorgt.. was ein wälzer)
O mann.. du glaubst gar nicht wie lange ich da schon rum mache
vielen dank noch mal
gruss
MScalliGeändert von MScalli (20.03.09 um 18:17 Uhr)
-
Grüße die Herren
Als ich wieder mal verkrampft das Web auf der Suche nach "kostenloser" Hilfe durchforstet habe stosse ich auf dieses Forum.
Und was vernehmen meine tränenden Augen:
DA GIBTS JA JEMANDEN DER SICH MIT iReport AUSKENNT
Langer Rede kurzer Sinn, ich hab zwar den Report perfekt erstellt aber aus einer java Applikation bring ich ihn nicht zum Laufen.
Natürlich hab ich mir schon die ToDo's rein gezogen, aber offensichtlich stimmt was nicht mit meiner Weisheit!
Das ist mein Versuch:
try{
JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Hier zerlegt es ihn!
String url = "jdbc:mysql://localhost/xxxxxxxxxxxxx";
String usr = "xxxxx";
String pass = "xxxxxx";
Class.forName("com.mysql.jdbc.Driver").newInstance();
java.sql.Connection conn = java.sql.DriverManager.getConnection(url,usr,pass);
System.out.println("Datenbank ist verbunden");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null,conn);
JasperViewer.viewReport(jasperPrint);
}catch(Exception ex) {
String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
System.out.println(connectMsg);
}
Liebe Anhänger des iReports, tut ein gutes Werk und helft den Unwissenden
Ich komm erst gar nicht zum Connect der DB!
Version: iReport nb 3.1.4
Eingebundene libs:
commons-beanutils-1.7.jar
commons-digester-1.7.jar
jasperreports-3.1.4.jar
commons-collections-2.1.jar
commons-logging-1.1.jar
Imports:
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.JasperReport;
Ergebnis:
Could not create the report Error compiling report java source files : E:\Work\BierBoerse09\Bier_Boerse\classic_1237571800281_37932.java Error compiling report java source files : E:\Work\BierBoerse09\Bier_Boerse\classic_1237571800281_37932.java
-
Also wenn du nichts vom Prgramm übergeben musst reicht es so
Code :1 2 3 4 5 6 7 8 9 10 11
try{ JasperReport jasperReport = JasperCompileManager.compileReport("K:\\Temp\\Test.jrxml"); //<-- hier den Pfad der jrxml angeben JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, getConnection()); JasperViewer.viewReport(jasperPrint); }catch(Exception ex) { String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage(); System.out.println(connectMsg); }
so wird dir der Bericht im Viewer angezeigt!!
Ähnliche Themen
-
Problem mit JasperReports und iReport
Von DaSuckOOr im Forum JavaAntworten: 1Letzter Beitrag: 22.03.09, 18:00 -
Subreport, JasperReports, IReport
Von breakthedawn im Forum JavaAntworten: 2Letzter Beitrag: 27.02.09, 08:45 -
JasperReports / iReport - Bild drehen
Von keeel im Forum JavaAntworten: 0Letzter Beitrag: 04.03.08, 14:53 -
IReport/JasperReports
Von MScalli im Forum JavaAntworten: 0Letzter Beitrag: 10.01.08, 13:05 -
JasperReports / IReport Hilfeeeeee
Von MScalli im Forum JavaAntworten: 1Letzter Beitrag: 29.11.07, 09:04



3Danke

Zitieren
Login





