Siguiendo con esta parte del Modulo Cartera de Clientes 4, llega una parte muy emocionante, ya que podemos ingresar los pagos de los clientes.
Colabora y Suscribete a mi canal de 
En la lección anterior listamos todas las facturas en mora del cliente seleccionado, ahora al seleccionar un cliente y darle clic al botón Ingresar Pago se guardara el pago y se actualizara el saldo del cliente.
Calcular el Total Saldo
Primero creamos el procedimiento que nos mostrara el saldo actual del cliente y se hace de la siguiente manera:
Sub Sumas_Totales()
Dim SaldoTotal, TotalAbonos, TotalDescuentos, TotalAPagar, SaldoFinal As Currency
For Fila = 1 To msGrid.Rows - 1
SaldoTotal = SaldoTotal + CCur(msGrid.TextMatrix(Fila, 6))
TotalAbonos = TotalAbonos + CCur(msGrid.TextMatrix(Fila, 7))
TotalDescuentos = TotalDescuentos + CCur(msGrid.TextMatrix(Fila, 8))
Next Fila
TotalAPagar = TotalAbonos - TotalDescuentos
SaldoFinal = SaldoTotal - TotalAPagar
txtSaldoActual = Format(SaldoTotal, "currency")
txtSubtotalPago = Format(TotalAbonos, "currency")
txtDescuento = Format(TotalDescuentos, "currency")
txtTotalaPagar = Format(TotalAPagar, "currency")
txtSaldoFinal = Format(SaldoFinal, "currency")
End Sub
En este procedimiento Sumamos columnas de las que tenemos en el grid (Columna Saldo, Columna Valor Factura, Columna Descuentos)
Esto valores los mostramos en cada uno de los campos correspondientes.
Luego ese procedimiento se agrega al Lista de Facturas
Sub Listado_Facturas()
Dim Sql As String
Dim Filtro As String
Dim Columnas As Integer
Tipo = cmbTipo.ListIndex
Filtro = ""
Select Case Tipo
Case 0: 'sin pagar
Filtro = " and SaldoFactura > 0 "
Case 1: 'facturas pagas
Filtro = " and SaldoFactura = 0 "
Case 2: 'vencidas
Filtro = " and now > DateAdd('d',Dias,FechaHora) and SaldoFactura > 0 "
End Select
Sql = "Select Num_Factura, FechaHora, Dias, DateAdd('d', Dias, FechaHora) AS Fechav, TotalFactura, SaldoFactura, '0' as abono, '0' as descuento From tblVentas Where EstadoFact = 1 and IdCliente = " & txtCodigoCli & Filtro
Columnas = 8
Call LlenarGrid(msGrid, Sql, Columnas)
msGrid.ColWidth(0) = 0
msGrid.ColWidth(1) = 1300
msGrid.ColWidth(2) = 1600
msGrid.ColWidth(3) = 1100
msGrid.ColWidth(4) = 1400
msGrid.ColWidth(5) = 1800
msGrid.ColWidth(6) = 1800
msGrid.ColWidth(7) = 1800
msGrid.TextMatrix(0, 1) = "No. Factura"
msGrid.TextMatrix(0, 2) = "Fecha"
msGrid.TextMatrix(0, 3) = "Dias"
msGrid.TextMatrix(0, 4) = "Fecha V."
msGrid.TextMatrix(0, 5) = "Valor Factura"
msGrid.TextMatrix(0, 6) = "Saldo"
msGrid.TextMatrix(0, 7) = "Abono"
msGrid.TextMatrix(0, 8) = "Descuento"
For I = 1 To msGrid.Rows - 1
msGrid.Col = 1
msGrid.CellAlignment = flexAlignCenterCenter
msGrid.Col = 3
msGrid.CellAlignment = flexAlignCenterCenter
msGrid.TextMatrix(I, 5) = Format(msGrid.TextMatrix(I, 5), "currency")
msGrid.TextMatrix(I, 6) = Format(msGrid.TextMatrix(I, 6), "currency")
msGrid.TextMatrix(I, 7) = Format(msGrid.TextMatrix(I, 7), "currency")
msGrid.TextMatrix(I, 8) = Format(msGrid.TextMatrix(I, 8), "currency")
msGrid.TextMatrix(I, 2) = Format(msGrid.TextMatrix(I, 2), "dd/mm/yyyy")
msGrid.TextMatrix(I, 4) = Format(msGrid.TextMatrix(I, 4), "dd/mm/yyyy")
Next I
Call Sumas_Totales
End Sub
Ahora Construimos un frame para ingresar los pagos debe quedar de la siguiente manera:

