SQL Server - Ajuste de fechas

 
Vista:

Ajuste de fechas

Publicado por Javier Medina (3 intervenciones) el 10/12/2008 16:59:10
Tengo un codigo que a partir a una fecha de expedicion, calcula y genera otras fechas que pertenecen a un recibo

Ejemplo, se hizo expedicion de poliza el 2008-01-30, su primer recibo seria 2008-01-30 hasta 2008-02-29. Asi sucesivamente hasta llegar a diciembre y recrear los nuevos recibos.

El problema es que cuando intento recrear las fechas para ajustar el error de la data, hay polizas que arrojan overflow por fecha, claro hay que tomar en cuenta la periodicidad de la misma

Aqui les dejo el codigo

En espera de comentarios

BEGIN TRAN

DECLARE
@NUMEROPOLIZA VARCHAR(13),
@CODIGOPERIODO INT,
@FECHAEXPEDICION DATETIME,
@FECHAINICIOPERIODO DATETIME,
@FECHAFINPERIODO DATETIME,
@INTERVALO INT,
@CONTADOR INT,
@PERIODO INT,
@NUMERO INT,
@INTERVALOANUAL INT,
@FEHCAMAXIMA DATETIME

DECLARE CURSORPOLIZAS CURSOR FOR
SELECT DISTINCT MMPOLIZA.NUMEROPOLIZA,MMPOLIZA.FECHAEXPEDICION,MMPOLIZA.CODIGOPERIODO--,MMRECIBO.NUMERO
FROM MMPOLIZA INNER JOIN MMRECIBO ON MMPOLIZA.IDPOLIZA = MMRECIBO.IDPOLIZA
WHERE CODIGOPOLIZA2 = '41'
AND DAY(MMPOLIZA.FECHAEXPEDICION) != DAY(MMRECIBO.FECHAEXPEDICION)
AND MMPOLIZA.NUMEROPOLIZA = '3690190001135'

OPEN CURSORPOLIZAS
FETCH NEXT FROM CURSORPOLIZAS INTO @NUMEROPOLIZA, @FECHAEXPEDICION, @CODIGOPERIODO--, @NUMERO
WHILE @@FETCH_STATUS = 0
BEGIN

IF(@CODIGOPERIODO = 1)
BEGIN
SET @PERIODO = 12
-- PRINT 'ANUAL'
END

IF(@CODIGOPERIODO = 2)
BEGIN
SET @PERIODO = 6
-- PRINT 'SEMESTRAL'
END

IF(@CODIGOPERIODO = 3)
BEGIN
SET @PERIODO = 3
-- PRINT 'TRIMESTRAL'
END

IF(@CODIGOPERIODO = 4)
BEGIN
SET @PERIODO = 2
-- PRINT 'BIMESTRAL'
END

IF(@CODIGOPERIODO = 5)
BEGIN
SET @PERIODO = 1
-- PRINT 'MENSUAL'
END

SET @INTERVALO = 0
SET @INTERVALOANUAL = 0
SET @CONTADOR = 0

DECLARE CUSORRECIBO CURSOR FOR
SELECT NUMERO FROM MMRECIBO WHERE CODIGOPOLIZA = @NUMEROPOLIZA ORDER BY FECHAINICIOPERIODO

OPEN CUSORRECIBO
FETCH NEXT FROM CUSORRECIBO INTO @NUMERO
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE MMRECIBO
SET FECHAEXPEDICION = DATEADD(YEAR, @INTERVALOANUAL, @FECHAEXPEDICION),
FECHAINICIOPERIODO = DATEADD(MONTH, @INTERVALO, @FECHAEXPEDICION),
FECHAFINPERIODO = DATEADD(MONTH,@INTERVALO + @PERIODO,@FECHAEXPEDICION)
WHERE NUMERO = @NUMERO

-- PRINT @NUMEROPOLIZA
-- PRINT CAST(@NUMERO AS VARCHAR(MAX)) + ' -- ' + CAST(@FECHAEXPEDICION AS VARCHAR(MAX)) + ' -- ' + CAST(@FECHAINICIOPERIODO AS VARCHAR(MAX)) + ' -- ' + CAST(@FECHAFINPERIODO AS VARCHAR(MAX))

SET @INTERVALO = @INTERVALO + @PERIODO

SET @CONTADOR = @CONTADOR + 1

IF(@CONTADOR >= 12)
BEGIN
SET @INTERVALOANUAL = @INTERVALOANUAL +1
SET @CONTADOR = 0
END

FETCH NEXT FROM CUSORRECIBO INTO @NUMERO
END
CLOSE CUSORRECIBO
DEALLOCATE CUSORRECIBO

SELECT @FEHCAMAXIMA = FECHAFINPERIODO FROM MMRECIBO WHERE CODIGOPOLIZA = @NUMEROPOLIZA

UPDATE MMPOLIZA
SET FECHAVENCIMIENTO = @FEHCAMAXIMA,
FECHAULTIMARENOVACION = DATEADD(YEAR,-1,@FEHCAMAXIMA)
WHERE NUMEROPOLIZA = @NUMEROPOLIZA

FETCH NEXT FROM CURSORPOLIZAS INTO @NUMEROPOLIZA, @FECHAEXPEDICION, @CODIGOPERIODO--, @NUMERO

END
CLOSE CURSORPOLIZAS
DEALLOCATE CURSORPOLIZAS

ROLLBACK
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ajuste de fechas

Publicado por Isaias (3308 intervenciones) el 11/12/2008 19:03:04
¿Que version de base de datos estas manejando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar