Étape 2 : Lire les données des personnes
Code à mettre dans un module.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public function LireInfoHoraire(prmClefPersonne as long, prmDateJour as date) as string
'LIt l'information sur son horaire régulier sans tenir compte de congés ou autre chose.
' Suppose que la personne travaille toute l'année et tous les jours de l'année sur le même rythme.
' Les congés vont être dans tblPeriode
dim result as string
dim critere as string
critere ="[ClefPersonne=" & prmClefPersonne 'La personne
critere = critere & " and [NoJour]=" & weekday(prmDateJour,vbMonday) '1 pour lundi, 7 pour dimanche 'Le jour de la semaine
critere = critere & " and #" & format(prmDateJour, "yyyy\-mm\-dd") & "# between [dateDebut] and [dateFin] 'Pour l'horaire actif à cette date
result=dfirst("CodeTypeJour", "tblHoraire", critere) & ""
LireInfoHoraire=result
end function |
1 2 3 4 5 6 7 8 9 10
| public function LireInfoPeriode(prmClefPersonne as long, prmDateJour as date) as string
'Lit l'information sur les exception à l'horaire régulier
'Si rien retourne ""
dim result as string
dim critere as string
critere ="[ClefPersonne=" & prmClefPersonne 'La personne
critere = critere & " and #" & format(prmDateJour, "yyyy\-mm\-dd") & "# between [dateDebut] and [dateFin] 'Pour l'horaire actif à cette date
result=dfirst("CodeTypeJour", "tblHoraire", critere) & ""
LireInfoPeriode=result
end function |
1 2 3 4 5 6 7 8 9 10 11 12
| public function LireInfoCodeJour(prmClefPersonne as long, prmDateJour as date) as string
'Combine les infos de l'horaire régulier et les exceptions
dim result as string
result=LireInfoPeriode(prmClefPersonne, prmDateJour)
if result="" then
'Il n'y a rien de spéciale à cette date, trouve l'horaire régulier
result=LireInfoHoraire(prmClefPersonne, prmDateJour)
end if
LireInfoCodeJour=result
end function |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public function LireInfoObservation(prmClefPersonne as long, prmDateJour as date) as string
'Combine les observation des jours spéciaux
dim result as string
result=LireInfoPeriode(prmClefPersonne, prmDateJour)
if result<>"" then
'Il n'y a un info spéciale, récupère l'obsertavion
dim critere as string
critere ="[ClefPersonne=" & prmClefPersonne 'La personne
critere = critere & " and #" & format(prmDateJour, "yyyy\-mm\-dd") & "# between [dateDebut] and [dateFin] 'Pour l'horaire actif à cette date
result=dfirst("CodeTypeJour", "tblHoraire", critere) & ""
end if
LireInfoObservation=result
end function |
Note que prm est un abréviation personnelle pour indiquer "paramètre", ce qui me permet de savoir que les données viennent de l'extérieur de ma fonction.
Requête reqInfoJourPersonne :
1 2
| select tblCalendrier.*, tblPersonne.*, LireInfoCodeJour([tblPersonne].[ClefPersonne], [tblCalendrier].[DateJour]) as CodeTypeJour, LireInfoObservation([tblPersonne].[ClefPersonne], [tblCalendrier].[DateJour]) as Observation
from tblCalemdier, tblPersonne |
Donne pour chaque personne et chaque jour le code jour et son observation si c'est un jour spécial.
Je m'aperçois qu'on n'a pas parlé de jours fériés que TOUT le monde prend (ex : Noel, Aïds, Fête nationale, Nouvel an ...).
Si tu en as et que vraiment TOUT le monde les prends, la solution qui me paraît la plus simple est d'avoir une table
tblJourFerie
clefJourFerie (autonum)
DateJourFerie (date/heure)
DescJourFerie (Texte 255 caractères)
C'est à traiter de la même façon que l'horaire régulier et avant celui-ci.
Donc cela donne quelque chose comme :
1 2 3 4 5 6 7 8 9 10 11 12
| result=LireInfoPeriode(prmClefPersonne, prmDateJour)
if result="" then
'Il n'y a rien de spéciale à cette date, trouve si c'est un jour ferie
result=LireInfoFerie(prmDateJour)
if result="" then
'Ce n'est pas un férié
result=LireInfoHoraire(prmClefPersonne, prmDateJour)
end if
end if |
Si tout le monde ne fête pas, alors il faut indiquer chaque jour pour chaque personne.
Je te laisse coder et vérifier cela et on reparle du formulaire après.
Une dernière remarque: mon code n'est pas très subtile car il vérifie chaque jour même si on est dans une période. On pourrait faire mieux mais cela me semble plus complexe à comprendre et comme tu as peu de personne cela ne devrait pas avoir d'impact majeur sur le temps d'exécution.
A+
Partager