PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV (précédentes versions) → WB23 - Requête contrôle saisie heures
WB23 - Requête contrôle saisie heures
Débuté par Multipass, 16 mar. 2021 00:39 - 4 réponses
Membre enregistré
125 messages
Popularité : +5 (5 votes)
Posté le 16 mars 2021 - 00:39
Bonjour à tous,

Voici une situation que je ne comprend pas alors Merci d'avance de prendre un peu de votre temps pour m'aider à trouver une solution...

J'ai une procédure qui contrôle la saisie d'heures (début/fin) pour m'assurer qu'il n'existe pas de conflit entre 2 saisies. Typiquement, je passe par une REQ qui filtre de la façon suivante :

AND
(
(
HEURES.DEBUT < {pDEBUT}
AND HEURES.FIN > {pFIN}
)
OR
(
HEURES.DEBUT > {pDEBUT}
AND HEURES.DEBUT < {pFIN}
)
OR
(
HEURES.FIN > {pDEBUT}
AND HEURES._FIN < {pFIN}
)
)


Le code de la REQ utilise des opérateurs "strictement inférieur" et "strictement supérieur" pour permettre la saisie de créneaux du type 08:00-09:00 puis 09:00-10:00... sans blocage sur le fait que l'heure de fin de la saisie n°1 soit égale à l'heure de début de la saisie n°2 et tout est ok si l'utilisateur procède de cette manière là.

Par contre, s'il fait l'inverse : 09:00-10:00 puis 08:00-09:00, la REQ de contrôle remonte la saisie 1, ce qui déclenche une erreur de la procédure.

En fait c'est le 2ème bloc qui pose problème :

(
HEURES.DEBUT > {pDEBUT}
AND HEURES.DEBUT < {pFIN}
)


Le résultat "considère" que l'heure de début de la saisie 1 (09:00-10:00) est strictement supérieure à l'heure de début de la saisie 2 (08:00-09:00) ce qui est vrai. Mais du coup il considère aussi que l'heure de début de la saisie 1 (09:00) est strictement inférieure à l'heure de fin de la saisie 2 (09:00 aussi). Et c'est là que je ne comprends pas...

Le résultat ne prend pas en compte les 2 conditions ou j'ai visiblement besoin de changer de lunettes ? Avez-vous déjà rencontré ça ? et/ou une piste pour trouver un contournement ?

A+
Membre enregistré
473 messages
Popularité : +20 (20 votes)
Posté le 27 mars 2021 - 16:15
La requete que je ferais pour tester si le créneau est pris, ces 2 critères sont suffisants

SELECT
HEURES.DEBUT AS DEBUT,
HEURES._FIN AS _FIN
FROM
HEURES
WHERE
HEURES.DEBUT < {pFIN}
AND HEURES._FIN > {pDEBUT}


et le code pour tester
REQ_heures.pDEBUT= SAI_Debut
REQ_heures.pFIN= SAI_Fin

SI HExécuteRequête(REQ_heures) ALORS
SI HLitPremier(REQ_heures) ALORS

Info("Créneau pris")

SINON

HRAZ(HEURES)

HEURES.DEBUT = SAI_Debut
HEURES._FIN = SAI_Fin

HAjoute(HEURES)

FIN
FIN
Membre enregistré
125 messages
Popularité : +5 (5 votes)
Posté le 29 mars 2021 - 00:05
Bonjour stef1811,

Effectivement 2 conditions semblent suffisantes pour effectuer le contrôle, Merci.

Pour autant, je rencontre toujours la même situation :
- tout va bien si saisie 1 = 08:00-09:00 puis saisie 2 = 09:00-10:00.
- mais si on fait l'inverse : 09:00-10:00 puis 08:00-09:00, la REQ de contrôle remonte la saisie 1...

T'avais fait des tests dans les 2 sens ?
A+
Membre enregistré
473 messages
Popularité : +20 (20 votes)
Posté le 29 mars 2021 - 19:05
Oui mes tests fonctionnent dans les 2 sens
Membre enregistré
125 messages
Popularité : +5 (5 votes)
Posté le 29 mars 2021 - 22:26
Ok Merci pour le retour.
A+