Ich habe einen Button in einer Maske, darüber hole ich mir über Ansichten Zahlen aus Dokumenten und summiere diese.
So weit so gut. Am Schluss wird die eine Summe von der anderen abgezogen. Und hier kommt dann ein Ergebnis raus, das nicht stimmt. Ich kann mir das nicht erklären.
Vielleicht hat jemand eine Idee, wie das zustande kommt.
Damit der Text nicht zu lange wird, hier nur die wichtigen Sachen aus dem Code:
.........
Dim k As Double
Dim o As Double
.........
Set uidoc = uiws.CurrentDocument
.........
'**********************Kontostand zum Stichtag
Set view = db.GetView("calc.ktostand")
Set doc = view.GetFirstDocument
sum = 0
z = 0 'Ich will das letzte Dokumentvor dem Stichtag, die Schleife muss daher abbrechen, wenn das erste gefunden wurde
While z = 0
If doc.GetItemValue("buchungstag")(0) <= Cdat(uidoc.FieldGetText("stichtag")) Then 'Der Stichtag wird in einem Feld im Dokument angegeben
sum = sum + doc.GetItemValue("betrag")(0)
z = 1
End If
Set doc = view.GetNextDocument(doc)
Wend
Call uidoc.FieldSetText("kontostand",Cstr(sum))
k = sum
.........
'*********** Summe der Offenen zum Stichtag
Set view = db.GetView("calc.ga.divi.buchdat")
Set doc = view.GetFirstDocument
sum = 0
While Not doc Is Nothing
'*****************Offen vor Stichtag = Ausbuchungsdatum ist nach dem Stichtag o. ist immer noch offen
If doc.GetItemValue("buchungstag")(0) <= Cdat(uidoc.FieldGetText("stichtag")) And doc.GetItemValue("ausbuchungsdatum")(0) > Cdat(uidoc.FieldGetText("stichtag")) Then
sum = sum + doc.GetItemValue("betrag")(0)
Elseif doc.GetItemValue("buchungstag")(0) <= Cdat(uidoc.FieldGetText("stichtag")) And doc.GetItemValue("ausbuchungsdatum")(0) = "" Then
sum = sum + doc.GetItemValue("betrag")(0)
End If
Set doc = view.GetNextDocument(doc)
Wend
Call uidoc.FieldSetText("offen",Cstr(sum))
o = sum
.....................
'************Differenz zwischen Kontostand und offenen Posten
d = k - o
Call uidoc.FieldSetText("diff",Cstr(d))
........
Alles anzeigen
Jetzt zu meinem Problem:
Im Beispiel habe ich einen Kontostand von 3102,9 und offene Posten von 3102,9 - Die Differenz wäre als 0
- Das Feld zeigt mir aber erstmal - im nicht gespeicherten Dokument die Zahl 1,81898940354586E-12 an.
- Wenn ich das Dokument speichere o. mit F9 aktualisiere, dann wechselt die Zahl auf 0,000000000001819
Warum ändert sich die Zahl nach F9 ?
Vor allem: warum weist die Berechnung einen Unterschied aus, statt 0 auszugeben?
Die Beträge, die summiert werden, haben alle maximal 2 Nachkommastellen.
Der Fehler lässt sich im Übrigen beheben, indem ich die Round-Funktion einsetze:
Call uidoc.FieldSetText("diff",Cstr(Round(d,2)))
Aber ich hätte zu gerne eine Erklärung für das Ergebnis aus der Berechnung.
Gruss
Lizzy