Función días hábiles

717 views
Skip to first unread message

Ricardo Pina

unread,
Oct 6, 2015, 11:22:48 AM10/6/15
to Grupo VFP
Alguien ya pensó alguna función para determinar la cantidad de días corridos que hay a partir de una fecha y la cantidad de días hábiles como parámetros o su inversa.
Mi neurona quedaría muy agradecida :-))

Saludos



--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Carlos Miguel FARIAS

unread,
Oct 6, 2015, 11:32:52 AM10/6/15
to Grupo Fox

Julio Cesar Medrano Melgar

unread,
Oct 6, 2015, 11:35:50 AM10/6/15
to Grupofox
La funcion que utilizo :

PARAMETERS fdesde,fhasta
***y numero de dias laborables tomando en cuenta sabados tambien

xxinimes=VAL(SYS(11,fdesde)) &&dia juliano
xxfinquin=VAL(SYS(11,fhasta)) &&dia juliano
xxdom=0
xxlab=0
FOR jj=xxinimes TO xxfinquin
xxfec=SYS(10,jj) &&de numero a fecha
xxfec=CTOD(xxfec)
IF DOW(xxfec)=1 &&si es domingo
xxdom=xxdom+1
ELSE &&dia laborable
xxlab=xxlab+1
ENDIF
ENDFOR 

RETURN xxlab

Saludos
 
Lic. Julio Medrano






From: ric...@gmail.com
Date: Tue, 6 Oct 2015 12:22:30 -0300
Subject: [vfp] Función días hábiles
To: publice...@googlegroups.com

Ricardo Pina

unread,
Oct 6, 2015, 11:49:17 AM10/6/15
to Grupo VFP
jaja

No se si subestime a google o sobrevaloré al grupo!!
Gracias, ahora miro los link y trato de ladear la cabeza

Saludos

Ricardo Pina

unread,
Oct 6, 2015, 11:51:17 AM10/6/15
to Grupo VFP
Gracias Julio cesar, veo como tomar la idea para ir adaptando a mi necesidad.

Saludos

Ricardo Pina

unread,
Oct 6, 2015, 1:32:34 PM10/6/15
to Grupo VFP
Hola

Llegue a esta función 

lhabil = .t. 
fecha = DATE(2015,11,1)
ndias = 16
diasok=Diahabilacorrido(fecha,ndias,lhabil)



FUNCTION Diahabilacorrido
LPARAMETERS tdfchini,tndias,tlhabil
LOCAL lndiaretorno,ldfecha,sg
sg=IIF(tlhabil,1,-1)
lndiaretorno = tndias + (IIF(tlhabil,CEILING(tndias / 7),FLOOR(tndias / 7)) * 2 + ICASE(DOW(tdfchini) = 1,1,DOW(tdfchini) = 7,2,0) ) * sg
RETURN lndiaretorno
ENDFUNC

Gracias por las ideas.
Saludos



Víctor Hugo Espínola Domínguez

unread,
Oct 6, 2015, 3:22:36 PM10/6/15
to publice...@googlegroups.com
Hola Ricardo

Prueba esta función:

Function Dias(tdDesde, tnDias, tlHabil)

Local lnDias, lnDomingos

lnDomingos = Floor((Dow(m.tdDesde, 1) + m.tnDias - 1) / 7) + Iif(Dow(m.tdDesde, 1) = 1, 1, 0)
lnDias     = m.tnDias - m.lnDomingos * Iif(m.tlHabil, 1, 0)

Return m.lnDias


Saludos,
Víctor.
Lambaré - Paraguay.

Ricardo Pina

unread,
Oct 6, 2015, 4:20:55 PM10/6/15
to Grupo VFP
Hola Victor

Se ve bien, dejame probarla.

Gracias

Ricardo Pina

unread,
Oct 7, 2015, 10:19:58 AM10/7/15
to Grupo VFP
Hola

Recién pude hacer  un tiempo para probar la Función de Victor


Function Dias(tdDesde, tnDias, tlHabil)

Local lnDias, lnDomingos

lnDomingos = Floor((Dow(m.tdDesde, 1) + m.tnDias - 1) / 7) + Iif(Dow(m.tdDesde, 1) = 1, 1, 0)
lnDias     = m.tnDias - m.lnDomingos * Iif(m.tlHabil, -1, 1)

