En esta lección del Modulo Cartera de Clientes se creara el formulario de listado de pagos.
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.
No te olvides de Compartir
6 de septiembre de 2024 - La demanda de desarrolladores de software sigue en aumento,…
En un movimiento histórico, la Unión Europea ha aprobado la primera ley de inteligencia artificial…
¿Sigues trabajando con Visual Basic 6 y necesitas una forma eficiente de acceder a tus…
OpenAI revoluciona la interacción con IA: ChatGPT ahora interpreta imágenes En un avance significativo para la…
Bienvenido al Curso Básico de Visual Basic 6! Este curso está diseñado para llevarte a…
Introducción a la programación y Visual Basic 6.0 ¿Qué es la programación? La programación es…
Este sitio utiliza cookies desea activarlas
Deja un comentario