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