Return m.lnDias

Le hice un pequeño retoque para que cumpla con mi intención de realizar la función inversa según el tercer parámetro que para llegar de días corridos a hábiles.
funciona de diez, pero tomando solamente como inhábil los domingos, la otra función que yo había publicado incluye los días sábado también pero en forma fija, voy a ver si puedo hacer un mix y contemplar ambos casos con un nuevo parámetro. :-)

Saludos


Elides Paredes

unread,
Oct 7, 2015, 2:02:30 PM10/7/15
to Comunidad de Visual Foxpro en Español
Estimado amigo Ricardo.

Hace mucho tiempo tenía ese problema para calcular las estadísticas del taller y gracias a Dios conseguí idear una solución muy sencilla. Espero te sea útil. Y nada como encontrarlo hecho, me consta porque aquí he recibido mucho de eso. 

El principio es muy simple, para saber que días son feriados o no laborables (por ejemplo sábados y Domingos), Simplemente debes guardar los días feriados en una tabla, hace tiempo también tomé del Internet alguien que hizo un calendario donde se podían incluir esos días feriados con solo hacer click sobre la fecha.

En el formulario ( que está en archivo comprimido anexo) hice un formulario con un simple botón que hace lo que necesitas: cuenta los días feriados entre dos fechas. Pero también necesitas la tabla donde se guardan los feriados y el formulario que los guarda. (por eso también los anexo)

Solo es necesario cambiar la imagen del botón porque yo lo coloqué en una carpeta creada por mi, pero ahí también anexo esa imagen porque a mi me gusta esa..jajaja..

Saludos 
Espero haber sido útil

Elides Paredes
Barquisimeto Venezuela
Pd: te anexo un colirio para los ojos también esos que refrescan el espíritu.

 

bella.jpg
Feriados._zip

Víctor Hugo Espínola Domínguez

unread,
Oct 7, 2015, 2:29:45 PM10/7/15
to publice...@googlegroups.com
Hola Ricardo

Ahora incluye sábados:
Function Dias(tdDesde, tnDias, tlHabil)

Local lnDias, lnSabados, lnDomingos

lnSabados  = Floor((Dow(m.tdDesde, 1) + m.tnDias - iif(Dow(m.tdDesde, 1) = 7, 7, 0)) / 7) ;
                    + Iif(Dow(m.tdDesde, 1) = 7, 1, 0)

lnDomingos = Floor((Dow(m.tdDesde, 1) + m.tnDias - 1) / 7) + Iif(Dow(m.tdDesde, 1) = 1, 1, 0)
lnDias       = m.tnDias - m.lnDomingos * Iif(m.tlHabil, 1, 0) - m.lnSabados * Iif(m.tlHabil, 1, 0)

MESSAGEBOX("Sabados: " + TRANSFORM(m.lnSabados) + " " + ;
           "Domingos: " + TRANSFORM(m.lnDomingos))

Return m.lnDias


Saludos,
Víctor.
Lambaré - Paraguay.


Jose Mario

unread,
Oct 7, 2015, 4:39:49 PM10/7/15
to Comunidad de Visual Foxpro en Español
lindas las piernas

Douglas Sánchez

unread,
Oct 7, 2015, 5:05:12 PM10/7/15
to publice...@googlegroups.com

Hola que tal Victor, saludes

Como se usa esta funcion necesito hacer algo parecido a lo de Ricardo, gracias
                  =Dias(date(), tndas?          tlhabil?   estos dos ultimos que son enteros o fechas.
Function Dias(tdDesde, tnDias, tlHabil)

Dsanchez


Ricardo Pina

unread,
Oct 7, 2015, 6:09:55 PM10/7/15
to Grupo VFP
Hola Elides

El tema de los días feriados definitivamente deben tratarse desde una tabla y se resuelven con una consulta sql
En esta oportunidad estoy buscando otra cosa.
Mañana le echaré un ojo al adjunto, me refiero al zip, jajaj

Gracias

Ricardo Pina

unread,
Oct 7, 2015, 6:21:25 PM10/7/15
to Grupo VFP
Hola Victor

Era solo un comentario, si mañana dispongo de tiempo la completo también

Gracias

 

Ricardo Pina

unread,
Oct 7, 2015, 6:23:49 PM10/7/15
to Grupo VFP

Jose

Las mejores :-)


