Controlar el tiempo de trabajo de tus empleados con Access

Escrito por Administrador

28 de noviembre de 2022

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.

saber-usuarios-conectados-base-datos

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.

saber-usuarios-conectados-base-datos

Por último, el código abre el formulario FMenu, con el que accedemos al programa.

saber-usuarios-conectados-base-datos

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.

saber-usuarios-conectados-base-datos

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.

saber-usuarios-conectados-base-datos

3. Informe de horas. Muestra un informe con el resumen desglosado de horas introducidas en cada proyecto.

saber-usuarios-conectados-base-datos

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

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Últimas publicaciones

Categorías

diciembre 2024
LMXJVSD
 1
2345678
9101112131415
16171819202122
23242526272829
3031 

Debates en el foro

Contacto