El Iframe tiene el nombre de Name = frmPagoFactura y el la propiedad Caption = “Ingresar Pago Factura” que lo pueden ver en la imagen y la Propiedad Visible = False
Luego en el Botón Ingresar Pago que lo pueden ver en la Imagen va el siguiente código:
Private Sub cmdPagar_Click()
NumFactura = msGrid.TextMatrix(msGrid.Row, 1)
Saldo = msGrid.TextMatrix(msGrid.Row, 6)
txtNumFactura.Text = NumFactura
txtSaldoActualFact = Saldo
txtValorAbono.Text = 0
txtValorDescuento.Text = 0
txtSaldoFactura.Text = Format(Saldo, "currency")
cmbTipoPago.ListIndex = 0
msGrid.Enabled = False
frmPagoFactura.Visible = True
End Sub
El código anterior toma los datos de la factura y lo muestra en el frame que esta haciendo la labor de ventana de pagos, El frame se pone en visible y el grid se pone en Enabled = False para que no se vaya a mover la fila seleccionada.
Ahora viene la parte mas importante ingresar el pago:
Sub GuardarPagoCliente()
Dim RecordCliente As New ADODB.RecordSet
Dim RecordSaldoAc As New ADODB.RecordSet
Res = MsgBox("¿Esta seguro de guardar el pago?", vbYesNo, "Guardar Pago")
If Res <> vbYes Then
Exit Sub
End If
Num_Factura = txtNumFactura
Fecha = Date
ValorPago = CCur(txtValorAbono.Text)
SaldoFacturaA = CCur(txtSaldoActualFact.Text)
If ValorPago > SaldoFacturaA Then
MsgBox "El Pago no puede ser mayor al Saldo de la factura, verifique", vbExclamation, "Error"
Exit Sub
End If
TotalFactura = CCur(msGrid.TextMatrix(msGrid.Row, 5))
Descuento = txtValorDescuento
Id_FormaPago = cmbTipoPago.ListIndex
EstadoPago = "V"
FechaMod = Date & " " & Time
Sql = "Insert into tblPagos_Factura_Venta (Num_Factura, Fecha, ValorPago, Descuento, Id_FormaPago, EstadoPago, FechaMod) " _
& "Values (" & Num_Factura & ", '" & Fecha & "', '" & CCur(ValorPago) & "', '" & CCur(Descuento) & "', " & Id_FormaPago & ", '" & EstadoPago & "', '" & FechaMod & "') "
ConexionADO.Execute Sql
'Actualizamos el Saldo de la Factura
NuevoSaldo = CCur(TotalFactura) - ValorPago
'Se actualiza el saldo en la tabla
sqlSald = "Select SUM(ValorPago) as Saldo From tblPagos_Factura_Venta Where Num_Factura = " & Num_Factura & " and EstadoPago = 'V'"
Set RecordSaldoAc = ConexionADO.Execute(sqlSald)
SaldoFacturaSel = 0
If RecordSaldoAc.RecordCount > 0 Then
SaldoFacturaSel = CCur(TotalFactura) - RecordSaldoAc("Saldo")
End If
sqlUp = "Update tblVentas SET SaldoFactura = " & SaldoFacturaSel & " Where Num_Factura = " & Num_Factura
ConexionADO.Execute sqlUp
'Se actualiza el saldo de la factura en el grid
msGrid.TextMatrix(msGrid.Row, 6) = Format(NuevoSaldo, "currency")
For Fila = 1 To msGrid.Rows - 1
SaldoTotal = SaldoTotal + CCur(msGrid.TextMatrix(Fila, 6))
Next Fila
SaldoTotalCli = SaldoTotal
'Registramos el Saldo Total en la Tabla Saldos
IdCliente = txtCodigoCli.Text
consulta = "Select IdCliente from tblSaldos_Clientes Where IdCliente = " & IdCliente
Set RecordCliente = ConexionADO.Execute(consulta)
If RecordCliente.RecordCount = 0 Then
sqlSaldo = "Insert into tblSaldos_Clientes (IdCliente, Saldo, FechaMod) Values (" & IdCliente & ", '" & SaldoTotalCli & "', now()) "
Else
sqlSaldo = "Update tblSaldos_Clientes SET Saldo = '" & SaldoTotalCli & "', FechaMod = Now() Where IdCliente = " & IdCliente
End If
ConexionADO.Execute sqlSaldo
MsgBox "Pago Guardado", vbInformation, "Guardar"
Call Listado_Facturas
Call Sumas_Totales
End Sub
El código va comentado para que lo puedan entender mejor este procedimiento lo llamamos desde el boton guardar del Frame.
Private Sub cmdGuardarPago_Click()
Call GuardarPagoCliente
frmPagoFactura.Visible = False
msGrid.Enabled = True
End Sub
Ahora el botón Cancelar del Frame debe ir esto:
Private Sub cmdCancelar_Click()
frmPagoFactura.Visible = False
msGrid.Enabled = True
End Sub
Ahora hay que crear un procedimiento que me permita ver el saldo de la factura a medida que escribo el valor del pago, o del descuento seria de la siguiente manera:
Sub SaldoPagoFactura()
If txtValorAbono.Text = "" Then
Exit Sub
End If
If txtValorDescuento.Text = "" Then
Exit Sub
End If
AbonoPago = CCur(txtValorAbono.Text)
Descuento = CCur(txtValorDescuento.Text)
If CCur(AbonoPago) > 0 And CCur(AbonoPago) <= CCur(txtSaldoActualFact) Then
SaldoFact = CCur(txtSaldoActualFact) - CCur(AbonoPago) - CCur(Descuento)
txtSaldoFactura.Text = Format(SaldoFact, "currency")
End If
End Sub
Este procedimiento lo colocamos en el evento KeyUp de ValorAbono y de Descuento:
Private Sub txtValorAbono_KeyUp(KeyCode As Integer, Shift As Integer)
Call SaldoPagoFactura
End Sub
Private Sub txtValorDescuento_KeyUp(KeyCode As Integer, Shift As Integer) Call SaldoPagoFactura End Sub
Les voy a dejar el formulario (Si el formulario de pagos como esta actualmente) en un enlace acortado este medio lo uso para obtener algunos ingresos asi que tengas paciencia para descargar el formulario solo deben esperar el conteo, les dejo varias opciones de descarga.
Descargar Formulario Link
No olviden Compartir y Seguir el canal pronto subir los vídeos faltantes.
Puedes el listado de las lecciones del curso en Curso de Creación de Software de Ventas en Visual Basic 6
No te olvides de Compartir

