IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

cumul des heures de travail


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut cumul des heures de travail
    Bonjour,

    Je veut poser une question et la voici :

    Dans mon programme je veut avoir un cumul d’heure ( la somme d’heure de travail d’un employé pour un mois ) mais à chaque fois la somme dépasse 24 heures elle revient à 0 heures

    Par exemple j’ai normalement la somme = 30 heures mais dans le champ ‘SumHTrav’ qui contient la somme (qui est de type Time) m’afiche 06 heures alors que je peux avoir j’usqu’à 133 heures par exemple. Je ne sais pas est ce que c’est le champ qu’il ne faut pas qu’il soit de type Time ou bien c’est le format du champ ‘SumHTrav’ qu’il faut le changer.

    Parceque j’ai vu dans l’excel quand le format de la cellule est hh :nn j’aurai la même chôse càd au lieu de 30 c’est 06 mais quand je modifie le format de la cellule en [h] :nn j’aurai la bonne somme don peut être il y a une format dans Delphi
    merci

  2. #2
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Tu ne peux pas faire une fonction du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (heure = 24) then jour := jour+1;
    et de ce fait tu auras ce que tu cherches

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Merci pr 7 réponse mais le pb ce n'est pas dans le jour ou ds l'heure; le pb c'est que j'ai une table qui contient les champs suivant : Date(type date), Heure_Début(type time), Heure_Fin(type time) , SHeures_trav(type time); ce dernier il calcule automatiquement le nombre d'heures travaillées ( Heure_fin - Heure_Début) de la journée qui ne dépasse pas 24 heures bien sure, le pb n'est pas lâ, le pb est dans une autre table qui contient le champ SumHeure_Trav (type time) qui calcule la somme des heures travaillées du début de travail (la premiére journée) j'usqu'a la fin du travail (la derniére journée) lâ il fait la somme des valeurs du champ de la premiére table (SHeures_trav);
    1 journée : SHeures_trav = 08:30 h
    1 journée : SHeures_trav = 10:00 h
    1 journée : SHeures_trav = 08:00 h
    1 journée : SHeures_trav = 05:00 h

    et le champ SumHeure_Trav : 31:30 mais moi je trouve ds mon champ SumHeure_Trav 08:00 parceque dé qu'il dépasse 24h il revient à 0 donc
    je ne sais pas est ce que le pb est le format du champ ou bien il y a un pti programme ??????????????,

    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Voilà comment je procède pour les calculs de somme d'heures > à 24 heures:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    uses
      SysUtils;
     
    var
      hh,mm,ss,ms : word;
    begin
      DecodeTime(MaSomme.Time,hh,mm,ss,ms);
      MaDuree := (hh * 60) + mm;
      //...
    end;
    Isa
    Isachat

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    pour être plus clair voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    var  Sum : Double;
     
    Begin
     
    Table1.Edit;
    Sum := 0;
     
    Table1.First;
    While ( not Table1.Eof ) do
    begin
    sum := sum + Table1.FieldValues['HTrav'];
    Table1.Next;
    end;
     
    Table2.Edit;
    Table2.FieldValues['SHTrav']:= sum;
    end;
     
    le pb est dans ce champ  ['SHTrav'] donc je ne sais pas est ce que le pb est dans ce champ ou bien dans sum. merci

  6. #6
    Membre actif

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 210
    Points
    210
    Par défaut
    Salut,
    C'est le calcul des heures qui ne marche pas (> 23 = 0...).
    Dans ta Table2, remplace le type [HTrav], actuellement en Time, par un double... puis calcule la duree:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     uses
      DateUtils;
     var
      iTotalHr, iTotalMn: integer;
      dTime: double;
    ...
      iTotalHr := 0;
      iTotalMn := 0;
      with Table1 do begin	
        while not Eof do begin
          iTotalHr := iTotalHr + HourOf(Table1.FieldValues['HTrav']);
          iTotalMn := iTotalMn + MinuteOf(Table1.FieldValues['HTrav']);
          Next;
        end;   // while
      end;  // with
      if iTotalMn > 59 then begin
        Inc(iTotalHr, iTotalMn div 60);
        iTotalMn := iTotalMn mod 60;
      end;  // if
      dTime := TH + (TMn / 100);
     
      with Table2 do begin
        Edit;
        FieldValues['SHTrav']:= dTime;
        Post;
      end;  // with
    Par exemple...
    @+
    Fabrice

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    slt, Merci beaucoup, c'est bon maintenant il fait le calcul et le résultat est par exemple 145,35 càd 145 heure et 35 minutes.
    dans la suite du programme il ya un cumul par type de travail donc là je trouve un autre pb, par exemple :
    Type_Travail SHTrav
    Trav1 30,45
    Trav1 96,30

    le cumul de ces deux est= 126,75 (il fait la somme des nombres) alors que je veu un cumul qui sera = 127,15. ou est le pb? et que dois je faire?

    merci .

  8. #8
    Membre actif

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 210
    Points
    210
    Par défaut
    Salut,
    Tes minutes dans 30.45, donc 45 sont des 100e d'heure ... il faut les convertir en 60e d'heure.
    Tu peux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function AddTime(dTime1,dTime2: double): double;
     var
    	wMn1, wMn2: word;
     begin
    	wMn1 := Round(Frac(dTime1) * 100);
    	wMn2 := Round(Frac(dTime2) * 100);
    	wMn1 := wMn1 + wMn2;
    	wMn2 := wMn1 mod 60;
    	wMn1 := wMn1 div 60;
    	Result := (Trunc(dTime1 + dTime2) + wMn1) + (wMn2 / 100);
     end;
    @+
    Fabrice

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par laklak
    pour être plus clair voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    var  Sum : Double;
     
    Begin
     
    Table1.Edit;
    Sum := 0;
    ....
    le pb est dans ce champ  ['SHTrav'] donc je ne sais pas est ce que le pb est dans ce champ ou bien dans sum. merci
    ta méthode est bon (pas bon bon.. mais )
    tu n'as qu'as changé comme ta dis MFDev
    remplace le type [HTrav], actuellement en Time, par un double... puis calcule la duree:
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Bjr;
    c'est pour MfDev; j'ai appliquer votre premier programme et ça a marché et comme j'ai déja dis que le résultat est en vergule c'est par exemple 45,30 càd 45 Heures et 30 Minutes Oui c'est bon à ce niveau et je vous remercie, ici j'aurai une table qui contient plusieurs enregistrements, càd plusieurs résultats de dTime, exemple:
    Type_travail dTime
    T1 45,30
    T1 22,20
    T2 180,45
    T1 77,15
    T2 20,10
    T2 70,35
    a partir de là je fais une autre somme qui est par type de travail et normalement j'aurai :
    Type_Travail SumdTime
    T1 145,05 càd 122Heures et 45 Min
    T2 271,30 càd 200Heures et 55 Min
    mais moi j'ai comme résultats comme si il fait la somme des nombres est:
    Type_Travail SumdTime
    T1 144,65
    T2 270,90
    et ce n'est pas ça que je veut et merci .
    [/list]

  11. #11
    Membre actif

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 210
    Points
    210
    Par défaut
    Hmm bizarre, j'ai appliqué mon code à tes calculs, voilà ce que je trouve, copie du mémo résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Memo1
    T1
    45.30 + 22.20 = 67.50
    67.50 + 77.15 = 145.05
    T2
    180.45 + 20.10 = 200.55
    200.55 + 70.35 = 271.30
    Et j'ai utilisé à chaque fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function AddTime(dTime1,dTime2: double): double;
     var
    	wMn1, wMn2: word;
     begin
    	wMn1 := Round(Frac(dTime1) * 100);
    	wMn2 := Round(Frac(dTime2) * 100);
    	wMn1 := wMn1 + wMn2;
    	wMn2 := wMn1 mod 60;
    	wMn1 := wMn1 div 60;
    	Result := (Trunc(dTime1 + dTime2) + wMn1) + (wMn2 / 100);
     end;
    Donc mon code est OK. Cherche où est ton erreur...
    @+
    Fabrice

  12. #12
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Bjr;
    Non non j'ai pas encore appliqué votre 2éme programme ,q'est ce que vous voulez dire par wMn1 et wMn2 dans mon exemple et de dTime1,dTime2 dans mon exemple pour que je puisse appliquer ce programme, parceque moi je fais la somme d'un champ dTime que j'ai déja calculé par le 1er programme que vous m'avez donner, donc je fais whille not eof de la 2éme table(qui contient le champ dTime) et je somme, donc comment faire pour appliquer le 2éme programme dans ce cas . et merci

  13. #13
    Membre actif

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 210
    Points
    210
    Par défaut
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure ...
     var
      Sum: double;
     begin
      ...
      Sum := 0;
      with Table1 do begin
        First;
        While not Eof  do begin
          Sum := AddTime(Sum, FieldValues['HTrav']);
          Next;  
        end;  // while
      end; // with
    @+
    Fabrice

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Bjr;
    Message d'erreur :"Identificateur non déclaré 'AddTime' " ou je dois déclaré AddTime. Merci

  15. #15
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    j'ai oublié de vous dire ôu et comment le déclarer.

  16. #16
    Membre actif

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 210
    Points
    210
    Par défaut
    Cette fonction ne touchant pas de controles fenêtrés, il suffit de la placer au dessus de la fonction qui doit l'appeler, pas de déclaration à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Implementation
    ...
    function AddTime(dTime1,dTime2: double): double;
     var
       wMn1, wMn2: word;
     begin
       wMn1 := Round(Frac(dTime1) * 100);
       wMn2 := Round(Frac(dTime2) * 100);
       wMn1 := wMn1 + wMn2;
       wMn2 := wMn1 mod 60;
       wMn1 := wMn1 div 60;
       Result := (Trunc(dTime1 + dTime2) + wMn1) + (wMn2 / 100);
     end; 
    ...
    procedure TForm1....
     var
      Sum: double;
     begin
      ...
      Sum := 0;
      with Table1 do begin
        First;
        While not Eof  do begin
          Sum := AddTime(Sum, FieldValues['HTrav']);
          Next; 
        end;  // while
      end; // with
    @+
    Fabrice

  17. #17
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    peut etre je suis hor sujet, mais pour facilité les calcul en pêut converit en integer,
    voir timestamp et les autre fonction,
    avec ctrl et clik sur un 'astime' ou 'asdate' d'un field pour aller dans la source de delphi en peut avoir une bonne idée
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  18. #18
    Membre actif

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 210
    Points
    210
    Par défaut
    Cette fonction ne touchant pas de controles fenêtrés, il suffit de la placer AU DESSUS de la fonction qui doit l'appeler ...
    Comme précisé par le post du 16, un peu plus haut...
    @+
    Fabrice

  19. #19
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Bonjour;
    je vous remercie beaucoup ça a marcher trés bien , maintenant et grace a vous je fais mes calculs d'heures bien comme il faut. à la prochaine question.

    A +

  20. #20
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par laklak
    Bonjour;
    je vous remercie beaucoup ça a marcher trés bien , maintenant et grace a vous je fais mes calculs d'heures bien comme il faut. à la prochaine question.

    A +
    Ne pas oublier le dans ces cas-là
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2013] Application pour le Suivi des heures de travail
    Par Malick dans le forum Modélisation
    Réponses: 9
    Dernier message: 02/06/2014, 19h31
  2. Somme des heures de travail.
    Par Nounours1 dans le forum Excel
    Réponses: 5
    Dernier message: 27/05/2008, 18h34
  3. gestions des heures de travail
    Par bzhmorgane dans le forum Modélisation
    Réponses: 2
    Dernier message: 24/05/2007, 08h56
  4. Réponses: 10
    Dernier message: 09/03/2007, 21h14
  5. Perte de temps dans le cumul des heures
    Par lodan dans le forum Langage
    Réponses: 9
    Dernier message: 19/11/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo