Creación de SPs: AplicarDeducciones, AbrirMes y ActualizarPlanillaMensual
Fecha: Lunes 08 de junio de 2026Hora de inicio: 18:00Hora de finalización: 23:00Horas trabajadas: 4 horas (efectivas)
Actividades Realizadas:
- Se ejecutaron pruebas para los cuatro SPs creados hasta ese momento y se identificó un error en el SP Login para el caso en que el usuario no existe en la base de datos.
- Se modificó la tabla BitacoraEvento para que la columna idUsuario admita NULL, lo que permite registrar eventos de usuarios no autenticados sin violar la integridad referencial.
- Se corrigió el SP Login para pasar NULL en lugar de 0 como idUsuario en los casos donde no hay sesión activa (usuario inexistente o cuenta bloqueada).
- Se escribió el SP AplicarDeducciones, que calcula y aplica las deducciones mensuales de cada empleado según su tipo: para las deducciones fijas distribuye el monto entre los jueves del mes, y para las porcentuales aplica el porcentaje sobre el salario bruto. Para este SP fue necesario investigar varias funciones de manejo de fechas en T-SQL.
- Se escribió el SP AbrirMes, que inicializa el encabezado de la planilla mensual para el período que comienza.
- Se escribió el SP ActualizarPlanillaMensual, que toma los totales de la planilla semanal recién cerrada y los acumula en la planilla del mes correspondiente.
- Se realizaron pruebas a los nuevos SPs del día.
Errores encontrados:
Al intentar hacer login con un usuario inexistente, el SP llamaba a RegistrarBitacora pasando @inIdUsuario = 0. Como BitacoraEvento tiene una FK hacia Usuario(id) y no existe ningún usuario con id = 0, la constraint se violaba, el CATCH hacía ROLLBACK y se retornaba el código de error genérico 50008 en lugar del 50001 esperado (usuario no encontrado).
Solución encontrada:
- Se modificó la columna idUsuario en BitacoraEvento para admitir NULL (ALTER TABLE BitacoraEvento ALTER COLUMN idUsuario INT NULL).
- En el SP Login, se reemplazaron los casos donde se pasaba @inIdUsuario = 0 por NULL mediante NULLIF.
Coordinación con Johana mediante WhatsApp.
Referencias consultadas:
- DATEPART (Transact-SQL) — https://learn.microsoft.com/es-es/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver17
- @@DATEFIRST (Transact-SQL) — https://learn.microsoft.com/es-es/sql/t-sql/functions/datefirst-transact-sql?view=sql-server-ver17
- DATEDIFF vs. DATEADD — https://www.sqlservercentral.com/blogs/datediff-vs-dateadd
- ISNULL (Transact-SQL) — https://learn.microsoft.com/es-es/sql/t-sql/functions/isnull-transact-sql?view=sql-server-ver17
- ¿Cómo funciona INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN? — https://programacionymas.com/blog/como-funciona-inner-left-right-full-join
Comentarios
Publicar un comentario