Está en la página 1de 2

xNosotros lo tenemos implementado mediante una tabla de DIAS NO HABILES, donde

estn cargadas las fechas no hbiles fijas ( 1 de enero, 6 de enero,


31 de diciembre, etc ) y el administrador del sistema ingresa las fechas no hbiles variables
(feriados mviles, paros, etc. )
Para los sbados y domingos utilizamos la funcin DOW(fecha)
Con sta informacin, pods desarrollar funciones de evaluacin:

Es_Feriado(fecha),
y tambin que dada una fecha devuelva el siguiente da hbil: Next_Dia_Habil( fecha )

Podes uar la funcin DOW(fecha) que devuelve el NUMERO de da (creo x default


1=Domingo)

El algorimo a construir podr utilizar las siguientes


Funciones y operaciones....
DoW() = Day of Week de 1 a 7,
1 Domingo
7 Sabado.
CantidadDeDias = FechFin - FechIni + 1
Idea:
Suponiendo que contaras con cantidad de semanas exactas, entonces la cuenta seria
Semanas = CantidadDeDias / 7
DiasHabiles = Semanas * 5
Lo unico que tienes que falta hacer, es transformar la fecha inicial en un Domingo, y la
Final en Un sabado, y mirar en ese "corrimiento" cuantos dias sobran... por fuera,... es
decir, si la fecha inicial era un viernes, un DoW=6, entonces Sab(7)-Vier(6) = 1 dia habil,...
Si la Fecha Final era un Martes Dow()=3, la cuenta es Martes(3)-Domingo(1) = 2 dias
habiles esto lo agregas a la cuenta de semanas * 5...

**************************************************

Mira, yo utilizo el siguiente procedimiento para determinar fechas de vencimiento a partir


de una fecha dada y sus dias de plazo, me vi en la necesidad de agregar una tabla donde
indico los dias feriados, ya que tampoco debia tomarlos en cuenta para los plazos de
vencimiento.

//parm(&zetfacfech ,&plazo ,&vencimient ) ; //&zetfacfech fecha inicial


//&plazo plazo en dias
//&vencimient retorna con la fecha de vencimiento

&vencimient = &zetfacfech + &plazo


&flag = '0'
&flag2 = '0'
do while &flag = '0'
&flag2 = '0'
for each
where Fer_fecha = &vencimient
defined by Fer_descri
msg('Este da es feriado',status)
&flag2 = '1'
endfor
if dow(&vencimient ) = 7
msg('Es da sabado.',status)
&flag2 = '1'
else
if dow(&vencimient ) = 1
msg('Es da domingo.',status)
&flag2 = '1'
endif
endif
if &flag2 = '1'
&vencimient = &vencimient + 1 // si es feriado, sabado o domingo le agrego un da
else
&flag = '1'
endif
enddo

También podría gustarte