En principio sería conveniente saber como trabajas, ya que puedes hacerlo de muchas formas. Por ejemplo, tengo un formulario Entregas donde me aparecen las facturas que me debe ese cliente
Vamos a suponer que me entrega 500 euros. Lo anoto en el cuadro de texto Entrega
Cuando pulso Compensar
Me dice, que la primera factura está compensada y por tanto la marca como Cancelada. La segunda también( había dinero suficiente) y por lo mismo me la marca. En la tercera, como ya no llegaba el dinero, me señala que de la tercera factura quedan pendiente por compensar 208,75 euros, por eso no la marca y que sumados a los 162 de la última me dice que su deuda pendiente conmigo es de 370,75
Unos días después viene a traerme más dinero( cuídalo que de esos clientes hay pocos). Cuando abro el formulario con ese cliente, las canceladas ya no me aparecen. Anto lo que me entrega
Al pulsar Compensar me queda como
Es decir, la primera está cancelada pero de la última quedan 70,75 euros que me debe. Y me va guardando todo en las tablas por si dijera que me había pagado todo.
El código del botón Compensar es
Private Sub Compensar_Click()
DoCmd.SetWarnings False
DeudaPendiente = DeudaPendiente - Entrega
DoCmd.RunSQL "insert into entregas(idcliente,fechaentrega,entrega)values(idcliente,date(),entrega)"
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
Resto = DSum("entrega", "entregas", "idcliente=" & Me.IdCliente & "") - DSum("totalventa", "ventas", "idventa<=" & Me.IdVenta & " and idcliente=" & Me.IdCliente & "")
If Resto >= 0 Then
Cancelada = True
DoCmd.GoToRecord , , acNext
ElseIf Resto < 0 Then
Exit Sub
End If
Next
End Sub
Pero como te decía puedes hacerlo de muchas formas.