Donc tu vas probablement avoir quelquechose comme cela :
Table Personne:
ClefPersonne
Nom
Prenom
Autres renseignements utiles
Table TauxHoraire:
ClefTaux
DateDebut
DateFin
TauxHoraireMoins14h(Si tu n'as que 2 taux, sinon il va afolloir penser à une autre solution)
TauxHorairePlus14h(Si tu n'as que 2 taux)
Table HeuresTravaillees
ClefHeuresTravaillees
ClefPersonne
DateHeuresTravaillees
NbHeuresTravaillees
Comme tu as pu le noter, j'imagine que ton taux horaire va varier dans le temps. Quand j'ai un cas comme cela et pas beaucoup de données (l'utilisation de fonction dans des requêtes ralenti l'execution) j'utilise la fonction suivante que je mets dans un module.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public function LireTauxHoraire(prmDate as date, prmPlus14h as boolean) as double
dim result as variant
dim nomChamp as string
if prmPlus14h then
nomChamp="[TauxHorairePlus14h]"
else
nomChamp="[TauxHoraireMoins14h]"
end if
result=DFirst(nomChamp,"TauxHoraire","#" & format$(prmDate, "yyyy/mm/dd") & "# between [DateDebut] and [DateFin]")
if isnull(result) then
'Taux non défini pour la date passée en paramêtre
result=0
end if
LireTauxHoraire=CDbl(Result)
end |
OK, pour le calcul par mois c'est assez direct :
dans une requête basée sur HeuresTravaillees, tu crée un champ ex :
NbHeuresTravailleesMin:iif([NbHeuresTravaillées]<25, 25, [NbHeuresTravaillées])
NbNbHeuresTravailléesMoins14h:iif([NbHeuresTravailleesMin]<=14,[NbHeuresTravaillées],14)
NbNbHeuresTravailléesPlus14h:iif([NbHeuresTravailleesMin]>14,[NbHeuresTravailleesMin]-14,0)
PayementMensuelMoins14h:[NbHeuresTravailléesMoins14h]*LireTauxHoraire([DateHeuresTravaillees],false)
PayementMensuelPlus14h:[NbHeuresTravailléesPlus14h]*LireTauxHoraire([DateHeuresTravaillees],true)
Pour le calcul sur 3mois je ferais aussi une fonction, mais je vais supposer que tu n'as qu'un seul enregistrement par mois, sinon tu pourra tout de même utiliser la fonction mais en faisant une requête de cumul par mois avant.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public function CalculerNbHeureMax3Mois(prmDate as date)
const NB_HEURES_MAX_3MOIS as long = 75
dim nbHeures3Mois as long
dim dateMin as date:dateMin=DateAdd("m",-3,prmDate)
dim dateMax as date:dateMax=prmDate
nbHeures3Mois=DSum("[HeuresTravaillees]","HeureTravaillees","[DateHeureTravaillees] between #" & format$(dateMin,"yyyy/mm/dd") & "# and #" & format$(dateMax,"yyyy/mm/dd") & "#")
if nbHeure3Mois > NB_HEURES_MAX_3MOIS then
nbHeures3Mois=NB_HEURES_MAX_3MOIS
end if
CalculerNbHeureMax3Mois=nbHeures3Mois
end function |
Pour le moment je ne vois pas vraiment comment combiner cela avec les calculs mensuels. Au final j'aurais tendance à faire une fonction qui détermine le montant à payer par mois (incluant le contrôle des 75h) plutôt que de passer par des champs calculés dans des requêtes.
A+
Partager