Fehler #244
Kontoauszug verbuchen mit Fremdwährung
0%
Description
Eine von beiden Aussagen ist wahr:
i)
Falls man den Zahlungseingang einer Eingangsrechnung per Kontoauszug verbuchen verbucht, wird alles sauber ausgeführt (Wechselkurs berechnen falls vorhanden, usw), allerdings wird paid im Nebenbuch nicht richtig gesetzt
ii)
Falls man bei einer Einkaufsrechnung mit Fremdwährung noch 1 Cent Wechselkursdifferenz manuell im Beleg bucht, wird im Nebenbuch die Summe von paid nicht Wechselkurs bereinigt und ap.paid != sum(acc_trans.paid)
Es sieht stark nach dem ii) Fall aus, da an der Oberfläche des Belegs folgende Ausgabe passiert:
Datum Beleg Betrag Wechselkurs. Konto 13.02.2017 2.210,57 1,18 1200 09.05.2017 0,01 1,18 1590--Durchlaufende Posten Summe 2.210,58 Fehlbetrag -334,83
Files
History
Updated by Jan Büren over 7 years ago
- File Payment.pm.patch Payment.pm.patch added
Der Fehler ist woanders im System.
Ich hab folgende Banktransaktion:
-361.78000 | -361.78000 | 304,50KURS 0,8500841,00% AUSLANDSUMS. 3,58UMSATZ VOM 16.02.2017VISTACARD
Es wurden 304,50 in der Fremdwährung bezahlt. In Euro erhalte ich hier mit 1% Auslandsumsatz-Aufschlag einen Wert von 361,78
Meine Einkaufsrechnung hierzu ist mit dem Kehrwert erfasst worden:
select transdate,buy,sell from exchangerate where id = 13; transdate | buy | sell ------------+-----+--------- 2017-02-20 | | 1.14992
Demnach bucht kivitendo jetzt in der Hauswährung, Rechnungsbetrag * Kehrwert Wechselkurs und ich erhalte:
Verbindlichkeiten aus Lief.u.Leist. 344,98
Beim Kontoauszug verbuchen, erhalte ich die richtigen Werte an der Oberfläche, da der Rechnungsbetrag ja schon in der Hauswährung berechnet wurde:
€-Bankbewegung Rechnungsbetrag EK-Rechnung -361,78 344,98
Das Rechnungsdatum der Einkaufsrechnung und das Datum der Bankbewegung sind identisch. Demnach ist nicht mit Wechselkursdifferenzen zu rechnen.
Kontoauszug verbuchen meldet zurück:
Rechnung 12453 wurde um 16,80 überzahlt.
Das sieht gut aus, allerdings wurde eine weitere Bankbewegung mit 54,24 hinzugebucht und das Sammelkonto entsprechend erhöht.
Der Code sieht so aus, als ob er die Wechselkursdifferenz berücksichtigt und falls diese nicht abweicht, passiert auch nichts weiter.
In einem ersten Patch hab ich die Währungsbehandlung etwas anders gestaltet.
Meiner Meinung nach, müssten diese Bedingungen zusammengefasst werden:
if ( $self->currency_id != $::instance_conf->get_currency_id ) { if ($self->exchangerate and $self->exchangerate != 1 and $self->exchangerate != $exchangerate) {
und die Berechnung von paid_amount * exchangerate weiter vorne:
# bank account and AR/AP $paid_amount += $pay_amount * $exchangerate;sollte besser später gemacht werden, bwz. schöner lesbarer wäre eine Auslagerung a la $self->_handle_exchangerate damit wird es direkt klarer, was passieren soll.