Access, casillas de verificación y valor asociado

En un formulario Access tengo varias casillas de verificación para matricularse de varios temas de un curso. Cada tema tiene un valor diferente (0,00€). No sé mucho de programación pero creo que se debe poder sumar en un cuadro de texto el valor de la matrícula en función de las casillas de verificación marcadas, ¿no?

2 respuestas

Respuesta
1

Efectivamente se puede hacer lo que preguntas, pero sin saber cómo tienes montada tu BD, sólo te puedo dar unas indicaciones, a ver si logras adaptarlo.

Esto es lo que hice hace unos años para una escuela de música, en la que al marcar en un formulario la casilla de matrícula (40 €), la de curso completo (120 €) o la de una o más de las 6 asignaturas colectivas (a 60 € cada una), se calculaba el total de la matrícula para imprimir el recibo.

Tablas:

1º/ Alumnos: donde tendrás los datos que sean de los alumnos, con un campo Clave principal.

2º/ Matriculas: con un ID (principal), el Código del alumno (Clave principal de la tabla alumnos), campo fecha, para recoger la fecha de matricula, y tantos campos de tipo Sí/No como asignaturas (en tu caso temas) tengas.

3º/ Tarifas: con esta estructura: ID (clave principal), Concepto (texto) e Importe (moneda).

En esta tabla tendrías tus distintos temas con sus precios. Podrías añadir otro campo Curso, para saber los temas que corresponden a cada curso...

Formularios:

1º/ Un formulario basado en la tabla Matrículas, en el que aparecerán los checkbox para seleccionar uno u otro concepto (temas, en tu caso).

Ahora, a cada checkbox, le generas este código es su evento "Después de actualizar" (en vista diseño del formulario, sacas las propiedades del check->pestaña Eventos->Despues de actualizar->pulsas el botón de los 3 puntos->eliges generador de código)

Private Sub ..._AfterUpdate
Call subCalculaImporte
End Sub

en vez de los ... tendrás el nombre de tu check, por ejemplo Private Sub Tema01_AfterUpdate. Este código a cada uno de los checks.

Para acabar, añades este otro código, al inicio o al final del módulo del formulario ( en el que programaste los eventos de los checks):

Private Sub subCalculaImporte
Me.txtImporte = fncMatricula(Me.Tema01, Me.Tema02, Me.Tema03, Me.Tema04, Me.Tema05, Me.Tema06, Me.Tema07, Me.Tema08, Me.Tema09, Me.Tema10)
End Sub

Este código está pensado para 10 checks llamados Tema01, Tema02..., puedes añadir más o quitar alguno según tus necesidades, teniendo en cuenta que tienes que poner los nombre que tú tengas en tu formulario.

Además, el cuadro de texto en el que se muestra el resultado se llamaría txtImporte.

Módulo:

En tu BD, insertas un módulo (lo llamaré mdlMatricula), y en él escribes esta función:

Public Function fncMatricula(ParamArray Temas()) As Currency
'Función creada por Sveinbjorn para tologo en TodoExpertos - 2014-11-07
'Declaramos las varables
Dim vImporte As Currency ' Para el precio de cada tema
Dim vMatricula As Currency ' Para ir acumulando el importe de la matricula
vMatricula = 0
For i = 0 To UBound(Temas)
    'Buscamos el importe de la tasa de cada tema
    vImporte = DLookup("Importe", "Tarifas", "[ID]=" & i + 1)
    'Acumulamos el importe
    vMatricula = vMatricula + Abs(vImporte * CInt(Nz(Temas(i), 0)))
Next i
fncMatricula = vMatricula
End Function

Te subo un mini ejemplo, para que lo veas más claro: http://filebig.net/files/gNvmMZcAkT 

¡Gracias! 

El ejemplo que envías es exactamente lo que quería hacer. Me pongo a trastear con mi BD y te digo. El problema que he encontrado es que mis temas no están numerados como me muestras, sino que están nombrados con su definición. Así que me va a tocar renombrar unas cuantas cosas para que funcione. En todo caso mil gracias y te cuento en breve cómo me ha ido!

No te pongas a renombrar todos tus temas! Basta con que en el código de subCalculaImporte, en vez de Tema01, Tema02... pongas los nombres que tu tienes.

Lo más importante es que la tabla Tarifas ( o como la llamases), tenga una estructura similar para que funcione.

Es lo que tiene no controlar la programación... He comprendido cómo funciona "DLookup" cuando ya había renombrado, pero no han sido muchos...

El caso es que está solucionado! Ya consigo hacer los cálculos con las casillas de verificación!

Peeeeeero, no me suma los decimales! el cálculo redondea los céntimos de las tarifas. He probado en tu ejemplo y funciona con decimales, así que estoy buscando que configuración tengo que arreglar. En la tabla de tarifas está como la tuya... Se te ocurre dónde está el fallo??

Respuesta

Puedes crearte un campo calculado, poniendo el cálculo en función si esta seleccionado o no, otra opción es crearte una función que calcule el importe y la llamas cada vez que se, arqueo desmarque una opción, mira este link con info de campo calculado

https://support.office.com/es-es/article/crear-un-control-calculado-08e19416-0026-4d78-8bea-f6b8ff9570a7 

La pregunta no admite más respuestas

Más respuestas relacionadas