ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

calcul divers, heurs de nuits, jours fériès, test périodes etc...   



L'auteur

eric leissler
France France
Membre Simple
# 0000002784
enregistré le 06/03/2010
http://www.aumeric.fr
68 ans
LEISSLER Eric
85290 MORTAGNE SUR SEVRE
de la société AUMERIC LOGICIELS
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation

calcul divers, heurs de nuits, jours fériès, test périodes etc...
# 0000000798
ajouté le 25/05/2011 12:47:09 et modifié le 25/05/2011
consulté 9036 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0
FPW 2.6

Description

Bonjour à toutes et à tous

j'ai retrouvé ca dans mes vielleries alors peut être que cela peut servir à quelqun !

voici plusieurs fonctions

 

function

dift

*!* syntaxe d'appel : dift("01:00:00","00:40:00") --> "0000:20:00"

*!* retourne la différence entre une heure de début et une heure de fin

*!* ex : hdebut=time()

*!* select champs1,champs2 from madatabase!matable where monchamx="truc"

*!* hfin=time()

*!* ? " J'ai fait ma requête en "+ dift(hfin,hdebut)

Function

temvern

*!* syntaxe d'appel : temvern(time) ---> 42321.0000 pour 11 h 45 21 ''

*!* retourne l'heure en forme de nombre de secondes écoulées depuis 00 h 00 m 00 s

*!**************************************************

Function

nvertem

*!* syntaxe d'appel : nvertem(42321.0000) ----> "00011:45:21"

*!* retourne l'heure en forme de nombre de secondes écoulées depuis 00 h 00 m 00 s

*!**************************************************

Function

nombrepage()

*!* syntaxe d'appel : nombrepage()

*!* retourne le nombre de page d'un état

*!* A placer dans un objet en tête d'état

*!**************************************************

Function

editstruct

*!* syntaxe d'appel : editstruct()

*!* retourne la structure des tables du dossier courant dans un fichier structuredestables.txt

*!**************************************************

Function

calcheurnuit

*!* syntaxe d'appel : calcheurnuit("15:00:00","24:50:00","22:00",06:00") -->> "02:50:00"

*!* retourne le temps effectué en période de nuit

*!* IMPORTANT: mettre le début et la fin des heures de nuits sous la forme "HH:MM"

*!**************************************************

Function

mi_nutes(hm)

*!* syntaxe d'appel : mi_nutes("10:00:00") -->> 600.00

*!* retourne le nombre de mintues d'un horaire sous la forme "HH:MM:SS"

*!**************************************************

Function

toujourspositif(monparam)

*!* syntaxe d'appel : toujourspositif(-230) --> 230

*!* retourne le nombre toujours positif

*!**************************************************

Function

testperiode

*!* syntaxe d'appel : testperiode(ctod("01/06/2003"),ctod("03/07/2003"),ctod("15/06/2003"),ctod("15/09/2003"))

*!* retourne le nombre vrai (.t.) si une période et contenue dans une autre et faux(.f.) si elle ne l'est pas

*!*

*!* ex un contrat du 01/06/2033 au 03/07/2003 possède t il des jours dans la période du 15/06/2003 au 15/09/2003

*!*

*!**************************************************

Function

JOUVRES( ma_DATEDEB,ma_DATEFIN)

*!* syntaxe d'appel : jouvres(ctod("01/06/2003"),ctod("03/07/2003")) --> 24

*!* retourne le nombre de jour ouvrés dans la période des deux dates fournies en paramètres

*!**************************************************

Bonne programmations à tous

Eric

Code source :


FUNCTION dift

*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 08/2000
*!*
*!*
*!*  syntaxe d'appel : dift("01:00:00","00:40:00")  --> "0000:20:00"
*!*   retourne la différence entre une heure de début et une heure de fin
*!*  ex :   hdebut=time()
*!*      select champs1,champs2 from madatabase!matable where monchamx="truc"
*!*       hfin=time()
*!*       ? " J'ai fait ma requête en "+ dift(hfin,hdebut)
*!*
*!**************************************************
Parameters t1,t2
Local heu,min1,s,h2,min2,sec2,r,rh1,rs1,rh,rm,rs,retour
If Inlist("",Alltrim(t1),Alltrim(t2))
  Return ""
Endif
m.rh=0
m.rm=0
m.rs=0
m.heu=Substr(t1,1,(At(":",t1)-1))
m.min1=Substr(t1,4,2)
m.s=Substr(t1,7,2)
m.heu=Val(heu)
m.min1=Val(min1)
m.s=Val(s)
m.heu=heu*60
m.min1=min1*60
m.s=s+min1+(heu*60)
m.h2=Substr(t2,1,(At(":",t2)-1))
m.min2=Substr(t2,4,2)
m.sec2=Substr(t2,7,2)
m.h2=Val(h2)
m.min2=Val(min2)
m.sec2=Val(sec2)
m.h2=h2*60
m.min2=min2*60
m.sec2=sec2+min2+(h2*60)
If m.sec2>m.s
  m.r=m.sec2-m.s
