Erstellt vor 3 Jahren
Geschlossen vor 3 Jahren
#1733 closed Fehler (fixed)
sumcarriedforward stimmt nicht bei englischen Rechnungen bzw mit 1,000.00 Nummernformat
| Erstellt von: | marc@… | Verantwortlicher: | m.bunkus@… |
|---|---|---|---|
| Priorität: | normal | Meilenstein: | |
| Komponente: | kivitendo ERP | Version: | 2.6.3 |
| Schweregrad: | schwerwiegend | Stichworte: | Verkauf |
| Beobachter: |
Beschreibung
Hallo,
Wenn für eine Rechnung eine Sprache mit 1,000.00 oder auch 1000.00 Nummernformat eingestellt ist gibt es im PDF (Druck) anstatt "167.50" eine "16.750,00".
Es scheint an "," vs "." als Dezimaltrenner zu liegen.
Die einzelnen Rechnungspositionen passen (Format und Betrag).
Änderungshistorie (5)
comment:1 Geändert vor 3 Jahren durch marc@…
comment:2 Geändert vor 3 Jahren durch marc@…
In SL/Template/LaTeX.pm, sub parse_foreach():
my $psum = $form->format_amount($self->{"myconfig"}, $sum, 2);
Das "$sum" was dort übergeben wird sieht schon untersciedlich aus, wenn ich mit dem Dumper einmal die englische und einmal die deutsche Rechnung vergleiche.
Beispiel:
In einer Rechnung gibt es eine Zwischensumme, von EUR 167,20
Im debug dump steht nun für $sum ("print(DUMP_OUT Dumper($sum));")
deutsch: $VAR1 = '167.2';
englisch: $VAR1 = 16720;
Es scheint mir also so zu sein, dass im deutschen ein String und im englischen Fall ein Integer übergeben wird. Und irgendwie geht beim englischen der Dezimaltrenner verloren.
Ich kann im AUgenblick nur nicht erkennen an welcher Stelle $sum überhaupt gesetzt wird...
Noch zu meinem Setup: Ich hab das System auf "Deutsch" eingestellt und "Englisch" ist eine zusätzlich konfigurierte Fremdsprache...
comment:3 Geändert vor 3 Jahren durch marc@…
Wer lesen kann, ist klar im Vorteil:
$sum += $form->parse_amount($self->{"myconfig"}, $linetotal_array->[$i]);
Der Fehler muss in der sub parse_amount() liegen:
Wird ihr '10.00' anstatt '10,00' übergeben, liefert sie '1000' zurück.
nächster Kommentar erst, wenn ich nen Patch habe ;-)
comment:4 Geändert vor 3 Jahren durch marc@…
Ok, doch kein Patch, aber dafür eine Erklärung:
parse_amount wird benutzt um die Beträge zum aufsummieren zu formatieren und parse_amount benutzt nicht die Sprache des Dokuments, sondern des Users.
($myconfig->{number_format}
Wenn nun der User ein number_format = "1.000,00" hat, aber ein englisches Dokument mit number_format = "1,000.00" verarbeitet wird, dann kickt parse_amount zuerst die Punkte raus und verwandelt "," in ".".
Aus 1,000.00 wird dann 1 Aus 627.20 wird 62720 ...
Lösung:
Entweder darf nicht parse_amount benutzt werden, oder parse_amount darf sich nicht an der SPrache des Benutzers orientieren sondern muss die des Dokuments benutzen.
Ich kenne diesen Code leider nicht gut genug um einen richtigen Fix erarbeiten zu können.
Was wäre der richtige Weg?
Und warum werden für interne Berechnungen überhaupt formatierte Zahlen benutzt?
comment:5 Geändert vor 3 Jahren durch m.bunkus@…
- Lösung auf fixed gesetzt
- Status von new nach closed geändert
Der pagebreak-Mechanismus und damit auch die Variable "sumcarriedforward" wurde in Revision e36cc2a6 wegen nicht zu behebender technischer Probleme mit dem gesamten Mechanismus entfernt.

Habe gerade bemerkt, das dies auch "subtotal" betrifft.