Formularios

Hola maestro, necesito ayuda. Soy medico y estoy intentando armar una base de datos para una servicio de medicina laboral (te imaginaras entonces que en access mmm soy bastante novato). La tabla que tiene las siguientes tablas: "Empleados" (con datos genéricos como Numero de legajo, nombre, dirección, teléfono, etc); "Accidentes" (donde constan Numero de legajo, fecha, tipo de lesión, y un campo SI/NO para saber si ese accidente genero o no baja laboral); "Enfermedades" (básicamente con los mismos campos de la tabla accidentes pero describiendo enfermedades comunes que no tienen que ver con lesiones o traumatismos del trabajo); y otra tabla que se llama "Ausentismo" (donde consigno Numero de legajo, fecha de la baja laboral, fecha del alta laboral, etc).
Lo que yo quiero es que al cargar un formulario con un determinado evento de Enfermedad o Accidente, en caso de que se clickee la casilla Si/No se abra una especie de subformulario o se desplieguen los campos a completar corrrespondientes a la tabla "ausentismo".
¿Se puede hacer?
Mil gracias

1 respuesta

Respuesta
1
Creo haber entendido bien tu consulta. Tengo un par de dudas que necesitaría clarificar antes de poderte dar una respuesta.
Aunque intuyo que tienes un formulario para poder rellenar las enfermedades y otro formulario para poder rellenar los accidentes, ¿me podrías confirmar si eso es así?
Por lógica entiendo que quieres que se muestre el formulario de absentismo cuando el check del campo Sí/No esté marcado. Si no está marcado no se tiene que mostrar. ¿Es esto correcto?
Mi otra duda es: ¿Con qué versión de Access trabajas?
Bueno. En cuanto reciba tus noticias intentaré darte una solución.
Efectivamente, cada tabla tendría su formulario. Pero quiero organizarlo de la siguiente manera: un ÚNICO formulario que tenga varias pestañas: Una para "Empleados", otra para "Accidentes", otra para "Enfermedades" y otra para "Ausentismo". En el pie del formulario estaría el nombre del empleado de manera que quien carga los datos pueda pasearse por todos los campos de una misma persona.
Al hacer click en la casilla de verificación que estaría en la pestaña de "accidentes" y/o "enfermedades", eso podría HABILITAR a que el operador despliegue la pestaña "Ausentismo" y cargue ahí los datos específicos de ese evento que generó la ausencia, como ser: fecha de denuncia, fecha de baja laboral, fecha de alta laboral, días ausentes, etc.
SI el diseño suena inadecuado, obviamente acepto sugerencias. Lo pensé de esta manera sabiendo que, la persona que va cargando los datos, habitualmente no completa todos los datos el mismo día, por ejemplo, un día cargara la fecha de la baja laboral y al final de varios días cargara la fecha del alta laboral.
Muchas gracias por tu ayuda!
Empezaré por el final, para ser original. En temas de diseño podríamos decir que "sobre gustos no hay nada escrito". Lo importante es que te sea útil y que funcione como tú quieres. Me parece perfecto el futuro diseño que propones ;)
Te voy a explicar cómo hacer lo que pides sobre el formulario "Accidentes", por ejemplo, aunque si pillas la mecánica es lo mismo para "Enfermedades" (cambiando algún nombre). Voy a entrar en algunos detalles porque me comentas que eres "novato", y doy por supuesto que no tendrás práctica en seguir los pasos. Y, si ya lo sabes, pues mejor que mejor ;)
También, como consejo y dado que dices que no tienes práctica, primero yo haría las cosas en una copia de tu BD. No pasa nada porque no se van a modificar o borrar registros, pero si te "cargas" el diseño del formulario después es un trabajazo volverlo a dejar como estaba. Simplemente como recomendación ;)
Vamos allá:
1.- Abres el formulario "Accidentes" en vista diseño. Insertas un subformulario basado en la tabla "Ausentismo" y sigues los pasos del asistente. Entiendo que el campo que te servirá de unión entre formulario principal y subformulario será "Nº de legajo". Si lo es probablemente te dará esa opción automáticamente; si no, en la pantalla correspondiente, le dices "Definir la mía propia" y eliges los campos que tienen que servirte de link entre ambos.
2.- Una vez creado el subformulario sacas sus propiedades. Te vas a la pestaña "Formato" y en la propiedad Visible le marcas que NO.
3.- Siguiendo en las propiedades del subformulario, te vas a la pestaña "Otras" y en la propiedad nombre le pones, por ejemplo, "subFrmAusentismo".
4.- Ahora te vas al check donde marcas Sí/no y sacas sus propiedades. Te vas a la pestaña "Otras" y miras qué valor tiene la propiedad nombre (la necesitaremos para después). Para el ejemplo supondremos que el nombre es "chkAbsentismo".
5.- Siguiendo en las propiedades del check te vas a la pestaña "Eventos" y buscas el evento "Después de actualizar". Haces click en la parte blanca que hay a su derecha y verás que te aparecerá un pequeño botón con puntos suspensivos. Haces click sobre el mismo y en la pantalla que te sale le dices que quieres generar código.
6.- Se te abrirá el editor de VBA. Ahí tienes que pegar el siguiente código:
---
Private Sub chkAbsentismo_AfterUpdate()
    Dim blnSit As Boolean
    blnSit = Me.chkAbsentismo.Value
    If blnSit = True Then
        Me.subFrmAusentismo.Visible = True
        Me.subFrmAusentismo.SetFocus
    Else
        Me.subFrmAccidentes.Visible = False
    End If
End Sub
---
La primera línea (Private...) no la toques: deja lo que te salga a ti por defecto. En el código sólo tienes que cambiar:
... chkAbsentismo -> por el nombre que cogiste al mirar las propiedades (punto 4)
Y eso es todo. Ahora, si todo va bien, cuando marques el check verás que te aparecerá el subformulario. Si vuelves a desmarcar el check el subformulario desaparecerá.
Si tienes algún problema durante el proceso no dudes en comentármelo e intentaré solucionar la "inconveniencia".
Ya me dirás si te ha ido.
Primeramente muchas gracias por tu explicación tan detallada!
Lamentablemente no logre hacerla funcionar : (
¿Sera posible enviarte el proyecto como un adjunto de correo para que veas en que me equivoque?
PD. No se tu nombre o nick.
OK. No problem. Pásamela y te echaré un vistazo ;)
Mi correo es [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas