Daten visuell erfassen in 1:n- und 1:1- Beziehungen
Das Feld txtRestbetrag
Etwas komplizierter sieht es bei der Berechnung des Feldes txtRestbetrag aus. Hier müssen Sie wieder die Auftragsart berücksichtigen. Bei einer Rechnung ziehen Sie einfach den Zahlbetrag vom Auftragswert ab. Bei einer Gutschrift geht das nicht, weil hier ein negativer Wert gebucht wurde, da es ja ein Zahlungsausgang ist. Daher müssen Sie hier den Zahlbetrag wieder mit -1 multiplizieren, bevor Sie ihn vom Auftragswert abziehen. Um das zu berücksichtigen, verwenden Sie hier zwei ineinander geschachtelte Wenn-Funktionen. In der ersten prüfen Sie, ob der Auftragstyp eine Rechnung (=1) ist. Falls ja, berechnen Sie die Differenz. Falls nicht, folgt im Else-Zweig der Funktion die zweite Wenn- Funktion. Sie prüft, ob der Auftragstyp eine Gutschrift ist. Ist das der Fall, wird die Differenz für die Gutschrift berechnet. Ist der Auftrag weder eine Rechnung noch eine Gutschrift, sorgt der Else-Zweig der inneren Wenn-Funktion dafür, dass beispielsweise bei Lieferscheinen eine 0 als Restbetrag ausgegeben wird.
Nun haben Sie die Grundlagen dafür geschaffen, die widersprüchlichen Angaben zu finden und gegebenenfalls zu korrigieren. Fehler, die zu korrigieren sind, liegen dann vor,
-
wenn der Restbetrag 0 ist, der Status aber nicht auf abgeschlossen oder bezahlt steht,
-
wenn der Restbetrag ungleich 0 ist, der Status jedoch auf abgeschlossen oder bezahlt gesetzt ist.
Um die Korrekturen durchführen zu können, wenn der Benutzer den Datensatz zum aktiven Datensatz macht, erstellen Sie eine Ereignisprozedur für das Ereignis OnCurrent des Formulars (Beim Anzeigen). Dort prüfen Sie dann den aktuellen Status und vergleichen ihn mit dem Wert des Feldes txtRestbetrag, um gegebenenfalls Fehler zu finden (Listing 3).
Private Sub Form_Current()
'Prüfen, ob Daten korrekt sind
If (Me.txtRestbetrag.Value > 0) And ((Me.Status.Value = 1) Or (Me.Status.Value
= 4)) Then
If Me.Status.Value = 4 Then 'Ware geliefert aber nicht bezahlt
'Status auf "geliefert" setzen
Me.Status.Value = 2
ElseIf Me.Status.Value = 1 Then 'Ware nicht bezahlt und nicht geliefert
'Status auf "offen" setzen
Me.Status.Value = 3
End If
ElseIf ((Me.txtRestbetrag.Value = 0) And ((Me.Auftragsart.Value = 1) Or _
(Me.Auftragsart.Value = 2))) And ((Me.Status.Value = 2) Or (Me.Status.Value
= 3)) Then
If Me.Status.Value = 2 Then
'Wenn Auftrag bezahlt und geliefert Status auf "abgeschlossen" setzen
Me.Status.Value = 4
ElseIf Me.Status.Value = 3 Then
'Wenn Auftrag "offen" aber bezahlt, dann Status auf "bezahlt" setzen
Me.Status.Value = 1
End If
End If
End Sub
Wichtig ist dabei, dass Sie darauf achten, beim Restbetrag 0 nur dann eine Korrektur vorzunehmen, wenn es sich um eine Rechnung oder eine Gutschrift handelt, weil ja auch bei einem Lieferschein der Restbetrag 0 ist.