Pagos múltiples de cuotas de asociados mediante un importe grande pagado y conforme a un rango de fecha ingresado..Ms access 365

Mediante un botón "Pagar Cuotas" Necesito ir descontando las cuotas de los asociados del importe pagado e ir controlando el saldo del mismo hasta quedar en 0, teniendo en cuenta el mes de vencimiento de las cuotas comparando entre Fecha Inicial, Fecha Final y Código de Asociación que introduzco en el formulario de pagos, Obs. No dejo mi campo de cuotas en 0 en mi tabla de cuotas al pagar, agrego el monto pagado en un campo "Monto_pagado", además puede darse que el saldo del monto que queda sea menor a la cuota del ultimo registro.. Mi tabla: tbl_cuotas_clientes: Id_clientes, Id_asociacion, Importe_cuota, Fec_vcmto, Importe_pagado, Fecha_pago entre otros...

Respuesta

Para lograr este comportamiento en Microsoft Access 365, necesitará crear un formulario que permita al usuario ingresar la Fecha Inicial, Fecha Final y el Código de Asociación. Luego, al presionar el botón "Pagar Cuotas", se deben realizar los cálculos necesarios para descontar las cuotas de los asociados del importe pagado y controlar el saldo hasta que llegue a cero.

Aquí hay un esquema básico de cómo podría implementar esto:

  1. Formulario de Pagos: Cree un formulario en Access donde el usuario pueda ingresar la Fecha Inicial, Fecha Final y el Código de Asociación.

  2. Evento de Botón "Pagar Cuotas": Asigne un evento a este botón que se active cuando el usuario lo presione.

  3. Proceso de Pago: En el evento del botón, debe escribir un código VBA que realice los siguientes pasos:

    • Recupere el importe pagado ingresado por el usuario desde el formulario.
    • Consulta la tabla tbl_cuotas_clientes filtrando por el rango de fechas y el código de asociación proporcionados.
    • Ordene las cuotas por fecha de vencimiento para asegurarse de pagar las cuotas más antiguas primero.
    • Itere sobre las cuotas encontradas y va descontando el importe pagado hasta que se agote o hasta que el saldo del importe pagado sea cero.
    • Actualice los registros en la tabla tbl_cuotas_clientes con el importe pagado y la fecha de pago correspondiente.
    • Actualice el saldo del importe pagado en el formulario hasta que se agote el importe pagado.
    • Proporcione retroalimentación al usuario sobre el proceso de pago, como cuántas cuotas se pagaron, cuánto saldo queda, etc.
  4. Manejo de Casos Especiales: Debe tener en cuenta casos especiales, como el saldo del monto que queda siendo menor a la cuota del último registro. En este caso, podrías simplemente pagar la cuota restante y ajustar el importe pagado en ese registro.

  5. Validación y Manejo de Errores: Asegúrese de incluir validaciones adecuadas para evitar errores, como verificar que el importe pagado sea mayor que cero y que haya cuotas pendientes para el rango de fechas y el código de asociación proporcionados.

Este es un esquema básico y necesitará adaptarlo según las especificaciones exactas de su base de datos y los requisitos del negocio.

Código de ejemplo

Private Sub btnPagarCuotas_Click()
    Dim db As DAO.Database
    Dim rsCuotas As DAO.Recordset
    Dim strSQL As String
    Dim saldoRestante As Double
    Dim importePagado As Double
    Dim importeCuota As Double
    ' Obtener el importe pagado del formulario
    importePagado = CDbl(Me.txtImportePagado)
    ' Conectar a la base de datos
    Set db = CurrentDb
    ' Consultar las cuotas pendientes para el rango de fechas y el código de asociación proporcionados
    strSQL = "SELECT * FROM tbl_cuotas_clientes " & _
             "WHERE Fec_vcmto BETWEEN #" & Me.txtFechaInicial & "# AND #" & Me.txtFechaFinal & "# " & _
             "AND Id_asociacion = " & Me.txtCodigoAsociacion & " " & _
             "AND Importe_pagado < Importe_cuota " & _
             "ORDER BY Fec_vcmto"
    Set rsCuotas = db.OpenRecordset(strSQL)
    ' Iterar sobre las cuotas y realizar el pago
    Do While Not rsCuotas.EOF And importePagado > 0
        importeCuota = rsCuotas!Importe_cuota - rsCuotas!Importe_pagado
        ' Si el importe pagado es suficiente para cubrir la cuota completa
        If importePagado >= importeCuota Then
            rsCuotas.Edit
            rsCuotas!Importe_pagado = rsCuotas!Importe_cuota
            rsCuotas!Fecha_pago = Date
            rsCuotas.Update
            importePagado = importePagado - importeCuota
        Else
            ' Si el importe pagado es menor que la cuota completa
            rsCuotas.Edit
            rsCuotas!Importe_pagado = rsCuotas!Importe_pagado + importePagado
            rsCuotas!Fecha_pago = Date
            rsCuotas.Update
            importePagado = 0
        End If
        rsCuotas.MoveNext
    Loop
    rsCuotas.Close
    Set rsCuotas = Nothing
    Set db = Nothing
    ' Actualizar el saldo restante en el formulario
    Me.txtImportePagado = importePagado
End Sub

Este código asume que tiene un formulario con tres cuadros de texto: txtFechaInicial, txtFechaFinal, txtCodigoAsociacion, y un campo numérico txtImportePagado donde el usuario ingresa el importe que desea pagar. El botón btnPagarCuotas desencadena el proceso de pago.

1 respuesta más de otro experto

Respuesta

En base a lo expuesto, se asume que no hay creado un plan de pagos, se introducen los pagos en el momento de obtener el monto.

Para obtener el saldo en esas condiciones, el calculo se hace restando al importe inicial la suma del campo [Importe_pagado] filtrando por socio (y si se da el caso de pertenecer a mas de una sociedad, también se filtrará por sociedad).

Utilizando la función de dominio DLookup se podría parecer a esto (si la pagina lo permite):

Monto_inicial - Dlookup("Importe_pagado", "tbl_cuotas_clientes", "Id_clientes= " & Id_Cliente)

Para conocer si esta 'al corriente de los pagos' se calcula el numero de cuotas desde el inicio al momento actual (puede ser un pago quincenal mensual, trimestral ...) y conocido este se multiplica pore el importe consensuado de la cuota.

Una vez calculado el importe de las cuotas vencidas, se compara con el resultado del DLookup anterior y las posibles opciones son:

Si el resultado es inferior al calculo de las cuotas vencidas: es deudor

Si el resultado es igual al calculo de las cuotas vencidas: esta al día

Si el resultado es superior al calculo de las cuotas vencidas: tiene cuotas avanzadas

¡Gracias! Muy amable por haber respondido, ya otro master del grupo envío justito lo que necesitaba y en realidad las cuotas ya tengo todas grabadas en números con su fecha de vencimiento...muchísimas gracias...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas