Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports
Crystal Reports Forum d'entraide sur Crystal Reports. Avant de poster --> FAQ Crystal, Tutoriels Crystal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/09/2004, 14h05   #1
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
Par défaut [CR9] Calcul weekend travaillé

Il faut que je calcul le nombre de weekend travaillé pour chaque collaborateur d'un entreptrise.

J'ai forcement les dates de travail effectrives.

Mais comment calculer le nombre de weekend travaillé ?
A savoir un weekend correspond à un samedi et dimanche suivi, ou un dimanche et lundi suivi.

J'avoue ma peine, je ne trouve aucune solution de calcul ?

Quelqu'un peut-il m'aider ??

Merci
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2004, 14h43   #2
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Procédons par etape :
Tu as x Collaborateurs
Pour chaque collaborateur tu as des jours travaillés.
Si un Samedi+Dimanche
OU
Si Dimanche+Lundi travaillé alors WE travaillé

Tu fais un état avec un groupe collaborateur
trié par date (Elles vont donc arriver dans l'ordre
En debut de groupe tu initialises une variable WE à 0 et une variable X à 0

En detail il te faut une formule où si tu tombes sur un samedi ou un dimanche ou un lundi.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
IF samedi travaillé alors
   X=X+1
elseif dimanche travaillé AND X=1 alors 
   WE = WE + 1 
   X=0
elseif dimanche travaillé AND X=0 alors
   X=X+1
elseif lundi travaillé AND X=1 alors 
   WE = WE + 1
Else
   X=0
End IF
En fin de groupe collaborateur tu obtiens le nombre de WE travaillés.
Tu peux facilement optimiser le code je pense.
Qu'en penses tu ?? :
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2004, 15h22   #3
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
Je suis aller dans l'atelier de formule sous formule de séléction et j'ai trouver séléction de groupe....jusque là tout va bien ???
J'ai mis
Il me met le résultat doit être booléen ??

Je comprends pas tout..

Merci
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2004, 15h31   #4
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Je viens de comprendre ...
Il ne s'agit pas "formule de selection de groupe"
mais de formules à créer et à placer sur l'etat en debut de groupe.
Tes variables doivent aussi être globales.
regarde le topic "Pb de sommes", il y a un exemple d'utilisation de formules....
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2004, 16h00   #5
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
J'ai compris 2 3 choses aussi et j'en suis là:
Code :
1
2
3
4
5
6
7
8
9
10
11
IF DayOfWeek ({KnlActivity.AffectationStart})= 7 then
  {@Variable X} = {@Variable X} + 1
else IF DayOfWeek ({KnlActivity.AffectationStart}) = 1 AND {@Variable X}=1 then
   {@Variable WE} = {@Variable WE} + 1 AND
   {@Variable X}= 0 
else IF DayOfWeek ({KnlActivity.AffectationStart}) = 1 AND {@Variable X}=0 Then
   {@Variable X}={@Variable X}+1 
else IF DayOfWeek ({KnlActivity.AffectationStart}) = 2 AND {@Variable X}=1 then
   {@Variable WE} = {@Variable WE} + 1 
Else 
   {@Variable X}=0
Mais y a un hic de taille, si le collaboraqteur termine son travail un dimanche et reprend le lundi d'après, le weekend est compté comme Ok mais dans les faits, il est invalide puisque non contigue

QU'en penses-tu ?

Merci beaucoup pour ta patience
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2004, 16h56   #6
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
J'ai mal compris ta remarque, je rectifie :
Non parce que X sera remise à 0 le lundi .... donc le problème des WE non contigus ne se posent pas ...
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2004, 17h59   #7
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Mais il faut que tu m'expliques aussi de quelles données tu disposes ... Chaque jour est une donnée ou tu disposes de périodes recoupées du style (Lundi Debut Activité, fin activité Samedi etc...).
En fonction de ton jeu de données, la manière de les interpréter sera différente...
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 09h12   #8
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
Salut

Une table collaborateur liée à une table activité.
Chaque collaborateur peut avoir plusieurs activités par jour, l'activité a une start activité du type date heure 01.02.2004 00:08:15 et forcément une end activité dont je ne m'occupe pas.
J'ai donc plein de doublons mais qui ne devrait pas causer de soucis particulier vu que l'enchainement de date ne se passera qu'un fois.

Donc la réponse est chaque jour plusieurs données.

Merci encore de ton aide
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 09h41   #9
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
As-tu des données pour l'activité congé, RTT, etc ... :
Imaginons que je bosse du lundi au Samedi. Dimanche c'est WE.
Ensuite du lundi au samedi, je suis en congé et je reprends le lundi d'après.
Que se passe-t-il au niveau de tes données... :
As-tu un code Activité congé avec un début et fin dans ta table Activité ??
Lors d'un congé, on doit réinitialiser X à 0, et pour pouvoir le faire, il faut connaitre l'information
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 09h48   #10
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
Oui l'activité à un code d'absence
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 11h34   #11
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
J'ai selon tes précieux conseils déclaré 2 variables ainsi
Code :
Global numberVar x := 0;
et l'autre
Code :
Global numberVar WE := 0;
je les ai placées dans le groupe collaborateur.
Ensuite je fais un très simple calcul que je place dans le détail:
Code :
1
2
3
Global NumberVar X;
 
X := X + 1;
Je suppose qu'il devrait s'incrémenter de 1 à chaque ligne mais il reste désepérement à 1.

Je fais forcément une erreur mais où ?

Merci
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 11h40   #12
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
n'oublie pas le WhilePrintingRecords en entete de tes formules ...
Ca devrait marcher un peu mieux ...
Tu pourrais aussi peut-être faire un groupe sur Activite.date (Rupture Jour)

Debut Collaborateur --> Tu remets X et WE à 0
Debut Activite.Date
Detail --> Ici tu ne fais rien et n'affiche rien
Fin Activite.Date -> C'est là que tu testes avec ta formule X et WE
Fin collaborateur --> Et là tu affiches le nombre de WE

Et là je suppose que tu as au moins 1 enregistrement dans la table activité par jour ....
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2004, 14h02   #13
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
Bon, effectivement, ton truc fonctionne du feu de dieu, mais forcément il y a un couac.....
Il n'y a pas, comme dit dans ton message, une activité par jour.
Du fait qu'il y a des trous, j'ai choisi l'option d'enlever toutes les absences.

J'y ai repassé 6 heures sans trouver de solution.
As-tu une autre idée lumineuse ?

Gracias
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2004, 14h18   #14
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Tu peux par exemple avoir une variable DateM Globale où en fin de groupe date tu vas conserver la date courante... et la tester juste avant dans ta formule ...
Si la date courante a une différence supérieure à un 1 jour par rapport à la date précédente, tu mets X à 0.

Recap :
Code :
Debut Etat : DateM = Datebidonassez ancienne
Fin du groupe date:
Code :
1
2
3
4
5
6
7
Si différence entre datecourante et DateM > 1 Then 
    x=0
Else
    Tu fais le test normal
end IF
DateM=DateCourante
""

enfin c'est juste une idée pour essayer de compenser les blancs dans ton activité.

EDIT Il y a une erreur dans mon raisonnement :

Code :
Debut Etat : DateM = DateActivité
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2004, 09h47   #15
Invité de passage
 
Inscription : mai 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 10
Points : 2
Points : 2
Finalement , nous sommes arrivés au bout de nos peines, merci beaucoup pour l'aide. Voici la formule magique, si elle peut servir...
Code :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Global booleanVar SA;
Global booleanVar DI;
Global booleanVar LU;
Global numberVar X;
Global dateVar datesa; 
Global dateVar datedi;
Global dateVar datelu;
Global booleanVar weekend;
 
WhilePrintingRecords;
 
//Samedi
IF DayOfWeek ({KnlActivity.AffectationStart}) = 7 then
SA := true;
IF DayOfWeek ({KnlActivity.AffectationStart}) = 7 then
datesa := Date({KnlReservation.AffectationStart});
 
// Dimanche
IF  DayOfWeek ({KnlActivity.AffectationStart}) = 1 then
DI := true;
IF  DayOfWeek ({KnlActivity.AffectationStart}) = 1 then
datedi := Date({KnlReservation.AffectationStart});
IF  (DayOfWeek ({KnlActivity.AffectationStart}) = 1 AND SA = TRUE AND
DateDiff ("d",datesa , datedi)< 4) Then
weekend := TRUE
else
weekend := FALSE;
 
//Lundi
IF DayOfWeek ({KnlActivity.AffectationStart}) = 2 then
LU := true;
IF (DayOfWeek ({KnlActivity.AffectationStart}) = 2) then
    IF DI = TRUE AND SA = FALSE THEN weekend := TRUE ELSE weekend := FALSE;
 
//Autres jour
IF DayOfWeek ({KnlActivity.AffectationStart}) IN 3 TO 6 then
SA := false; 
IF DayOfWeek ({KnlActivity.AffectationStart}) IN 3 TO 6 then
DI := false; 
IF DayOfWeek ({KnlActivity.AffectationStart}) IN 3 TO 6 then
LU := false;
IF DayOfWeek ({KnlActivity.AffectationStart}) IN 3 TO 6 then
weekend := false;
 
 
//Weekend
IF weekend = TRUE Then X := X + 1;
Bonne journée
jilc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h38.


 
 
 
 
Partenaires

Hébergement Web