Auch in der aktuellen Version 9.0.2297 des Sage 100 xRM besteht weiterhin ein kleiner jedoch folgenschwerer Bug, der die Erstellung eines Stapels für die vorbeugende Wartung ohne Meldung scheitern lässt. Dies gilt für Objekte mit verbrauchszählerabhängigen Wartungsmodaliäten.
Ursächlich für den Fehler ist, dass der Defaultwert „True“ des Parameter bForwardOnlyReadOnly
bei der Initialisierung des GenericRecordsets einen wahlfreien Zugriff ausschließt. Nach dem Auslesen des aktuellen Zählerstandes und des Datums mit rs.MoveLast
der Sprung zum letzten Zählerstand erfolgt, um das Delta zwischen beiden Zählerständen zu ermitteln. Ein so initialisiertes Recordset unterstützt jedoch nur einen sequentiellen vorwärtsgerichteten Zugriff. Der Fehler wird nicht behandelt, sondern unterdrückt, führt jedoch zum Abbruch des Programmflusses.


Lösung
Wenngleich der Bug ein echter Showstopper ist und die Nutzung der vorbeugenden Wartung bei Objekten mit individuellen Verbrauchszählern unmöglich macht, fällt die Lösung denkbar leicht. Bezogen auf die Version 9.0.2297 des Sage 100 xRM ist im Klassenmodul BSCrmObjektStapel
in der Prozedur mEvalZaehlerVerbrauch
die Zeile 1513
Set rs = goSys.oData.OpenGenericRecordset(sQry)
durch
Set rs = goSys.oData.OpenGenericRecordset(sQry, False)
zu ersetzen.

Das Bugfix in vorausgehenden Versionen erfolgt analog, die Zeilennummer kann jedoch abweichen.
Wie kann ein Bug über so viele Versionen bestehen?
Gemäß meiner Analyse besteht der Bug in der vorbeugenden Wartung bereits seit der Version 8.0 des Sage xRM und geht auf die Umstellung der Datenbankzugriffe aufgrund von Änderungen in der Microsoft Access Runtime zurück. Das legt nahe, dass auch die Version 7.0 betroffen ist, jedoch kann ich es aufgrund einer fehlenden Testumgebung derzeit nicht nachprüfen.
Zweifelsohne ist vorbeugende Wartung ist eine nützliche und mächtige Funktion, die jedoch von nur wenigen AnwenderInnen des xRM genutzt wird. Die Nutzung in Verbindung mit einem individuellen Verbrauchszählern scheint in der Praxis nicht anzutreffen sein, sonst hätte bei einem so gravierender Bug längst auffallen müssen.
Offen bleibt für mich die Frage, ob zu der Funktion ein Informations- und Schulungsdefizit besteht oder aber in Sage 100 Projekten die Abbildung von geplanten Wartungen aufgrund eines ermittelten oder prognostizierten Verbrauchs keine Anforderung ist. Ich würde mich über ein Meinungsbild freuen!