jueves, 23 de agosto de 2018

Generar ultimos dias de fecha por periodo SQL

 alter proc Pa_ConsistenciaCuotaMantenimiento_Generar --5219, '01/01/2019' , '01/01/2019'
 @IDSocioNegocio int =5219   ,
 @FechaEmisionInicio datetime     ,
 @FechaEmisionFinal datetime   

 as

 declare @IDListaPrecio  int = 0
 declare @IDMoneda  int = 0

select  @IDListaPrecio   =  isnull(IDListaPrecio,0) from MAESTROS.MAE_CLIENTES WHERE CLI_NCODIGOCLIENTE = @IDSocioNegocio

select  @IDMoneda = isnull(IDMoneda,0)  FROM ventas.vent_listaprecioscabecera where listPrecios_nCodigoListaPrecios = @IDListaPrecio 

declare @IDProducto int = 0

select @IDProducto = isnull(pro_nCodigoProducto,0) from produccion.pro_productos where cuotamantenimiento = 1


declare @Importe decimal(18,6) = 0

SELECT  @Importe  = isnull(listPreciosDet_nPreciosListaPrecios,0) FROM Ventas.vent_listapreciosdetalle where listPrecios_nCodigoListaPrecios = @IDListaPrecio   and pro_nCodigoProducto = @IDProducto

select  @Importe  , @IDProducto  ,  @IDMoneda  , @IDListaPrecio 
 
declare @Fechas table
(
 FechaEmisionInicio  datetime    ,
 FechaEmisionFinal  datetime 
)

-- insert into @Fechas values(@FechaEmisionInicio ,  @FechaEmisionFinal)
 

--select * from [MAESTROS].[Anio] where cast( codigo as int)  between year(@FechaEmisionInicio) and year(@FechaEmisionFinal )

 declare @ini datetime = @FechaEmisionInicio
declare @fin datetime = @FechaEmisionFinal

 declare @begdate as datetime
declare @enddate as datetime
declare @diff as int

declare @T_Fecha Table
(
Periodo varchar(10),
Annio int  ,
Mes int  ,
Fecha datetime ,
Importe decimal(18,6) ,
Feriado bit
)

set @begdate = (select cast( @ini as datetime)  )
set @enddate = (select cast(@fin as datetime)  )
set @diff = datediff(day, @begdate ,@enddate)

declare @FechaFinal datetime 

while (@begdate <= @enddate) --insertar el registro hasta que fecha inicio y fin sean iguales
begin


SELECT @FechaFinal =CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@begdate))),DATEADD(mm,1,@begdate)),103) 

--select  cast ( @begdate as date ) Fecha1,cast( @FechaFinal as date) Fecha2

if( cast ( @begdate as date ) = cast( @FechaFinal as date) )
begin
     insert into @T_Fecha  values( ( cast( year(@begdate) as varchar)+ '-' + RIGHT( '00' + cast( month(@begdate) AS varchar), 2)  ) ,
year(@begdate),
month(@begdate),  @begdate, @Importe, 0)
end


  --insert into Calendario values( ( cast( year(@begdate) as varchar)+ '-' + RIGHT( '00' + cast( month(@begdate) AS varchar), 2)  ) , year(@begdate), month(@begdate),  @begdate , 0)
 set @begdate = dateadd(day,1,@begdate) --vamos incrementando los días
end


select * from @T_Fecha

1 comentario: