Fehler #164
Prüfung der Bücherkontrolle in Zahlungseingängen und Zahlungsausgängen fehlerhaft
100%
Beschreibung
Beim Verbuchen von Zahlungseingängen/Zahlungsausgängen in den Belegmasken Einkaufsrechnung, Verkaufsrechnung, Kreditorenbuchung und Debitorenbuchung wird die Prüfung der Bücherkontrolle nur auf das closedto
-Datum angewendet ("Die Bücher abschließen bis einschließlich zum..."), das max_future_booking_interval
("Maximale Anzahl von Tagen an denen Buchungen in der Zukunft erlaubt sind.") wird ignoriert.
Außerdem werden dabei ALLE bereits verbuchten Zahlungen geprüft, nicht nur die neu hinzugefügte, was das hinzufügen einer neuen Zahlung ohne aufheben der Bücherknotrolle in solch einem Fall unmöglich macht.
Dies wurde zwar teilweise korrigiert (http://trac.kivitendo.de/ticket/1502) jedoch nur für Einkaufsrechnungen (is.pl) und auch das sehr fragil: Es wird stets nur der letzte Eintrag in der Liste der Zahlungsvorgänge geprüft (was nach einem "Erneuern" keinen Sinn mehr macht, da der letzte Eintrag leer ist; außerdem ist es möglich bereits gebuchte Zahlungsvorgänge zu ändern).
Historie
Von Peter Schulgin vor mehr als 8 Jahren aktualisiert
Vorschlag für den zweiten Teil (Bücherkontrolle prüft auch ALTE Zahlungsvorgänge):
- Bei der Anzeige von "alten" Zahlungsvorgängen, welche außerhalb der Bücherkontrolle liegen, diese readonly anzeigen - analog zu dem Fall wenn Zahlungen nur am selben Tag editierbar sind (Mandantekonfiguration->Buchungskonfiguration->Änderbarkeit von Zahlungen).
- Bücherkontrolle nur auf editierbare Zahlungsvorgänge anwenden
Von Martin Helmling vor mehr als 8 Jahren aktualisiert
- Zugewiesen an wurde auf Martin Helmling gesetzt
- % erledigt wurde von 0 zu 70 geändert
Von Martin Helmling vor mehr als 8 Jahren aktualisiert
- Abgabedatum wurde auf 01.06.2016 gesetzt
- % erledigt wurde von 70 zu 100 geändert
Von Jan Büren vor fast 6 Jahren aktualisiert
- Status wurde von Erledigt zu Feedback geändert
Zwei Anmerkungen zu dem Commit:
if ($form->date_closed($form->{"datepaid_$i"}) && !$form->date_closed($form->{"gldate_$i"}, \%myconfig));
Beim ersten date_closed wird nicht %myconfig übergeben. Das scheint auch in der Form.pm keinen Unterschied zu machen, der Parameter wird angenommen, aber in der Routine nicht weiter verarbeitet.
Das kritischer Problem ist, wenn ein alter gldate Eintrag noch in einer nicht abgeschlossenen Periode ist.
Dann erhält man, bspw.:
Bücher geschloßen zum 30.11.2018
Eine (alte) Zahlung am 10.12.2018 mit gldate 12.12.2018 gebucht
Eine neue Zahlung am 19.12. wirft dann einen Fehler weil:
Zahldatum 10.12. mit Buchungsdatum:
if (SELECT 1 FROM defaults WHERE '10.12.2018' < '30.11.2018') && not (SELECT 1 FROM defaults WHERE '07.12.2018' < '30.11.2018') )
Odyn löst das Problem indem es in der HTML-Maske noch einen Eintrag für olddatepaid setzt (s.a. 8ef8b247).
Das wäre auch meine erster Lösungsansatz, lieber wäre es mir, dass die acc_trans_id "zusätzlich" nicht gelöscht werden, d.h. es wird nur das verbucht, was auch wirklich vom Benutzer neu eingegeben worden ist.