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
67 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é 8642 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.


Publicité

Les pubs en cours :

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