Procedimiento/Debugeo
Tengo 2 procedimientos almacenados para el cálculo de período de vacaciones, sin embargo, presentan error.
1) Cómo puedo debugear y testear el procedimiento (línea a línea)
2) Creo que hay un tema con las fechas, ¿pueden darme una mano con eso?
CREATE PROCEDURE M4PR_PER_PARTIC_ST
(@cID_SOCIEDAD VARCHAR(2),@cID_EMPLEADO VARCHAR(10),@dFEC_ALTA_EMPLEADO DATETIME , @nANO NUMERIC(4) )
AS
DECLARE
@dFEC_ANTIGUEDAD datetime,
@dFEC_INI_PERIODO numeric(4),
@dFEC_FIN_PERIODO numeric(4),
@nANTIGUEDAD numeric(2),
@nSALDO_DIAS_LEG numeric(2),
@nSALDO_DIAS_PRO numeric(2),
@nDIAS_DEVENGADO_LEG numeric(2),
@nDIAS_DEVENGADO_PRO numeric(2),
@nEXISTE_PERIODO numeric(2),
@nEXISTE_DIAS_PROGRESIVOS numeric(2)
BEGIN
SELECT @dFEC_ANTIGUEDAD = FEC_ANTIGUEDAD
FROM M4_FASES_ALTA
WHERE ID_SOCIEDAD=@cID_SOCIEDAD and ID_EMPLEADO=@cID_EMPLEADO
and FEC_ALTA_EMPLEADO=@dFEC_ALTA_EMPLEADO
IF @nANO IS NULL OR @nANO <= 1950 OR datepart(yy,@dFEC_ANTIGUEDAD) >@nANO
raiserror(50758, 16, -1) -- 'Error: En el año ingresado '
SELECT @nEXISTE_PERIODO = COUNT(*)
FROM M4_HT_PER_VAC_ST
WHERE ID_SOCIEDAD = @cID_SOCIEDAD AND
ID_EMPLEADO = @cID_EMPLEADO AND
FEC_ALTA_EMPLEADO = @dFEC_ALTA_EMPLEADO AND
ANIO_INICIO = @nANO
IF @nEXISTE_PERIODO = 0
BEGIN
SELECT @dFEC_INI_PERIODO = @nANO
SELECT @dFEC_FIN_PERIODO = @nANO+1
SELECT @nANTIGUEDAD = @nANO - datepart (yy,@dFEC_ANTIGUEDAD)
SELECT @nDIAS_DEVENGADO_LEG = 15
SELECT @nDIAS_DEVENGADO_PRO = FLOOR(( @nANTIGUEDAD - 10 ) / 3 )
IF @nDIAS_DEVENGADO_PRO < 0
SELECT @nDIAS_DEVENGADO_PRO = 0
SELECT @nSALDO_DIAS_LEG = @nDIAS_DEVENGADO_LEG
SELECT @nSALDO_DIAS_PRO = @nDIAS_DEVENGADO_PRO
INSERT INTO M4_HT_PER_VAC_ST
( ID_SOCIEDAD, ID_EMPLEADO, FEC_ALTA_EMPLEADO, ANIO_INICIO,ANIO_FIN, SALDO_DIAS_LEG, SALDO_DIAS_PRO, DIAS_DEVENGADO_LEG, DIAS_DEVENGADO_PRO)
VALUES (@cID_SOCIEDAD,@cID_EMPLEADO,@dFEC_ALTA_EMPLEADO,@dFEC_INI_PERIODO,@dFEC_FIN_PERIODO,@nSALDO_DIAS_LEG,@nSALDO_DIAS_PRO,@nDIAS_DEVENGADO_LEG,@nDIAS_DEVENGADO_PRO)
END
END
GO
1) Cómo puedo debugear y testear el procedimiento (línea a línea)
2) Creo que hay un tema con las fechas, ¿pueden darme una mano con eso?
CREATE PROCEDURE M4PR_PER_PARTIC_ST
(@cID_SOCIEDAD VARCHAR(2),@cID_EMPLEADO VARCHAR(10),@dFEC_ALTA_EMPLEADO DATETIME , @nANO NUMERIC(4) )
AS
DECLARE
@dFEC_ANTIGUEDAD datetime,
@dFEC_INI_PERIODO numeric(4),
@dFEC_FIN_PERIODO numeric(4),
@nANTIGUEDAD numeric(2),
@nSALDO_DIAS_LEG numeric(2),
@nSALDO_DIAS_PRO numeric(2),
@nDIAS_DEVENGADO_LEG numeric(2),
@nDIAS_DEVENGADO_PRO numeric(2),
@nEXISTE_PERIODO numeric(2),
@nEXISTE_DIAS_PROGRESIVOS numeric(2)
BEGIN
SELECT @dFEC_ANTIGUEDAD = FEC_ANTIGUEDAD
FROM M4_FASES_ALTA
WHERE ID_SOCIEDAD=@cID_SOCIEDAD and ID_EMPLEADO=@cID_EMPLEADO
and FEC_ALTA_EMPLEADO=@dFEC_ALTA_EMPLEADO
IF @nANO IS NULL OR @nANO <= 1950 OR datepart(yy,@dFEC_ANTIGUEDAD) >@nANO
raiserror(50758, 16, -1) -- 'Error: En el año ingresado '
SELECT @nEXISTE_PERIODO = COUNT(*)
FROM M4_HT_PER_VAC_ST
WHERE ID_SOCIEDAD = @cID_SOCIEDAD AND
ID_EMPLEADO = @cID_EMPLEADO AND
FEC_ALTA_EMPLEADO = @dFEC_ALTA_EMPLEADO AND
ANIO_INICIO = @nANO
IF @nEXISTE_PERIODO = 0
BEGIN
SELECT @dFEC_INI_PERIODO = @nANO
SELECT @dFEC_FIN_PERIODO = @nANO+1
SELECT @nANTIGUEDAD = @nANO - datepart (yy,@dFEC_ANTIGUEDAD)
SELECT @nDIAS_DEVENGADO_LEG = 15
SELECT @nDIAS_DEVENGADO_PRO = FLOOR(( @nANTIGUEDAD - 10 ) / 3 )
IF @nDIAS_DEVENGADO_PRO < 0
SELECT @nDIAS_DEVENGADO_PRO = 0
SELECT @nSALDO_DIAS_LEG = @nDIAS_DEVENGADO_LEG
SELECT @nSALDO_DIAS_PRO = @nDIAS_DEVENGADO_PRO
INSERT INTO M4_HT_PER_VAC_ST
( ID_SOCIEDAD, ID_EMPLEADO, FEC_ALTA_EMPLEADO, ANIO_INICIO,ANIO_FIN, SALDO_DIAS_LEG, SALDO_DIAS_PRO, DIAS_DEVENGADO_LEG, DIAS_DEVENGADO_PRO)
VALUES (@cID_SOCIEDAD,@cID_EMPLEADO,@dFEC_ALTA_EMPLEADO,@dFEC_INI_PERIODO,@dFEC_FIN_PERIODO,@nSALDO_DIAS_LEG,@nSALDO_DIAS_PRO,@nDIAS_DEVENGADO_LEG,@nDIAS_DEVENGADO_PRO)
END
END
GO
1 Respuesta
Respuesta de David Rodríguez
1