En esta lección del Modulo Cartera de Clientes se creara el formulario de listado de pagos.
Colabora y Suscribete a mi canal de
El formulario de listado de pagos permite ver los pagos de una factura o de todas las facturas de un cliente determinado.
El formulario se llama frmPagosClientes y se ve de la siguiente manera.
Lo primero que se programa es el evento load del formulario y se ve de la siguiente manera:
Private Sub Form_Load() cmbMeses.ListIndex = 0 txtAnio.Text = Format(Date, "yyyy") Num_Factura_Sel = frmFacturasCliente.msGrid.TextMatrix(frmFacturasCliente.msGrid.Row, 1) If Num_Factura_Sel = "" Then Num_Factura_Sel = 0 End If Call Listado_PagosCliente End Sub
Lo siguiente es el Listado_PagosCliente
Sub Listado_PagosCliente() Dim Sql As String Dim Filtro As String Dim Columnas As Integer Anio = txtAnio.Text Mes = cmbMeses.ListIndex If cmbMeses.ListIndex > 0 Then Filtro = " Month(Fecha) = " & Mes & " and Year(Fecha) = " & Anio Else Filtro = " Year(Fecha) = " & Anio End If If chkFacturaActual.Value = 1 Then Filtro = Filtro & " and Num_Factura = " & Num_Factura_Sel End If Sql = "Select IdSaldoFactVen, Num_Rec_Pago, Fecha, Num_Factura, ValorPago, Id_FormaPago, EstadoPago From tblPagos_Factura_Venta Where " & Filtro Columnas = 7 Call LlenarGrid(msGrid, Sql, Columnas) msGrid.ColWidth(0) = 0 msGrid.ColWidth(1) = 0 msGrid.ColWidth(2) = 1000 msGrid.ColWidth(3) = 1400 msGrid.ColWidth(4) = 1200 msGrid.ColWidth(5) = 1400 msGrid.ColWidth(6) = 1400 msGrid.ColWidth(7) = 1400 msGrid.TextMatrix(0, 2) = "No. Rec" msGrid.TextMatrix(0, 3) = "Fecha" msGrid.TextMatrix(0, 4) = "No. Fact" msGrid.TextMatrix(0, 5) = "Valor" msGrid.TextMatrix(0, 6) = "Tipo" msGrid.TextMatrix(0, 7) = "Estado" For I = 1 To msGrid.Rows - 1 msGrid.Row = I msGrid.Col = 1 msGrid.CellAlignment = flexAlignCenterCenter msGrid.Col = 4 msGrid.CellAlignment = flexAlignCenterCenter msGrid.TextMatrix(I, 3) = Format(msGrid.TextMatrix(I, 3), "dd/mm/yyyy") msGrid.TextMatrix(I, 5) = Format(msGrid.TextMatrix(I, 5), "currency") If msGrid.TextMatrix(I, 6) = 0 Then msGrid.TextMatrix(I, 6) = "Efectivo" Else msGrid.TextMatrix(I, 6) = "Tarjeta" End If If msGrid.TextMatrix(I, 7) = "V" Then msGrid.TextMatrix(I, 7) = "Valida" Else msGrid.Col = 7 msGrid.Row = I msGrid.TextMatrix(I, 7) = "Anulada" msGrid.CellBackColor = &HC0& 'color de fondo msGrid.CellForeColor = &H80000005 'color de la letra End If Next I End Sub
El botón buscar Pagos llama al listado de pagos:
Private Sub cmdBuscarPagos_Click() Call Listado_PagosCliente End Sub
El Botón Salir:
Private Sub cmdSalir_Click() Unload Me End Sub
Botón Anular pago:
Private Sub cmdAnular_Click() Call AnularPago End Sub
Y este boton llama a un procedimiento AnularPago que es el siguiente:
Sub AnularPago() Res = MsgBox("¿Esta seguro de anular el pago?", vbYesNo, "Anular Pago") If Res = vbYes Then Id_Pago = msGrid.TextMatrix(msGrid.Row, 1) Num_Factura = msGrid.TextMatrix(msGrid.Row, 4) If Id_Pago <> "" Then Sql = "Update tblPagos_Factura_Venta SET EstadoPago = 'A' Where IdSaldoFactVen = " & Id_Pago ConexionADO.Execute Sql Call CalcularSaldoFactura(Num_Factura) Call Listado_PagosCliente End If End If End Sub
Nos faltaría una variable a nivel de formulario que es la primera linea en la parte superior:
Dim Num_Factura_Sel
Que es la que guarda el numero de la factura actual.
Como se van a estar anulando y creando pagos cree un procedimiento que se puede llamar desde cualquier lugar del proyecto por eso lo coloque en el Modulo md_Consultas que se encarga de actualizar el saldo de la factura de venta y el saldo en la tabla Saldos Clientes, entonces cada ves que se haga un cambio se llama a esta función para ahorrar código.
Sub CalcularSaldoFactura(Num_Factura) Dim RecordSaldoAct As New ADODB.RecordSet Dim RecordFactura As New ADODB.RecordSet Dim RecordFacturas As New ADODB.RecordSet 'Sumas los pagos actuales de la factura Sql = "Select TotalFactura, IdCliente From tblVentas Where Num_Factura = " & Num_Factura & " and EstadoFact = 1" Set RecordFactura = ConexionADO.Execute(Sql) TotalFactura = 0 IdCliente = 0 If RecordFactura.RecordCount > 0 Then TotalFactura = RecordFactura("TotalFactura") IdCliente = RecordFactura("IdCliente") Else MsgBox "No se pudo calcular el saldo total la factura no existe", vbCritical, "Error" Exit Sub End If 'Sumas los pagos actuales de la factura 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 If IsNull(RecordSaldoAc("Saldo")) = False Then SaldoFacturaSel = CCur(TotalFactura) - RecordSaldoAc("Saldo") Else SaldoFacturaSel = CCur(TotalFactura) End If End If sqlUp = "Update tblVentas SET SaldoFactura = " & SaldoFacturaSel & " Where Num_Factura = " & Num_Factura ConexionADO.Execute sqlUp 'TotalSaldoCliente Sql = "Select Sum(SaldoFactura) as Saldo From tblVentas Where SaldoFactura > 0 and IdCliente = " & IdCliente & " and EstadoFact = 1 " Set RecordFacturas = ConexionADO.Execute(Sql) SaldoTotal = 0 If RecordFacturas.RecordCount > 0 Then SaldoTotal = RecordFacturas("Saldo") End If Sql = "Update tblSaldos_Clientes SET Saldo = " & SaldoTotal & ", FechaMod = now() Where IdCliente = " & IdCliente ConexionADO.Execute Sql End Sub
Solo falta abrir el formulario desde el botón Ver Pagos de la ventana de Facturas cliente:
Private Sub cmdVerPagos_Click() frmPagosClientes.Show End Sub
Algo que falto en el vídeo es registrar el saldo en la tabla Saldos_cliente cuando se guarda la factura de Venta a Crédito para eso debe modificar el procedimiento Finalizar_Guardado_Factura en frmVentas (Cambio Nuevo)
Sub Finalizar_Guardado_Factura() Num_Factura = Ultima_Factura_Venta() 'Ultima venta FechaHora = txtFechaApro.Text & " " & Time 'fecha y hora Comentario = "-" If txtObervacionesPro.Text <> "" Then 'comentario Comentario = txtObervacionesPro.Text End If 'calcular saldo SaldoFactura = 0 If cmdTipoFact.ListIndex = 1 Then If CCur(txtAbonoFact.Text) > 0 Then SaldoFactura = CCur(txtTotalFactura) - CCur(txtAbonoFact.Text) Else SaldoFactura = CCur(txtTotalFactura) End If End If 'Se guarda en la tabla ventas sql = "Insert Into tblVentas (Num_Factura, FechaHora, TipoFact, Dias, ImpuestoTotal, TotalFactura, EstadoFact, Comentario, Efectivo, Cambio, IdCliente, IdUsuario, SaldoFactura) " _ & " VALUES (" & Num_Factura & ",'" & FechaHora & "'," & Me.cmdTipoFact.ListIndex & "," & txtDias.Text & ",'" & CCur(txtImpuestoFact) & "','" & CCur(txtTotalFactura) & "',1,'" & Comentario & "','" & CCur(txtVECambio.Text) & "','" & CCur(txtCambio.Text) & "'," & CodigoCliente & "," & Glo_IdUsuario & ", '" & SaldoFactura & "')" ConexionADO.Execute sql 'A los productos del detalle se les asigna el numero de factura sql = "Update tblDetalle_Venta set Num_Factura = '" & Num_Factura & "', Num_VentaTemp = '0' where Num_VentaTemp = " & ConsecutivoTemp ConexionADO.Execute sql '*************** Consulta que resta todos los articulos de inventario sql = "UPDATE tblProductos as ar INNER JOIN tblDetalle_Venta as d ON ar.IdProducto = d.IdProducto SET ar.ExistPro = (ar.ExistPro - d.Cantidad_dv) where d.Num_Factura = " & Num_Factura ConexionADO.Execute sql '/*//*********************** crear el historial de cada articulo en el kardex sql = "INSERT INTO tblKardex (Fecha, IdProducto, Detalle, D_C, Cantidad, Costo,Cant_Saldo) Select '" & FechaHora & "', dt.IdProducto, 'Venta de Mercancia según Fra. N° " & Num_Factura & " '," _ & Num_Factura & ", dt.Cantidad_dv * -1, dt.P_Costo_dv, (Select ExistPro from tblProductos where IdProducto = dt.IdProducto) from tblDetalle_Venta as dt Where dt.Num_Factura = " & Num_Factura ConexionADO.Execute sql 'Registramos el Saldo Total en la Tabla Saldos IdCliente = CodigoCliente consulta = "Select IdCliente, Saldo 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 & ", '" & SaldoFactura & "', now()) " Else 'Se toma el saldo guardado en la tabla y se le suma al saldo de la factura actual y se actualiza el saldo en la tabla Saldo = RecordCliente("Saldo") + SaldoFactura sqlSaldo = "Update tblSaldos_Clientes SET Saldo = '" & Saldo & "', FechaMod = Now() Where IdCliente = " & IdCliente End If ConexionADO.Execute sqlSaldo If chkImprimirSiNo.Value = 1 Then ' si el checkbox esta chuliado se imprime If glob_conf_ImpresoraTikets = 0 Then Call ImprimirFactura_carta(Num_Factura) Else Call ImprimirFactura_Ticket(Num_Factura) End If End If ConsecutivoTemp = UltimaVentaTemp Call LlenarGridProductos MsgBox "Venta Guardada", vbInformation, "Guardar" Call LimpiarVenta End Sub
En el vídeo explico en detalle todo el código anterior.
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