Imágenes integradas 1

Ricardo Pina

unread,
Oct 7, 2015, 6:42:35 PM10/7/15
to Grupo VFP
Hola Douglas

Te comento la Idea

tdDesde: Fecha Inicial 
tnDias: Cantidad de días
tlHabil: Flag para invertir el cálculo

Con Flag en  True la función tiene que devolver la cantidad de días habiles que desde la fecha inicio (tdFecha) considerando la cantidad de días (tnDias) como corridos
Ej: =Dias(date(2015,11,1),22,,.T.) devuelve 16
Con el Flag en False correspondería el cálculo de los días corridos y considerando la cantidad de días (tnDias) como hábiles
Ej: =Dias(date(2015,11,1),16,,.T.) devuelve 22

Saludos


Elides Paredes

unread,
Oct 7, 2015, 6:44:54 PM10/7/15
to Comunidad de Visual Foxpro en Español

Amigo Ricardo, Olvidé comentar que en la misma estructura de control (algoritmo del botón) cuento las horas de trabajos previstas, (entre las fechas establecidas) , como mencioné está en un formulario que sirve para calcular estadísticas del taller.. Pero en cuanto a los días feriados, revísalo y te darás cuenta que funciona muy bien a pesar de ser muy sencillo. 

Estableces una fecha de inicio y fin y el algoritmo busca cada día y va contando los hábiles (de Lunes a Viernes y que no estén incluídos en la tabla de feriados.

El formulario feriados con hacer click sobre el día ( en el calendario lo agrega a la tabla) y pide una descripción del día. Y si le vuelves a hacer click pregunta si deseas eliminarlo. También lo resalta cambiándole el color y cambia el toottips, de manera que al pasar el cursor sobre el día muestra la fecha que se celebra.

El control check si se activa, va mostrando cada día para que el usuario vea si es feriado, si es sábado o Domingo. 

En resumen me parece algo muy sencillo de llevar (para el usuario) pero si alguien quiere agregarle algo, pues todos son bienvenidos, eso es lo que nos hace mejorar a todos.

Ah.. ! por cierto no me gustan las piernas masculinas..jajaja..


Saludos, 
Elides Paredes
Barquisimeto Venezuela.

 

Ricardo Pina

unread,
Oct 7, 2015, 6:52:31 PM10/7/15
to Grupo VFP
Hola Elides

Me hiciste dar curiosidad, ahora lo descargo para verlo jeje

En cuanto a las fotos adjuntas, a mi particularmente me gusta mucho la mujer de Albert Einsten

Saludos



Víctor Hugo Espínola Domínguez

unread,
Oct 7, 2015, 11:23:38 PM10/7/15
to publice...@googlegroups.com
Esta otra es mejor:

Function Dias(tdDesde, tnDias, tlHabil)

Local lnDias, lnSabados, lnDomingos

lnSabados  = Floor((Dow(m.tdDesde, 7) + m.tnDias - 1) / 7) + Iif(Dow(m.tdDesde, 7) = 1, 1, 0)
lnDomingos = Floor((Dow(m.tdDesde, 1) + m.tnDias - 1) / 7) + Iif(Dow(m.tdDesde, 1) = 1, 1, 0)
lnDias   = m.tnDias - m.lnDomingos * Iif(m.tlHabil, 1, 0) - m.lnSabados * Iif(m.tlHabil, 1, 0)

MESSAGEBOX("Sabados: " + TRANSFORM(m.lnSabados) + " " + ;
  "Domingos: " + TRANSFORM(m.lnDomingos))

Return m.lnDias

Noten en qué difieren los cálculos de lnSábados y lnDomingos


Saludos,
Víctor.
Lambaré - Paraguay.


Mario Oviedo

unread,
Oct 8, 2015, 9:45:16 AM10/8/15
to publice...@googlegroups.com
ricardo esas eran magicas como el jorge magico gonzalez de el salvador, 

Carlos Miguel FARIAS

unread,
Oct 8, 2015, 1:18:19 PM10/8/15
to Grupo Fox
Mario, no se verá, pero demasiada cantidad de "piernas" para mi gusto.

Saudos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad.
Que la Fuerza los acompañe, porque cuando el Diego agarre la Fifa... se terminan los ravioles

Reply all
Reply to author
Forward
0 new messages