23 de febrero de 2004

Días hábiles entre 2 fechas

Función para determinar días hábiles en un periodo de fechas, no cuenta los sábados ni domingos ni días festivos entre semana.

Tiene una tabla para capturar los días festivos, si no captura información en esta tabla la función tendrá un error de calculo por tal razón hay que tener esta tabla con datos correctos y actuales y tener un campo índice principal de fecha.
FUNCTION diashab(fecha1,fecha2)
  LOCAL num AS INTEGER
  * validando entrada de fechas
  IF (!EMPTY(EVALUATE('fecha1'))) AND (!EMPTY(EVALUATE('fecha2')))
    * validando fechas
    IF fecha1 < fecha2
      * numero de dias habilies
      num=0
      * dias entre 2 fechas
      dias=(fecha2-fecha1)+1
      * para sumar un dia a la fecha inicial
      feccom=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
      * contando los dias habiles
      FOR i=1 TO dias
        * contando sin incluir a sabados y domingos
        IF !INLIST(DOW(feccom),1,7)
          num=num+1
        ENDIF
        * restando las fechas de dias libres entre semana.
        IF SEEK(feccom) AND INLIST(DOW(feccom),2,3,4,5,6)
          num=num-1
        ENDIF
        *incrementa la fecha
        feccom=feccom+1
      ENDFOR
      * retorna el numero de dias habiles entre esas fechas
      USE IN diainabil
      RETURN num
    ELSE
      * eror en fecha
      RETURN .F.
    ENDIF
  ELSE
    * error en tipo de datos
    RETURN .F.
  ENDIF
ENDFUNC

Emmanuel Nuñez Sanchez

1 comentario :

  1. ¿Cuál es la estructura de la tabla de los días festivos?

    ResponderEliminar