Macro que suma una cantidad de una columna hasta cuadre des fragmentando

Tengo anticipos de pagos y tengo mis facturas quiero que tome el primer pago y sume desde la primera factura y luego la segunda y así hasta que cuadre con el pago en cual si se pasa des fragmente este ultimo para cuadrar la cantidad y lo que reste lo deje para el segundo pago

Respuesta

Hugo, por si te puede dar una idea. Pero es en Access. Si tengo un formulario donde voy vendiendo a los clientes

Puedes ver que hay cuatro facturas de ventas, 3 a un cliente y una a otro. Como vender es fácil, lo verdaderamente difícil es cobrar, tengo un formulario Entregas, por si algún día, ojalá, a un cliente le dé el arrebato de darme algo de dinero. Hay que cuidarlo porque de esos no hay muchos. Abro el formulario Entregas y busco ese cliente.

Me dice que me debe 555,10 euros y como te decía, en un memento de debilidad decide darme 300. Lo escribo en Entrega y pulso el botón Compensar. En ese momento

Me dice que aún me debe 255,10, que ha cancelado la primera factura, que de esos 300 le han sobrado 182 y que con esos ha compensado parte de la segunda pero que aún le quedan 22 euros( amén de los 233,1)

Pasan unos días y a ese cliente le da por traerme más dinero ( ya te dije que hay que cuidarlo que de esos hay pocos). Abro el formulario Entregas, localizo ese cliente y ya no me aparecen las facturas canceladas

Anoto lo que me da, en este caso 100 euros y pulso el botón de compensar y me lo deja como

Es decir, compenso lo que quedaba pendiente y como le sobraron 78 euros los descontó de la tercera y ahora sólo me debe 155, 10, que quizá algún día lo cobre. Y si en el ínterin le has ido vendiendo va añadiendo las nuevas facturas al formulario.

En este caso, repito, en este caso el código del botón 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

Como te decía es por si te puede dar una idea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas