FoxPro/Visual FoxPro - CONTABILIZAR DIAS

 
Vista:

CONTABILIZAR DIAS

Publicado por KHRISTIAN (1 intervención) el 07/10/2010 16:28:20
Estoy desarrollando una aplicacion en visual fox pro en que se contabilizaran los dias de un periodo:

Numero de dias=Fecha de inicio del periodo - Fecha de termino del periodo

La cuestion tambien es que no debe contar los dias sabados ni domingos ni los dias que esten considerados como vacaciones
nececito saber como hacer lo anterior.

Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

CONTABILIZAR DIAS

Publicado por Mauricio (1541 intervenciones) el 07/10/2010 16:53:18
Esta rutina la puedes encontrra en portal fox, en rutinas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
*
*
*  WEEKDAYS.PRG
*  Return the number of days that are MONDAY - FRIDAY
*  in the passed date range.
*  ERROR 11 when called with incorrect parameters.
*
*  Author:
*  Mike Yearwood,
*      with input from various
*      UniversalThread members.
*  Martina Jindrova for the DATETIME modifications.
*
*  USAGE:
*    ?WEEKDAYS({^2004-05-01},{^2004-05-31})
*
*  OR:
*    m.ldFrom = {^2004-05-01}
*    m.ldTo = {^2004-05-31}
*    m.lnWeekdays = WEEKDAYS(m.ldFrom, m.ldTo)
*    ?"The number of weekdays is: " + ALLTRIM(STR(m.luWeekdays)) + "."
*
*  RETURNS:
*    A numeric value for the number of weekdays.
*
*  lParameters
*     tdFrom (R)     Start of the date range.
*     tdTo   (R)     End of the date range.
*
LPARAMETERS m.tdFrom, m.tdTo
IF INLIST(VARTYPE(m.tdFrom),"D","T") AND INLIST(VARTYPE(m.tdTo),"D","T")
ELSE
  ERROR 11
ENDIF
 
LOCAL ;
  m.lnDays, ;
  m.lnDOW
 
*Determine the total possible number of days.
m.lnDays = ABS(IIF(VARTYPE(m.tdFrom)="D",m.tdFrom,TTOD(m.tdFrom)) -;
               IIF(VARTYPE(m.tdTo)="D",m.tdTo,TTOD(m.tdTo))) + 1
 
*Determine the number of the day of the week.
m.lnDOW = DOW(MIN(m.tdFrom,m.tdTo),2)
 
*Subtract the weekend (Sat/Sun) days (2 of every 7).
*Also remove the difference between the
*"start" date and the closest Monday.
RETURN m.lnDays - INT(m.lnDays / 7) * 2 ;
	- IIF( m.lnDOW = 7, ;
	     SIGN(m.lnDays % 7), ;
	     SIGN(m.lnDOW - 7 + (m.lnDays % 7)) + 1)

Espero que sea lo que buscas!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:CONTABILIZAR DIAS

Publicado por Juanma Cruz (512 intervenciones) el 07/10/2010 17:39:20
Elegante manera de resolverlo. :)

Ahora sólo faltarían los días feriados o vacaciones. Tendrías que tener una tabla con las fechas señaladas y luego compararlas con tu rango de fechas para saber si caen dentro y hay que restar el correspondiente número de días.

A tomar en cuenta que si caben en sábado o domingo tampoco no deberían restarse, excepto si por la legislación local se traslada al viernes o lunes más cercanos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONTABILIZAR DIAS

Publicado por Azimut (1 intervención) el 11/03/2019 10:07:29
Perfecto, me valió tu rutina.

Gracias.


Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:CONTABILIZAR DIAS

Publicado por Juan286 (185 intervenciones) el 07/10/2010 17:24:53
Mmmm la unica forma que se me ocurre es asi,.

Mira eso esta bien tiene primero k realizar la resta de l dia de inicio por el final. ya con esto ahora debes calcular cantas semanas son tomando en cuata que cada semana tiene 7 dias ya sea k dividas el total de dias entre 7.

te preguntaras por esto pues por k con el resultado ahora sabremos cuantas semanas son ahora multiplica ese resultado por 2 y sabras los dias solo tiene k restar los esos dias alos dias calculados con anterioridad y listo.

Con respecto a lo dias feriados la verdad necesitarias crear un especie de variable para k cuanta lo detecte el programa reste ese dias.

PUBLIC dfecha
dFecha = DATE()
thisform.text1.Value = dfecha

Public dfecha
PUBLIC ffecha
PUBLIC fcontar

ffecha = ctod(thisform.text2.Value)

thisform.text3.Value = ffecha - dfecha

thisform.text4.Value = INT(thisform.text3.value/7)

fcontar = (thisform.text4.value*2)

thisform.text5.Value = thisform.text3.Value - fcontar

seria algo asi perdon por el desorden pero no tenia tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

CONTABILIZAR DIAS

Publicado por Mauricio (1541 intervenciones) el 07/10/2010 23:25:14
Ahora fijense en este mes en especial pues esto sucede cada cierto largo periodo de tiempo: en este mes tendremos 5 viernes, 5 sabados y 5 domingos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar