Entwickler-Ecke
Datenbanken - Firebird Trigger
landwehr - Fr 14.01.11 13:00
Titel: Firebird Trigger
Hallo,
kann ich in einem Trigger roundto einsetzen.
Hier der Trigger.
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| begin if (new.Typ <> 'D') then begin if ((new.FAKTOR is Null) or (new.FAKTOR = 0)) then new.FAKTOR = 1; if ((new.MENGE is Null) or (new.MENGE = 0)) then
new.MENGE = 1; New.GESAMTBETRAG = New.MENGE * new.FAKTOR * New.EINZELPREIS; if (new.STEUERSATZ is not null) then new.STEUERBETRAG = new.GESAMTBETRAG * new.STEUERSATZ / 100; if (new.Steuersatz is not NULL) and (New.LKZ = 'CH') THEN new.STEUERBETRAG = roundto((new.GESAMTBETRAG * new.STEUERSATZ / 100)*2,-1)/2 ; <- Um diese Zeile handelt es sich end end |
Für eine schnelle Antwort vielen Dank
Moderiert von
Martok: SQL-Tag gesetzt
landwehr - Fr 14.01.11 13:53
Nein nicht so richtig. Ich muß die MwSt in der Schweiz berechnen. In Delphi geht das so.
roundto((strtofloat(EINGABE))*2,-1)/2;
Walter
Nersgatt - Fr 14.01.11 14:02
Das heißt, Du musst auf 5 Rappen genau runden, wenn ich mich richtig errinner?
Trick 17: 1. Verdoppeln 2. Runden 3. halbieren:
SQL-Anweisung
1:
| select round((cast(:wert as numeric(15,2)) * 2), 1) / 2 from rdb$database |
also prinzipiell das selbe, wie in Deinem Codeschnippsel
landwehr - Fr 14.01.11 19:37
OK
Werde ich am Wochenende mal testen.
Gebe Feedback wenn OK.
Zunächst schon mal Danke.
Gruß Walter
landwehr - Di 18.01.11 19:07
Hallo,
habe es hinbekommen,
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| begin if (new.Typ <> 'D') then begin if ((new.FAKTOR is Null) or (new.FAKTOR = 0)) then new.FAKTOR = 1; if ((new.MENGE is Null) or (new.MENGE = 0)) then new.MENGE = 1; New.GESAMTBETRAG = New.MENGE * new.FAKTOR * New.EINZELPREIS; if (new.STEUERSATZ is not null) then new.STEUERBETRAG = new.GESAMTBETRAG * new.STEUERSATZ / 100; if (new.Lkz = 'CH') then begin new.STEUERBETRAG = new.GESAMTBETRAG * new.STEUERSATZ / 100; new.STEUERBETRAG = round((cast(new.STEUERBETRAG as numeric(15,2)) * 2), 1) / 2; end end end; |
Vielen Dank
mfg
Walter
Moderiert von
Narses: SQL-Tags hinzugefügt
Nersgatt - Di 18.01.11 19:38
Den (cast(new.STEUERBETRAG as numeric(15,2)) kannst Du Dir an der Stelle sparen. Der war nur meinem Beispiel drin, damit der Parameter als Numeric behandelt wird. Schreib einfach new.STEUERBETRAG
Josef-B - Di 25.01.11 15:43
Aber bei roundto gibts meines Wissens die Problematik, dass roundto nicht kaufmännisch rundet sondern amerikanisch.
Deshalb mach ich dass immer mit Wert = trunc(wert*100+.5)/100, bei negativen Werten -0.5
Sonst gibts bei der MWST-Berechnung öfter Differenzen von 0,01 Euro
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!