Else
  m.r=m.s-m.sec2
Endif
m.retour=nvertem(m.r)
Return m.retour


Function temvern
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 08/2000
*!*
*!*
*!*  syntaxe d'appel : temvern(time)     ---> 42321.0000 pour 11 h 45 21 ''
*!*   retourne l'heure en forme de nombre de secondes écoulées depuis 00 h 00 m 00 s
*!*
*!*
*!*
*!**************************************************
Parameters temp1
m.temp1=Alltrim(m.temp1)
Local s,m,h,retour
m.s=Substr(m.temp1,Len(m.temp1)-1,2)
m.s=Val(m.s)
m.m=Substr(m.temp1,Len(m.temp1)-4,2)
m.m=Val(m.m)*60
m.h=Substr(m.temp1,1,Len(m.temp1)-6)
m.h=Val(m.h)*3600
m.retour=m.h+m.m+m.s
Return m.retour


Function nvertem
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 08/2000
*!*
*!*
*!*  syntaxe d'appel : nvertem(42321.0000) ---->  "00011:45:21"
*!*   retourne l'heure en forme de nombre de secondes écoulées depuis 00 h 00 m 00 s
*!*
*!*
*!*
*!**************************************************
Parameters temp1
temp1=Int(temp1)
Local s,m,h,resth,restm
m.h=Int(m.temp1/3600)
m.resth=Mod(m.temp1,3600)
m.m=Int((m.resth)/60)
m.restm=Mod(m.m,60)
m.s=Int(Mod(m.resth,60))
Return Padl(m.h,5,"0")+":"+Padl(m.m,2,"0")+":"+Padl(m.s,2,"0")











Function nombrepage()
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 08/2000
*!*
*!*
*!*  syntaxe d'appel : nombrepage()
*!*   retourne le nombre de page d'un état
*!*   A placer dans un objet en tête d'état
*!*
*!*
*!**************************************************
Local nenr,retour
m.nenr=Recno()
Go Bottom
m.retour= _Pageno
Go nenr
Return m.retour




Function editstruct
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 05/1996
*!*
*!*
*!*  syntaxe d'appel : editstruct()
*!*   retourne la structure des tables du dossier courant dans un fichier structuredestables.txt
*!*
*!*
*!*
*!**************************************************
Local a_tableau,cl_num,i
Dimension a_tableau(1,10)
cl_num=Adir(a_tableau,"*.dbf")
Asort(a_tableau,1)

Set Printer To structuredestables.txt
Set Print On
For i = 1 To cl_num
  If ! Empty(a_tableau(i,1))
    Use (a_tableau(i,1)) In 0 Shared Alias toto
    Select toto
    Display Structure Noconsole  To Print
    Use
  Else
    Exit
  Endif
Next i
Set Print Off
Set Printer To
Return











Function calcheurnuit

*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 04/2002
*!*
*!*
*!*  syntaxe d'appel : calcheurnuit("15:00:00","24:50:00","22:00",06:00")  -->> "02:50:00"

*!*   retourne le temps effectué en période de nuit
*!*  IMPORTANT: mettre le début  et la fin des heures de nuits sous la forme  "HH:MM"
*!*
*!*
*!**************************************************

Parameters hdeb,hfin,debnuit,finnuit
Local retour,minuitdeb,minuitfin,hfin31
minuitdeb=temvern("00:00")
minuitfin=temvern("24:00")
hdeb=temvern(Left(hdeb,5))
hfin=temvern(Left(hfin,5))
debnuit=temvern(debnuit)
finnuit=temvern(finnuit)
hfin31= minuitfin+finnuit
retour=nvertem(0)
Do Case
Case Between(hdeb,debnuit,minuitfin) .AndBetween(hfin,debnuit,minuitfin)
  retour=nvertem(hfin-hdeb)
Case Between(hdeb,minuitdeb,finnuit) .AndBetween(hfin,minuitdeb,finnuit)
  retour=nvertem(hfin-hdeb)
Case Between(hdeb,debnuit,minuitfin) .AndBetween(hfin,minuitdeb,finnuit)
  retour=nvertem((minuitfin-hdeb)+hfin-minuitdeb)
Case Between(hfin,debnuit,minuitfin) .And. hdeb <debnuit
  retour=nvertem(hfin-debnuit)
Case Between(hfin,minuitdeb,finnuit)  .And. hdeb <debnuit
  retour=nvertem(hfin-minuitdeb+ (minuitfin-debnuit))
