Si tienes un grupo de empleados a tu cargo, es probable que hayas necesitado alguna vez controlar cómo están repartiendo su tiempo entre los distintos proyectos que lleváis a cabo, y nada mejor que hacerlo con un programa desarrollado en Access.
De esta manera, cada empleado accedería al mismo y justificaría las horas que ha invertido en cada proyecto, pudiéndose elaborar un informe detallado de distribución del tiempo por proyecto y empleado. Vamos a ver cómo montar todo esto.
En primer lugar, he creado un formulario de acceso, con el cual quedará perfectamente identificado el empleado que va a registrar horas a un proyecto.
A continuación, os muestro el código que le acompaña,
Option Compare Database
Option Explicit
Private Sub Acceder_Click()
Dim vUser As String, vPass As String
Dim vCompruebo As Variant
'Guardamos los valores introducidos en variables
vUser = Nz(Me.cboUser.Value, "")
vPass = Nz(Me.txtPass.Value, "")
'Si no hemos introducido un nombre de usuario lanzamos un mensaje de aviso
If vUser = "" Then
MsgBox "Es necesario introducir un nombre de usuario", vbExclamation, "SIN DATOS"
Exit Sub
End If
'Si no hemos introducido la contraseña lanzamos un mensaje de aviso
If vPass = "" Then
MsgBox "No ha introducido la contraseña", vbExclamation, "SIN DATOS"
Exit Sub
End If
'Comprobamos la contraseña correcta en la tabla TPass para el usuario introducido
vCompruebo = DLookup("Pass", "TPass", "NomUser='" & vUser & "'")
If vPass = vCompruebo Then
'Si coincide vemos qué tipo de usuario es: jefe o trabajador, y lo guardamos en vCompruebo
vCompruebo = DLookup("TipoUser", "TPass", "NomUser='" & vUser & "'")
'Si no coincide avisamos y salimos
Else
MsgBox "La contraseña introducida no es correcta", vbCritical, "INCORRECTO"
Exit Sub
End If
'Abrimos el formulario chivato en modo oculto
DoCmd.OpenForm "FChivato", , , , , acHidden
'Pasamos a los textbox los valores que nos interesan: tipo de usuario, nombre de usuario e identificador del trabajador
With Forms!FChivato
.txtTipoUser = vCompruebo
.txtNomUser = vUser
.txtIdTrab = DLookup("IdTrabPass", "TPass", "NomUser='" & vUser & "'")
End With
'Abrimos el formulario FMenu
DoCmd.OpenForm "FMenu"
'Cerramos el formulario FPass
DoCmd.Close acForm, Me.Name
End Sub
Private Sub Cancelar_Click()
'Si pulsamos el botón Cancelar, cerramos el programa
DoCmd.Quit
End Sub
Como veis, lo primero que hacemos es guardar los datos introducidos en variables, y comprobar que ambos campos (usuario y contraseña) se encuentren rellenos.
Después, usando el comando DLookUp, comprobamos que la contraseña sea correcta. En caso negativo, lanzamos un mensaje de aviso y salimos de la función. En caso afirmativo, buscamos en la tabla TPass qué tipo de usuario es (jefe o trabajador) y abrimos el formulario FChivato en modo oculto. Este formulario lo usaremos para guardar la información del trabajador que se ha logueado. Así que le pasamos los datos: tipo, nombre e id del trabajador.
Por último, el código abre el formulario FMenu, con el que accedemos al programa.
El código que hay detrás del formulario FMenu es el siguiente,
Option Compare Database
Option Explicit
Private Sub Introducirhoras_Click()
'Abrimos el formulario FHoras para introducir nuevos registros
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FHoras", , , , acFormAdd
End Sub
Private Sub Consulta_Click()
'Si el usuario es administrador abrimos la consulta CProyectos en modo edición
If Forms!FChivato.txtTipoUser = 1 Then
DoCmd.OpenQuery "CHoras"
'Si el usuario es trabajador
Else
'Abrimos CProyectosUser en modo sólo lectura
DoCmd.OpenQuery "CHorasUser", , acReadOnly
End If
End Sub
Private Sub Informe_Click()
Dim miFiltro As String
Dim vIdTrab As Long
'Guardamos el identificador del trabajador en una variable
vIdTrab = Forms!FChivato.txtIdTrab.Value
'En caso de que el usuario sea jefe, no hay filtro
If Forms!FChivato.txtTipoUser.Value = 1 Then
miFiltro = ""
'En caso de ser un trabajador, solo verá sus datos
Else
miFiltro = "[IdTrabajadorProyecto]=" & vIdTrab
End If
DoCmd.OpenReport "RHoras", acViewPreview, , miFiltro
End Sub
Private Sub Salir_Click()
'Cerramos todos los formularios, consultas e informes abiertos y salimos al formulario de login
While Forms.Count
DoCmd.Close acForm, Forms(0).Name
Wend
While Reports.Count
DoCmd.Close acReport, Reports(0).Name
Wend
DoCmd.Close acQuery, "CHoras"
DoCmd.Close acQuery, "CHorasUser"
DoCmd.OpenForm "FPass"
End Sub
El código anterior se ejecuta al pulsar cada uno de los botones del Menú.
En el segundo bloque, cabe destacar que abrimos consultas distintas dependiendo de quién se encuentre en el programa (trabajador o jefe). El trabajador sólo verá sus registros y, además, la consulta se abrirá en modo sólo lectura. Sin embargo, el jefe verá los registros de todos los trabajadores y tendrá la posibilidad de realizar ediciones.
En el tercer bloque, elaboramos un informe de tiempos por trabajador. En el caso de ser ejecutado por un trabajador se encontrará filtrado y sólo aparecerán sus registros. Si por el contrario, lo ejecuta un jefe aparecerán los registros de todos los trabajadores.
Vamos a ver más en detalle cada una de las opciones del Menú del programa Access que te propongo para controlar el tiempo de tus empleados.
1. Introducción de horas. A través de este formulario, podemos introducir las horas invertidas por empleado en cada proyecto. Estos registros se guardarán en la tabla THoras.
Incluye el siguiente código,
Private Sub Proyecto_AfterUpdate()
'Cogemos el valor que nos guarda el formulario chivato en cuanto al identificador del usuario y lo pasamos a [IdTrabajadorProyecto]
Me.IdTrabajadorProyecto.Value = Forms!FChivato.txtIdTrab.Value
End Sub
Private Sub Cerrar_Click()
'Si todos los campos se encuentran vacíos, permitimos salir al Menú
If IsNull(Me.Proyecto) And IsNull(Me.FechTrabajo) And IsNull(Me.Horas) Then
Me.Undo
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FMenu"
Exit Sub
End If
'En caso contrario, comprobamos que se encuentren todos rellenos uno a uno
If IsNull(Me.Proyecto) Then
MsgBox "Es necesario rellenar el campo Proyecto"
Exit Sub
End If
If IsNull(Me.FechTrabajo) Then
MsgBox "Es necesario rellenar el campo Fecha"
Exit Sub
End If
If IsNull(Me.Horas) Then
MsgBox "Es necesario rellenar el campo Horas"
Exit Sub
End If
'Si todo se encuentra relleno y pulsamos, salimos al Menú
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FMenu"
End Sub
2. Consulta de horas. Muestra el registro de horas introducidas en cada proyecto.
3. Informe de horas. Muestra un informe con el resumen desglosado de horas introducidas en cada proyecto.
Espero que te sirva este ejemplo desarrollado en Microsoft Access para controlar el tiempo que tus empleados invierten en cada proyecto.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Hasta la próxima.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
Últimas publicaciones
0 comentarios