Primer dia Habil de mes

788 views
Skip to first unread message

Dario German Fleitas

unread,
Nov 2, 2010, 8:50:32 AM11/2/10
to Comunidad de Visual Foxpro en Español
Estimados,,, consulto si algeuin ideo la forma de saber cual es el 1º
dia habil de cada mes, explico,,, debo ejecutar una rutina que
realizada determinado pase de informacion de una tabla a otra solo el
primer dia habil de mes, gracias.-

Walter R. Ojeda Valiente

unread,
Nov 2, 2010, 9:15:51 AM11/2/10
to publice...@googlegroups.com
Hola Darío

Para eso necesitas tener una tabla (o un vector en memoria) con los datos de todos los feriados cuyos días sean 1, 2, 3, 4.

Con las funciones DOW() o CDOW() podrás saber si una fecha cae en Sábado o Domingo.

Haces una función que reciba como parámetro el número del mes y del año y que:

a. Establezca como día buscado el día 1
b. busque en la tabla (o en el vector) si el día buscado está allí
c. si no está, usas la función DOW() o CDOW() para saber si es Sábado o Domingo.
d. Si está en la tabla (o vector) o es Sábado o es Domingo, incrementas el día buscado en 1 y repites desde b.

Cuando el ciclo termine, tendrás en la variable "día buscado" el primer día hábil del mes.

Saludos.

Walter.

Carlos Miguel FARIAS

unread,
Nov 2, 2010, 9:26:17 AM11/2/10
to publice...@googlegroups.com
Estimado Dario:
El primer dia del mes (y en exclusiva para vos, que no se enteren los otros) es el 1 (primero).
Si tomas dicha fecha y le aplicas la función DOW, te dice que dia de la semana es,
a) si el valor te da entre 2 y 6, es dia de semana (habil, en principio),
b) Si te da 1 (domingo) sumas 1 dia a tu fecha actual (fecha + 1, viste en eso fox es complejo),
c) si te da 7, le sumas 2 a la fecha.
con la fecha resultante despues de a, b o c, obtienes un dia fuera del fin de semana, o sea, potencialmente habil.
d) Luego deberás verificar que no sea algun dia feriado (festivo, religioso, etc.).
Si no es feriado, es tu primer dia habil y YA ESTA!!!
Si resulta en un feriado, y la nueva fecha (casos b o c) o la original (caso a), verificas si su DOW da entre 2 y 5, y le sumas 1 dia, si da 6, le sumas 3, a dicha fecha le volves a aplicar desde D, o sea

* Funcion calcula primer dia habil del mes
FUNCTION  PrimerDiaHabilMes( tdFecha AS DATE ) AS DATE
LOCAL liMes AS INTEGER
LOCAL ARRAY laFeriadosMes[1]
liMes = MONTH( tdFecha )
FeriadosMes( @laFeriadosMes, liMes ) && Otienes lista de Feriados
DO WHILE .T.
   liDia = DOW( tdFecha )
   DO CASE
      CASE liDia==1  && Es Domingo, paso al lunes
          tdFecha = tdFecha + 1
      CASE liDia==7  && Es Sabado, paso al lunes
          tdFecha = tdFecha + 2
      CASE ASCAN( laFeriadosMes, DAY( tdFecha ) )>0 && Es feriado
          tdFecha = tdFecha  + IIF( liDia<6, 1, 3 )  && pasa al dia siguiente o al lunes siguiente
      OTHERWISE && SI no es domingo, ni sabado ni feriado, es habil
          EXIT
      ENDCASE
ENDDO
RETURN tdFecha  && Devuelve fecha primer dia habil del mes

Fijate si te sirve, si funciona (no probe) avisa, a otros puede servirle
Reply all
Reply to author
Forward
0 new messages