RE:Identificar fechas especificas
* Rectificacion del codigo, tenia un pequeño erro
PARAMETERS Fec1,dias
SET ESCAPE ON
CLOSE TABLES
CLEAR
b = DiasHab(Fec1,dias)
FUNCTION diashab(fecha1,dias)
LOCAL num AS INTEGER
* validando entrada de fechas
IF (!EMPTY(EVALUATE('fecha1'))) AND (!EMPTY(EVALUATE('dias')))
* numero de dias habilies
num=0
intTotDias = 0
feccom=fecha1
fecfin = fecha1
* habre la tabla con las fechas de dias festivos (libres)
IF !USED('diainabil')
rut_nom=LOCFILE('diainabil','dbf')
USE &rut_nom ALIAS diainabil IN 0 ORDER fechaini
ENDIF
SELECT diainabil
salir = .f.
intDias = 0
DO WHILE !salir
intDias = intDias + num
num = 0
FOR I = 1 TO dias
fecfin = fecfin + 1
intTotDias = intTotDias + 1
* contando sin incluir a sabados y domingos
*IF !INLIST(DOW(feccom+1),1,7)
* contando sin incluir domingos
IF !INLIST(DOW(feccom+1),1)
num=num+1
ENDIF
* restando las fechas de dias libres entre semana sin incluir el sabado.
*IF SEEK(feccom+1) AND INLIST(DOW(feccom+1),2,3,4,5,6)
* restando las fechas de dias libres entre semana incluyendo el sabado.
IF SEEK(feccom+1) AND INLIST(DOW(feccom+1),2,3,4,5,6,7)
num=num-1
ENDIF
*incrementa la fecha
feccom=feccom+1
ENDFOR
IF dias - num <= 0
salir = .t.
ELSE
dias = dias - num
ENDIF
ENDDO
intDias = intDias + num
* retorna el numero de dias habiles entre esas fechas
USE IN diainabil
? "Ma16-Mi17-Ju18-Vi19-Sa20-Do21-Lu22-MaF23-Mi24-JuF25-Vi26-Sa27-Do28-Lu29-Ma30-Mi31-Ju01-Vi02-Sa03"
? "Dias abiles a aplicar: " + ALLTRIM(STR(intDias))
? "Fecha inicial: " + DTOC(fecha1) + " --> Fecha final: " + DTOC(fecfin)
? "Dias naturales aplicados: " + ALLTRIM(STR(intTotDias))
? "Diferencia entre abiles y naturales: " + ALLTRIM(STR(ABS(intDias - intTotDias)))
RETURN intTotDias
ELSE
* error en tipo de datos
RETURN .F.
ENDIF
ENDFUNC