Entrada 3 (SPs insertar y obtener)
Fecha: 16/04/2026
Inicio: 8:00| Fin: 10:00|| Total:
[2 horas]
Presentes: Matías Benavides Sandoval
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
¿QUÉ HICIMOS HOY?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Se implemento y revisaro los SP de movimientos:
- sp_GetMovimientos para
listar movimientos por documento de identidad.
- sp_InsertMovimiento con
validación de saldo negativo y actualización de saldo en empleado.
Se incorporaron cambios de estándar según respuesta del
profesor:
- Cambio
de idPostByUser a idUsuario.
- Cambio
de PostInIP a IpPostIn.
- Confirmación
de que SaldoVacaciones inicia en 0.
- Confirmación
de que ValorDocumentoIdentidad es varchar.
- Confirmación
de uso de [Procedure] en DBError.
Se verificó en SSMS que las columnas ya quedaron renombradas
correctamente en tablas BitacoraEvento y Movimiento.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROBLEMAS ENCONTRADOS Y CÓMO SE RESOLVIERON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ya que no se probaron los SPs que hice hoy (Lo siento profe no me dio tiempo, queda para la siguiente sesion probarlos y ver si funcionan) no me dio nada ningun error al menos en ls SPs
Varios errores a la hora de renombrar a el estandar el profe
varios (0 columnas afectadas) y de que escirbi mal varias cosas
Mensaje 15248, nivel 11, estado 1, procedimiento sp_rename, línea 269 [línea de inicio de lote 2]
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
Mensaje 15248, nivel 11, estado 1, procedimiento sp_rename, línea 269 [línea de inicio de lote 2]
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
Mensaje 15248, nivel 11, estado 1, procedimiento sp_rename, línea 269 [línea de inicio de lote 2]
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
Mensaje 15248, nivel 11, estado 1, procedimiento sp_rename, línea 269 [línea de inicio de lote 2]
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DUDAS Y DIVERGENCIAS DE CRITERIO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Se aclaró con el profesor:
- Errores
de “nombre no alfabético” y “cédula no numérica” aplican a
inserción/edición de empleado, no al filtro.
- El
parser XML queda opcional hasta confirmación del profesor, no bloquea el avance asi que se planea continuar sin mas problemas
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AVANCE DEL CÓDIGO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Se avanzo en la parte de
movimientos:
- SP de
consulta de movimientos listo.USE VacacionesDB;GO-- =====================================================-- SP 1: Obtener todos los movimientos de vacaciones-- =====================================================DROP PROCEDURE IF EXISTS sp_GetMovimientos;GOCREATE PROCEDURE sp_GetMovimientos@ValorDocumentoIdentidad VARCHAR(32),@outResultCode INT OUTPUTASBEGINSET NOCOUNT ON;BEGIN TRYSELECTm.id,m.idEmpleado,e.Nombre AS NombreEmpleado,e.ValorDocumentoIdentidad,m.idTipoMovimiento,tm.Nombre AS NombreTipoMovimiento,tm.TipoAccion,m.Monto,m.NuevoSaldo,m.Fecha,m.PostTime,m.IpPostIn,u.Username AS UsuarioRegistroFROM Movimiento mINNER JOIN Empleado e ON m.idEmpleado = e.idINNER JOIN TipoMovimiento tm ON m.idTipoMovimiento = tm.idINNER JOIN Usuario u ON m.idUsuario = u.idWHERE e.ValorDocumentoIdentidad = @ValorDocumentoIdentidadORDER BY m.Fecha DESC, m.PostTime DESC;SET @outResultCode = 0;END TRYBEGIN CATCHSET @outResultCode = 50008;END CATCHEND;
- SP de
inserción con transacción, validaciones y bitácora listo (pendiente probar)USE VacacionesDB;GO-- =====================================================-- SP 2: Insertar movimiento de vacaciones-- =====================================================DROP PROCEDURE IF EXISTS sp_InsertMovimiento;GOCREATE PROCEDURE sp_InsertMovimiento@ValorDocumentoIdentidad VARCHAR(32),@NombreTipoMovimiento VARCHAR(64),@Monto DECIMAL(10,2),@Username VARCHAR(64),@IpPostIn VARCHAR(32),@PostTime DATETIME,@Fecha DATE,@outResultCode INT OUTPUTASBEGINSET NOCOUNT ON;SET XACT_ABORT ON;DECLARE @IdEmpleado INT;DECLARE @IdTipoMovimiento INT;DECLARE @idUsuario INT;DECLARE @TipoAccion VARCHAR(64);DECLARE @SaldoActual DECIMAL(10,2);DECLARE @NuevoSaldo DECIMAL(10,2);DECLARE @DescripcionBitacora VARCHAR(512);BEGIN TRYSELECT @idUsuario = u.idFROM Usuario uWHERE u.Username = @Username;IF @idUsuario IS NULLBEGINSET @outResultCode = 50001;RETURN;END;SELECT @IdEmpleado = e.id,@SaldoActual = e.SaldoVacacionesFROM Empleado eWHERE e.ValorDocumentoIdentidad = @ValorDocumentoIdentidadAND e.EsActivo = 1;IF @IdEmpleado IS NULLBEGINSET @outResultCode = 50008;RETURN;END;SELECT @IdTipoMovimiento = tm.id,@TipoAccion = tm.TipoAccionFROM TipoMovimiento tmWHERE tm.Nombre = @NombreTipoMovimiento;IF @IdTipoMovimiento IS NULLBEGINSET @outResultCode = 50008;RETURN;END;IF @TipoAccion = 'Credito'SET @NuevoSaldo = @SaldoActual + @Monto;ELSE IF @TipoAccion = 'Debito'SET @NuevoSaldo = @SaldoActual - @Monto;ELSEBEGINSET @outResultCode = 50008;RETURN;END;IF @NuevoSaldo < 0BEGINSET @outResultCode = 50011;RETURN;END;SET @DescripcionBitacora = 'Intento de insertar movimiento para el empleado con documento ' + @ValorDocumentoIdentidad;INSERT INTO BitacoraEvento (idTipoEvento, Descripcion, idUsuario, IpPostIn, PostTime)VALUES (13, @DescripcionBitacora, @idUsuario, @IpPostIn, @PostTime);BEGIN TRANSACTION;INSERT INTO Movimiento (idEmpleado, idTipoMovimiento, Fecha, Monto, NuevoSaldo, idUsuario, IpPostIn, PostTime)VALUES (@IdEmpleado, @IdTipoMovimiento, @Fecha, @Monto, @NuevoSaldo, @idUsuario, @IpPostIn, @PostTime);UPDATE EmpleadoSET SaldoVacaciones = @NuevoSaldoWHERE id = @IdEmpleado;SET @DescripcionBitacora = 'Insertar movimiento exitoso para el empleado con documento ' + @ValorDocumentoIdentidad;INSERT INTO BitacoraEvento (idTipoEvento, Descripcion, idUsuario, IpPostIn, PostTime)VALUES (14, @DescripcionBitacora, @idUsuario, @IpPostIn, @PostTime);COMMIT TRANSACTION;SET @outResultCode = 0;END TRYBEGIN CATCHIF @@TRANCOUNT > 0ROLLBACK TRANSACTION;INSERT INTO DBError ([UserName], [Number], [State], [Severity], [Line], [Procedure], [Message], [DateTime])VALUES (@Username,ERROR_NUMBER(),CAST(ERROR_STATE() AS VARCHAR(32)),CAST(ERROR_SEVERITY() AS VARCHAR(32)),ERROR_LINE(),ISNULL(ERROR_PROCEDURE(), 'sp_InsertMovimiento'),ERROR_MESSAGE(),GETDATE());SET @outResultCode = 50008;END CATCHEND;
- Scripts
y consultas alineados al nuevo estándar de nombres (idUsuario, IpPostIn).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MORALEJAS / BUENAS PRÁCTICAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Primero validar estándar de nombres con el profesor evita
retrabajo en toda la capa SQL, haber preguntado antes y esperar la respuesta antes de empezar.
Después de cada cambio importante, verificar
columnas reales en SSMS antes de seguir con SPs, por que uno se equivoca y escribe algo mal y de repente nada tiene el nombre que en teoria deberia tener.
Un errorde sintaxis puede bloquear todo, hay que revisar muy el nombre de las cosas.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRÓXIMA SESIÓN: ¿QUÉ SIGUE?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ejecutar pruebas controladas
Ejecutar los SPs a ver si no hay ningun error
Comentarios
Publicar un comentario