Case hfin >  finnuit .And. hfin<debnuit    .And.  Between(hdeb,minuitdeb,finnuit)
  retour=nvertem(finnuit-hdeb)
Case hfin > finnuit .And. hfin<debnuit .And.Between(hdeb,debnuit,minuitfin)
  retour=nvertem((finnuit-minuitdeb)+(minuitfin-hdeb))
Case hdeb<debnuit .And. hfin>finnuit .And. hfin<hdeb
  retour=nvertem((finnuit-minuitdeb)+(minuitfin-debnuit))
Case Between(hfin,minuitfin,hfin31) .AndBetween(hdeb,debnuit,minuitfin)
  retour = nvertem(hfin-minuitfin  +(minuitfin-hdeb))
Case Between(hfin,minuitfin,hfin31).And. hdeb< debnuit .And. hdeb > finnuit
  retour = nvertem(hfin-minuitfin  +(minuitfin-debnuit))
Case Between(hfin,minuitfin,hfin31).And. hdeb< debnuit .And. hdeb <= finnuit
  retour = nvertem(hfin-minuitfin  -(hdeb-minuitdeb))


*-
Case hfin > hfin31 .AndBetween(hdeb,debnuit,minuitfin)
  retour = nvertem(finnuit-minuitfin  +(minuitfin-hdeb))
Case hfin > hfin31 .And. hdeb< debnuit
  retour = nvertem(minuitfin-debnuit +(minuitfin-debnuit))




Endcase
Return Righ(retour,5)+":00"

Function mi_nutes(hm)
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 04/2002
*!*
*!*
*!*  syntaxe d'appel :   mi_nutes("10:00:00") -->> 600.00
*!*   retourne le nombre de mintues d'un horaire sous la forme "HH:MM:SS"
*!*
*!*
*!*
*!**************************************************


Return (Val(Left(hm,2))*60)+Val(Substr(hm,4,2))











Function toujourspositif(monparam)
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 03/1995
*!*
*!*
*!*  syntaxe d'appel :   toujourspositif(-230)  --> 230
*!*   retourne le nombre toujours positif
*!*
*!*
*!*
*!**************************************************

Local retour
If monparam <0
  retour=monparam*-1
Else
  retour=monparam
Endif

Return retour



Function testperiode
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 06/2003
*!*
*!*
*!*  syntaxe d'appel :    testperiode(ctod("01/06/2003"),ctod("03/07/2003"),ctod("15/06/2003"),ctod("15/09/2003"))
*!*   retourne le nombre vrai (.t.) si une période et contenue dans une autre et faux(.f.) si elle ne l'est pas
*!*
*!*   ex un contrat du 01/06/2033 au 03/07/2003  possède t il des jours dans la période du 15/06/2003 au 15/09/2003
*!*
*!**************************************************


Parameters datedebutcontrat, datefincontrat, datedébutmois,datefinmois

Local cl_logique
cl_logique=.F.
If Parameters()=4
  Do Case
  Case datedebutcontrat > datefinmois
    cl_logique=.F.
  Case datefincontrat < datedébutmois
    cl_logique=.F.

  Otherwise
    cl_logique=.T.
  Endcase
Endif
Return cl_logique



Function JOUVRES( ma_DATEDEB,ma_DATEFIN)
*!* ------------------------- FONCTION AUMERIC
*!* Eric LEISSLER : 06/2003
*!*
*!*
*!*  syntaxe d'appel :    jouvres(ctod("01/06/2003"),ctod("03/07/2003")) --> 24
*!*   retourne le nombre de jour ouvrés dans la période des deux dates fournies en paramètres
*!*
*!*
*!*
*!**************************************************
Local i,retour,Comb,j

retour=0
Comb=(ma_DATEFIN-ma_DATEDEB+1)
For i=1 To Comb
  j=i-1
  retour=retour+Iif(Between(Dow(ma_DATEDEB+j),2,6),1,0)
Next i
Return retour

Commentaires
le 25/05/2011, Mike Gagnon a écrit :
24:50?
le 26/05/2011, eric leissler a écrit :
bonjour mike
ou 24:50
les utilisateurs sont habitués à mettre 24:50 pour 00:50 et 26:50 pour 02:50;
Ca leur evite des confusions.
il me semble que avec 00:50 ca fonctonnait aussi mais je ne m'en rappelle plus!

le 24/07/2014, Damonzon a écrit :
Ce que vous venez de publier me rappelle aussi un vieux souvenir. avec le Cobol, j'avais implanté un calendrier de 10 ans allant de 1988 à 1998. Ca me permettait de saisir les heures supplémentaires efféctuées selon le jour ouvrable et/ou férié. avec VFP9 je n'ai pas essayé parce que j'ai pas trouvé l'approche, si vous avez une idée ou une solution elle serait la bienvenue.
Merci d'avance.


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3