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

WinDev Discussion :

calcul des Jours ouvrés [WD15]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 79
    Points : 84
    Points
    84
    Par défaut calcul des Jours ouvrés
    Bonjour,

    Je dois comparé 2 date et en stocké l'écart dans une base jusque là pas de problème :
    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
     
    sChaine1, sChaine2 est une chaîne
    dDate1, dDate2 est une Date
     
    HOuvre(Historique4moisGlissantPreEmb,hOLectureEcriture)
    HLitPremier(Historique4moisGlissantPreEmb)	
     
       TANTQUE HEnDehors(Historique4moisGlissantPreEmb) = Faux
     
          sChaine1 = Historique4moisGlissantPreEmb.Date_de_prise_en_compte
          sChaine2 = Historique4moisGlissantPreEmb.Date_d_emballage_du_colis
     
          dDate1 = ChaîneVersDate(sChaine1,"JJ/MM/AAAA")
          dDate2 = ChaîneVersDate(sChaine2,"JJ/MM/AAAA")
     
          HEcrit(Historique4moisGlissantPreEmb,hNumEnrEnCours,hEcritureDéfaut)	
     
          Historique4moisGlissantPreEmb.EcartNBJours = DateDifférence(dDate1 ,dDate2)
     
          HModifie(Historique4moisGlissantPreEmb,hNumEnrEnCours,hEcritureDéfaut)
     
          HLitSuivant(Historique4moisGlissantPreEmb)
       FIN	
    HFerme(Historique4moisGlissantPreEmb)
    info : mes données (que je lis dans une base HF) sont des chaines au départ que je converti en date et je modifie la valeur de la colonne EcartNbJours.


    Par contre comment faire pour ne pas tenir compte des jours non travaillé dans cet écart de date (Samedi, Dimanche et Jours férié) ??

    Merci par avance de vos réponses

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    tu devrais trouver des réponses du côté des fonctions DateVersJours et JourFerie en parcourant toute la période entre les dates.

    à bientôt,

    Nicolas

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 79
    Points : 84
    Points
    84
    Par défaut
    Avant tout je te remercie de ta réponse.

    J'étais en train de me résigner à cette méthode.

    Je me demandais juste si il n'y avais pas déjà des méthodes autrement plus simple et optimisé pour mettre en place ce genre de calcul.

    Par contre comment peux tu changer une date '20110411' vers le jours suivant '20110412' pour le tester ??

    Il y a toujours la méthode de convertir la date en entier + 1 et retour en date ... mais il n'y a pas plus simple ???

  4. #4
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Bonjour,
    pour répondre à ta dernière question, il suffit de faire :

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Citation Envoyé par FreeDo Voir le message
    Je me demandais juste si il n'y avais pas déjà des méthodes autrement plus simple et optimisé pour mettre en place ce genre de calcul.
    Hé bien en fait, on comptait sur toi pour nous fournir un package lorsque tu auras bien tout codé, testé, validé en production ...

  6. #6
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 308
    Points : 231
    Points
    231
    Par défaut
    Pour les jours fériés il faut que tu les stock dans ta base par exemple ou avec joursfériéajoute dans le code.

    Pour les trouver tu peux partir du jours de pâque : Pâques(2006) // renvoie "20060416"
    Jeudi de l'Ascension (40 jours après Pâques) (le 2 juin pour 2011 et le 17 mai pour 2012)
    Lundi de Pentecôte (50 jours après Pâques) (le 13 juin pour 2011 et le 28 mai pour 2012)

    Ect...
    http://fr.wikipedia.org/wiki/F%C3%AA...%A9s_en_France devrait t'aider.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 79
    Points : 84
    Points
    84
    Par défaut
    Bon c'est pas encore mis en production mais ça marche c'est déja ça !!

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    sChaine1, sChaine2 est une chaîne
    dDate1, dDate2, dDateTempo est une Date
    nbjours est un entier
     
     
    // Suppression de tous les jours fériés
    JourFériéSupprimeTout()
    // Initialisation des 11 jours fériés communs aux départements français et DOM/TOM
    JourFériéAjoute("0101")// 1er Janvier
    JourFériéAjoute(jfLundiDePâques)// Lundi de Pâques
    JourFériéAjoute("0501")// 1er Mai
    JourFériéAjoute("0508")// 8 Mai
    JourFériéAjoute(jfJeudiDeLAscension)// Jeudi de l'Ascension
    JourFériéAjoute(jfLundiDePentecôte)// Lundi de Pentecôte
    JourFériéAjoute("0714")// 14 Juillet
    JourFériéAjoute("0815")// 15 Août (Assomption)
    JourFériéAjoute("1101")// Toussaint
    JourFériéAjoute("1111")// 11 Novembre
    JourFériéAjoute("1225")// Noël
     
     
    HOuvre(Historique4moisGlissantPreEmb,hOLectureEcriture)
    HLitPremier(Historique4moisGlissantPreEmb)	
     
      TANTQUE HEnDehors(Historique4moisGlissantPreEmb) = Faux
        sChaine1 = Historique4moisGlissantPreEmb.Date_de_prise_en_compte
        sChaine2 = Historique4moisGlissantPreEmb.Date_d_emballage_du_colis
        dDate1 = ChaîneVersDate(sChaine1,"JJ/MM/AAAA")
        dDate2 = ChaîneVersDate(sChaine2,"JJ/MM/AAAA")
        dDateTempo = dDate1
        nbjours = 0
     
            TANTQUE dDateTempo <> dDate2
     
    	dDateTempo = EntierVersDate(DateVersEntier(dDateTempo) + 1)
     
                 SI (PAS DateVersJour(dDateTempo) = 6 ET PAS DateVersJour(dDateTempo) =  7) ET PAS JourFérié(dDateTempo) ALORS
     
                   nbjours ++
    	FIN	
     
     
           FIN
     
            HEcrit(Historique4moisGlissantPreEmb,hNumEnrEnCours,hEcritureDéfaut)	
            Historique4moisGlissantPreEmb.EcartNBJours = nbjours
            HModifie(Historique4moisGlissantPreEmb, hNumEnrEnCours, hEcritureDéfaut)
            HLitSuivant(Historique4moisGlissantPreEmb)
     
    FIN	
     
    	HFerme(Historique4moisGlissantPreEmb)

    La ligne 35 peut être à coup sur optimisé grace à L.nico (non testé pour le moment) :

    pour répondre à ta dernière question, il suffit de faire :
    dDate1..jour++

    Et voila En vous remerciant tous pour ce moment de partage cérébrale et technique

  8. #8
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Je ne sais pas si ça a une importance pour Freedo ou pas, mais il y a aussi comme jour férié :

    l'avant veille de pâques (Vendredi saint) pour les départements de la Moselle, du Bas-Rhin , du Haut-Rhin ,de la Guadeloupe et de la Martinique.
    20 décembre à l'ile de la réunion
    et le 26 décembre pour les départements de la Moselle, du Bas-Rhin et du Haut-Rhin

  9. #9
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Voilà il y a quelques années j'ai eu besoin de faire des traitements de sélection de dates. A l'époque je travaillais sur SQLServer et en cherchant j'ai vu que beaucoup de personnes avais créer dans leur base une table Calendrier.

    Cette table contenais la découpe et différentes infos pour une date.
    En gros voici ce quelle contenait.

    DateKey INT PRIMARY KEY,
    DateFull DATETIME,
    CharacterDate VARCHAR(10),
    FullYear CHAR(4),
    QuarterNumber TINYINT,
    WeekNumber TINYINT,
    WeekDayName VARCHAR(10),
    MonthDay TINYINT,
    MonthName VARCHAR(12),
    YearDay SMALLINT,
    DateDefinition VARCHAR(30),
    WeekDay TINYINT,
    MonthNumber TINYINT
    Et puis tu peux y ajouter les notions de que tu veux "est comme jours férié", "fermeture annuel" etc..

    Ainsi quand tu en a besoin tu n'as plus qu'à faire tes requêtes dessus.
    (et ce même si tu travaille sur plusieurs années).


    Voici un lien pour faire la base en SQL

    Mais ce n'est qu'une suggestion.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 80
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Juste deux petites remarques venant d'une expérience récente sur ce genre de calcul :
    - Si ta date 1 et ta date 2 sont égales, tu trouveras un délai de 0 jours, à vérifier si cela convient (selon les calculs, le délai de J à J doit être égal à 0 ou 1)
    - Si pour une raison X ou Y ta date 1 est supérieure à ta date 2, tu auras un joli plantage

    A+

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 79
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    Merci encore une fois à tous pour ces remarques qui meme si elle ne s'applique pas à mon projet sont toujours utile à avoir en tete.

    bon dev !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. calcul date à partir des jours ouvrés
    Par michel13 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2008, 20h18
  2. Calcul des dates et des jours ouvrés
    Par okparanoid dans le forum Langage
    Réponses: 2
    Dernier message: 08/12/2007, 16h50
  3. Décompte des jours ouvrés sous Access
    Par kirouha dans le forum Access
    Réponses: 7
    Dernier message: 11/07/2006, 10h08
  4. [Conception] Calendrier - Gestion des jours ouvrés
    Par eXiaNazaire dans le forum Général Java
    Réponses: 3
    Dernier message: 16/02/2006, 10h25
  5. Calcul des jours feriés
    Par obione dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2003, 12h36

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