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