Erstellt vor 3 Jahren

Geschlossen vor 2 Jahren

#1934 closed Fehler (fixed)

Umstellung von keine Währung auf Währung

Erstellt von: s.schoeling@… Verantwortlicher: m.bunkus@…
Priorität: normal Meilenstein: 3.0.0
Komponente: kivitendo ERP Version: 2.7.1 unstable
Schweregrad: normal Stichworte:
Beobachter:

Beschreibung

Wenn man ein System von keine Währung auf mindestens eine Währung umstellt, passiert folgende Kette von Ereignissen:

  • Alte Belege sind in der Währung , also leerer String gespeichert.
  • Währung (curr) ist in der Datenbank als char(3) gespeichert, wird also laut SQL Standard blankpadded/trimmed verglichen und ausgelesen. Das führt dazu dass die Belege die Währung ' ' haben (drei Leerzeichen)
  • Diese Währung ist im Perlsinne trueish, also bei naiven Prüfungen vorhanden.
  • Da nach dem Einführen einer Währung die erste Währung die Standardwährung sit, ist ' ' nicht eine andere Währung, und braucht einen Wechselkurs.
  • Da ohne Währungen kein Wechselkurs gespeichert wurde, ist der Wechselkurs für alte Belege in ' '.... 0.
  • 0 als Wechselkurs an sich ist schon ein Problem, wird aber bei speichern abgefangen.
  • Dadurch geht aber das Query in Form::update_exchangerate kaputt, und wirft beim Buchen von Zahlungseingängen einen SQL Fehler.

Änderungshistorie (4)

comment:1 Geändert vor 3 Jahren durch s.schoeling@…

Wenn man den SQL Fehler umgeht passieren noch weitere tolle Sachen.

  • Beim Zahlungen buchen wird versucht der Eintrag auf das Rechnungskonto mit dem inferierten Wechselkurs 0 zu multiplizieren, und dadurch geht die Buchung verloren.

comment:2 Geändert vor 2 Jahren durch m.bunkus@…

  • Meilenstein auf 3.0.0 gesetzt

comment:3 Geändert vor 2 Jahren durch m.bunkus@…

  • Status von new nach accepted geändert

comment:4 Geändert vor 2 Jahren durch m.bunkus@…

  • Lösung auf fixed gesetzt
  • Status von accepted nach closed geändert

In 7ea32650019b2611e03f83ccaa904a03d6a6b3d1/erp:

Währungen mit mehr als drei Zeichen erlauben & Spaltentyp 'text' anstelle von 'char(3)'

Alle Währungsspalten sind nun vom Typ 'text' anstatt 'char(3)'. Das
hat zwei Effekte:

  1. Es ist möglich, Währungen einzugeben, deren Abkürzung nicht exakt drei Zeichen lang ist.
  2. Fixt #1934. Durch Umstellung von "keine Währung" auf "Währungen" wurden Inhalte von 'char(3)' als drei Leerzeichen von PostgreSQL zurückgegeben (das ist SQL-Standardkonform), was von kivitendo als "oh das ist nicht die Standardwährung" interpretiert wurde.
Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.