Projekt

Allgemein

Profil

Fehler #555

Fehlermeldung "Form::check_exchangerate was an 'undef'" bei Debitoren- und Kreditorenbuchung

Von Andreas Rudin vor fast 2 Jahren hinzugefügt. Vor fast 2 Jahren aktualisiert.

Status:
Abgewiesen
Priorität:
Niedrig
Zugewiesen an:
-
Zielversion:
-
Beginn:
18.01.2023
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

Beschreibung

Wenn ich im aktuellen master vom 18.1.2023 via Finanzbuchhaltung → Debitoren/Kreditorenbuchung eine neue Buchung erstellen möchte, so erscheint sofort die oben angegebene Fehlermeldung.
Das passiert sowohl im neuen wie im alten Design.
Das ganze ist unabhängig davon, ob Fremdwährungen in der Mandantenkonfiguration eingerichtet wurden oder schon Buchungen vorhanden sind.

Bestehende Debitorenbuchungen und Kreditorenbuchungen kann ich aber problemlos aufrufen und bearbeiten.
Bei einer komplett neuen Installation ohne Daten erscheint der gleiche Fehler auch, wenn bei 'Verkauf → Rechnung erfassen'.

Hier der komplette Text der Fehlermeldung bei den Debitorenbuchungen:
--------------
Fehler!
Parameter #6 (undef) to Form::check_exchangerate was an 'undef', which is not one of the allowed types: scalar
at /var/www/kivitendo.ch/kivitendo-erp/SL/Form.pm line 1507.
Form::check_exchangerate(Form=HASH, HASH, "USD", "17.01.2023", "buy", undef, "ar") called at /var/www/kivitendo.ch/kivitendo-erp/bin/mozilla/ar.pl line 384
main::form_header called at /var/www/kivitendo.ch/kivitendo-erp/bin/mozilla/ar.pl line 303
main::display_form called at /var/www/kivitendo.ch/kivitendo-erp/bin/mozilla/ar.pl line 271
main::add() called at /var/www/kivitendo.ch/kivitendo-erp/bin/mozilla/common.pl line 284
main::call_sub("::add") called at /var/www/kivitendo.ch/kivitendo-erp/SL/Dispatcher.pm line 313
eval {...} called at /var/www/kivitendo.ch/kivitendo-erp/SL/Dispatcher.pm line 322
SL::Dispatcher::handle_request(SL::Dispatcher=HASH, FCGI=SCALAR) called at /var/www/kivitendo.ch/kivitendo-erp/SL/Dispatcher.pm line 230
SL::Dispatcher::handle_all_requests(SL::Dispatcher=HASH) called at /var/www/kivitendo.ch/kivitendo-erp/dispatcher.fcgi line 21
-------------------

Historie

#1

Von Jan Büren vor fast 2 Jahren aktualisiert

  • Status wurde von Neu zu Gelöst geändert

Ich vermute, dass in dieser Installation noch keine Kunden angelegt sind.

Zwei Commits, die den Anwender vielleicht etwas besser dahin leiten. Belege zu erfassen ohne einen Kunden oder Lieferanten macht prinzipiell keinen Sinn.

1a83013acd17
f0dfaf1d070ea94

#2

Von Andreas Rudin vor fast 2 Jahren aktualisiert

  • Status wurde von Gelöst zu In Bearbeitung geändert

Hallo Jan
Habe das Ticket wieder von 'gelöst' auf 'in Bearbeitung' gesetzt.
Bei unserer Demo-Installation unter demo.kivitendo.ch sind diverse Kund*innen vorhanden und der Fehler tritt dort trotzdem auf.
Kann jederzeit live dort getestet werden!

#3

Von Andreas Rudin vor fast 2 Jahren aktualisiert

sorry vergessen, da dies momentan nicht ersichtlich ist: Login auf demo.kivitendo.ch mit demoadmin / demoadmin

#4

Von Andreas Rudin vor fast 2 Jahren aktualisiert

Jan hat ja heute im Chat mal erwähnt, dass das Problem sein könnte, dass eine Debitorenbuchung in USD erfasst wurde.
Habe deshalb testweise mal bei allen bestehenden Debitorenbuchungen und Rechnungen die Fremdwährungen rausgenommen und alle neu nur noch in CHF gebucht.
Der Fehler tritt aber trotzdem weiterhin auf.
Und ...: Debitorenbuchungen in Fremdwährung müssen ja möglich sein!

#5

Von Andreas Rudin vor fast 2 Jahren aktualisiert

So, hatte gerade noch eine Idee:
Bei unserer Demo-Installation ist in der Mandantenkonfiguration USD an erster Stelle aufgeführt und CHF als Standardwährung erst an zweiter Stelle.
Habe nun mal USD als Standardwährung gewählt und nun ist der Fehler weg.
Hoffe, dass sich damit der Fehler leichter eingrenzen und finden lässt und behoben werden kann.

#6

Von Andreas Rudin vor fast 2 Jahren aktualisiert

Vielleicht noch als Ergänzung:
Die Frage ist natürlich, wie sinnvoll es ist, dass in einer bestehenden Installation die Standardwährung innerhalb eines Mandanten geändert werden kann, wenn es bereits Buchungen gibt.
Damit werden ja alle bestehenden Buchungen falsch, weil kein oder ein falscher Wechselkurs eingetragen ist.
Wer hat das in der Mandantenkonfiguration so eingerichtet, dass dort die Standardwährung jederzeit geändert werden kann? Was gibt es dafür für Gründe?

#7

Von Andreas Rudin vor fast 2 Jahren aktualisiert

Habe nun noch mit der anderen Installation, bei der noch keine Kund*innen erfasst waren nochmals getestet nach Update auf die neuste master-Version vom 18.1.2023 19 Uhr, also inklusive der beiden commits von Jan zur Behebung dieses Fehlers:
(Bei dieser Installation ist CHF als einzige Währung vorhanden und in der Mandantenkonfiguration als Standardwährung gekennzeichnet (wird ja bereits beim Anlegen des Mandanten so eingerichtet)).

1) Es kommt nach wie vor die gleiche Fehlermeldung wegen der exchangerate und kein Hinweis, dass zunächst ein Kunde / eine Kundin angelegt werden muss.

2) Nach dem Anlegen einer Kundin, wird die Fehlermeldung nach wie vor beim Aufruf von 'Finanzbuchhaltung → Debitorenbuchung' angezeigt, genauso beim Aufruf von 'Verkauf → Rechnung erfassen'. Wenn ich hingegen von der Kundin aus den Workflow 'Speichern und Debitorenbuchung erfassen' oder 'Speichern und Rechnung erfassen' wähle, erscheint der Fehler nicht.

#8

Von Andreas Rudin vor fast 2 Jahren aktualisiert

Die wesentliche Fehlermeldung, wenn nur eine Währung als Standardwährung vorhanden ist, lautet:
Form::check_exchangerate(Form=HASH, HASH, undef, "18.01.2023", "buy") called at /var/www/kivicommit/kivitendo-erp/SL/Form.pm line 2637

Für mich sieht das so aus, dass in SL/Form.pm in der Zeile darüber:
$self->{currency} = $self->{defaultcurrency} unless $self->{currency};
$self->{defaultcurrency} undef ist und dies obwohl in der Mandantenkonfiguration CHF als Standardwährung ausgewählt ist.
In der Datenbank ist in Tabelle defaults currency_id = 1 und die Tabelle currencies hat eine Zeile mit id = 1 und name = CHF.

#9

Von Jan Büren vor fast 2 Jahren aktualisiert

Andreas Rudin schrieb:

sorry vergessen, da dies momentan nicht ersichtlich ist: Login auf demo.kivitendo.ch mit demoadmin / demoadmin

Ok, kannst Du mir den Datenbestand von Eurer Demoinstallation zu Verfügung stellen?

Dann kann ich dagegen testen.

Gruß

#10

Von Jan Büren vor fast 2 Jahren aktualisiert

  • Status wurde von In Bearbeitung zu Abgewiesen geändert
  • Priorität wurde von Hoch zu Niedrig geändert

Hallo Andreas,

ah, jetzt versteh ich das. Vorher gab es keine Default-Currency.

Wie hast Du den dieses DB-Upgrade Skript dann ausgetrickst?

sql/Pg-upgrade2/currencies.pl

Von der Oberfläche her muss ich mittlerweile eine Standardwährung auswählen, bzw. ich hab mir einen neuen Mandanten mit Schweiz-MWST-2023 erstellt und erhalte dort die eingestellt Standardwährung EUR.

kivitendo ohne Eintrag 'Standardwährung' ist definitiv buggy, weil dann immer ein Vergleich ausgeführt wird EUR == undef und somit denkt kivi das es einen Wechselkurs braucht.

Die check_exchangerate Funktion akzeptiert das nicht mehr und das keine Standardwährung definiert wird, kann ich bei einem neuangelegten Mandanten nicht feststellen.

Das entsprechende Upgrade-Skript das auf diesen Fehler hinweist ist Vorbedingung für die 3.0 (s.o.).

Auch abrufbar als: Atom PDF