Curso de Software de Ventas Pt 45 Modulo Cartera de Clientes 4

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 

Total Page Visits: 2960 - Today Page Visits: 2

Deja una respuesta