--Para colocar fechas no laborables --Si ya existen datos pero se quiere reconstruir a partir de una fecha se deben eliminar los registros existentes despues de la fecha a generar: delete tfechascontables where FREALDESDE > to_date('2014-01-01','yyyy-mm-dd'); --Agregar fecha Continua set long 30 -- Agregar fechas contables sin fin de semana fitbank2 -- debe estar deinido el cliente oracle: -- en NLS_LANG del regedit AMERICAN_AMERICA.WE8MSWIN1252 para que tome el dia domingo como 1 declare Desde Timestamp; Hasta Timestamp; FecRealDesde Date; FecRealHasta Date; FecContinua Date; FecCon Date; FecInicio Date; dias number(5); cursor sucursal is select cPersona_Compania,cSucursal from tSucursales where cPersona_Compania = 2 and fhasta = fncfhasta() and cSucursal != 999; begin FecInicio:=to_date('2014-01-01','yyyy-mm-dd'); Desde:=Systimestamp; Hasta:=to_timestamp('2999-12-31','yyyy-mm-dd'); for reg in sucursal loop begin begin select max(fRealHasta)+1 into FecRealDesde from tFechasContables where cPersona_Compania = reg.cPersona_Compania and cSucursal = reg.cSucursal and fHasta = Hasta; exception when no_data_found then null; end; if FecRealDesde is null then FecRealDesde := FecInicio; end if; dbms_output.put_line('Fecha Inicio '||FecInicio); FecContinua := FecRealDesde; dias:=1; dbms_output.put_line('Fecha Continua '||FecContinua); dbms_output.put_line('Dias Inicial '||Dias); while dias < 360 loop dbms_output.put_line(FecContinua); begin insert into tfechascontables (CPERSONA_COMPANIA,CSUCURSAL,FREALHASTA,FREALDESDE,FHASTA,VERSIONCONTROL,FDESDE,FCONTABLE) values(reg.cPersona_Compania,reg.cSucursal,FecContinua,FecContinua,Hasta,0,Desde,FecContinua); FecContinua := FecContinua+1; dias:=dias+1; --exception when others then null; end; end loop; -- 360 dias commit; end; end loop; -- sucursales end; --Agregar fechas no laborables set long 30 declare Desde Timestamp; Hasta Timestamp; FecRealDesde Date; FecRealHasta Date; FecCon Date; dias number(5); sucursal number(4); FechaInicio date; cursor sucursales is select cPersona_Compania,cSucursal from tSucursalesId where cPersona_Compania = 2; cursor oficinas is select cPersona_Compania,cSucursal,cOficina from tOficinasSucursal where cPersona_Compania = 2 and cSucursal = Sucursal; begin Desde:=to_timestamp('2007-01-01','yyyy-mm-dd'); Hasta:=to_timestamp('2999-12-31','yyyy-mm-dd'); FechaInicio:=to_date('2014-01-01','yyyy-mm-dd'); for reg in sucursales loop begin begin select max(fNolaborable)+1 into FecRealDesde from tFechasNoLaborables where cPersona_Compania = reg.cPersona_Compania and cSucursal = reg.cSucursal and fHasta = Hasta; exception when no_data_found then null; end; if FecRealDesde is null then FecRealDesde:=FechaInicio; end if; dias:=1; Sucursal:=reg.cSucursal; while dias < 361 loop begin if to_char(FecRealDesde,'d') = '7' then if reg.cSucursal != 0 then for ofi in oficinas loop begin insert into tfechasNoLaborables (CPERSONA_COMPANIA,CSUCURSAL,COFICINA,FNOLABORABLE,FHASTA,FDESDE) values(reg.cPersona_Compania,reg.cSucursal,ofi.cOficina,trunc(FecRealDesde),Hasta,Desde); insert into tfechasNoLaborables (CPERSONA_COMPANIA,CSUCURSAL,COFICINA,FNOLABORABLE,FHASTA,FDESDE) values(reg.cPersona_Compania,reg.cSucursal,ofi.cOficina,trunc(FecRealDesde+1),Hasta,Desde); exception when dup_val_on_index then null; end; end loop; end if; FecRealHasta:=FecRealDesde+2; else FecRealHasta:=FecRealDesde; end if; FecCon:=trunc(FecRealHasta); FecRealDesde:=FecRealHasta+1; dias:=dias+1; end; end loop; -- 360 dias commit; end; end loop; -- sucursales commit; end;