Bonjour à tous,
je dois calculer le nombre de jour ouvrés entre deux dates. Je dois donc tenir compte des jours fériés, des samedi et dimanche et des jours de fermeture pour vacances. J'ai trois solutions à confronter mais j'aimerai avoir l'avis de personnes plus compétentes que moi qui ne suit qu'un petit débutant et qui aimerai apprendre à faire du développement propre et intelligent.
J'ai lu l'article très interessant de SQLPro Calendrier, timing et horaires en SQL...
http://sql.developpez.com/gestiontemps/
J'utilise SQL Server 2005 express dans lequel j'ai implanté la base de données proposées.
Je l'ai adapté à mon cas puisqu'il n'y a pas les jours de vacances de l'entreprise.
1ère solution (celle que j'ai adopté pour l'instant):
J'ai ajouté une colonne "PJR_JOUR_OUVRE" de type booleen. Si le bit est à 1, l'entreprise est ouverte ce jour-là, si le bit est à 0, l'entreprise est fermée.
A la création de la table, les valeurs de ce champ sont crée à l'aide de simple requête qui détermine si la date correspondante est un samedi, un dimanche, un jour férié ou un jour de vacances.
J'ai ensuite crée une procédure stockée qui calcul le nombre de jours ouvrés entre deux dates. C'est assez facile à l'aide de la colonne "PJR_JOUR_OUVRE"
Malgrès tout, je trouve cette solution un peu barbare.
2ème solution:
Je garde toujours la base d'SQLPro et j'ajoute une table "Jours de Vacances".
Les vacances sont à peu près toujours à la même période. Mais évidemment les dates d'une année à l'autre ne sont pas nécessairement les mêmes.
Cette solution consisterait à créer une table regroupant tous les jours de vacances entre les années 2006 et 2050 et chaque date serait une clé primaire de la table et clé externe de la table T_PLN_JOUR_PJR.
Ensuite, je crée une vue qui me donne tous les jours où la société est ouverte, mais ça me semble déjà plus compliqué mais cette solution s'avère être plus dynamique.
3ème solution:
Je n'utilise pas la base d'SQLPro et je travaille avec les fonctions de calcul sur des date et heure d'SQL Server 2005 au risque d'être confronté à des erreurs de calcul comme démontré dans l'article d'SQLPro.
Les jours férié fixes sont toujours les même et je peux recalculer à chaque fois les jours férié mobiles. Les samedi et dimanche, ça ne change pas non plus donc pas besoin de table pour stocker ces entités, juste une table pour les jours de vacances.
Et ensuite, je calcule mon nombre de jours ouvrés entre deux dates.
Plus compliqué mais solution peut-être plus propre ainsi.
4ème solution:
La même chose que la solution précédente mais
soit en C# sous .NET 2.0
soit en C# sous .NET 2.0 mais intégré à SQL Server 2005.
Là je dois faire une requête pour connaître les jours de vacances et ensuite effectuer mon calcul.
Houlàlà quel long message.
Si vous avez tout lu, c'est cool.
Et des suggestions c'est encore plus cool.
Au revoir.
Partager