PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2024 → calculer un horaire avec une heure plus une durée
calculer un horaire avec une heure plus une durée
Started by Ludovic BLANC, Nov., 17 2023 7:29 PM - 11 replies
Registered member
22 messages
Posted on November, 17 2023 - 7:29 PM
Bonjour,

Ça paraît tout bête mais je sèche sur une erreur : "un élément de type chaîne ne peut pas être convertis vers une durée"

Mais dans mon code je n'ai défini AUCUNE chaîne

//Variable globale
HeureRef est une heure = SAI_Heure
Durée est une durée = ParkingConnu.DureeStationnement //rubrique HFSQL Classic de type "Durée"

//Code au Clic du bouton BTN_Calculer
HeureDeDepart est une heure = HeureRef + Durée

Voilà, je n'ai que ça à vous mettre sous la dent, rien de compliqué mais cette heure qui vient de 'je ne sais où" me bloque...!
Registered member
364 messages
Posted on November, 20 2023 - 9:07 AM
Bonjour,

Commençons par le commencement :
Est-ce que l'affectation de SAI_Heure dans HeureRef se passe bien ?
Y a-t-il un masque de saisie dans SAI_Heure ?

Sinon sur le papier c'est censé fonctionner puisque d'après la doc la partie date de la durée est ignorée dans une telle addition.
Registered member
22 messages
Posted on November, 20 2023 - 11:30 PM
Bonjour Pucpood, et merci,

l'affectation de la valeur a SAI_Heure se fait à son initialisation avec la ligbne de code : MoiMeme = HeureSys()
cette valeur est ensuite affecté a la variable HeureRef, donc oui l'affectation de l'heure courante à la variable HeureRef est je pense correct.

Après un rapide controle de chaque valeur : Au clic sur BTN_Calculer

HeureRef = 231900000
ParkingConnu.DureeStationnement = 0200
HeureDeDepart = 231945807 //initialisé à HeureSys()

Masque de Saisie de SAI_Heure = "Rouleau Heure"
Masque d'affichage de SAI_Heure = "meme que la saisie"
valeur retournée = HHMM //pareil pour les autres valeurs

je suis completement paumé... merci en tout cas de votre aide...
Registered member
22 messages
Posted on November, 20 2023 - 11:46 PM
après quelques modif, j'obtiens maintenant l'erreur "Un element de type chaine ne peut etre converti vers le type durée" Au code de Selection d'une ligne de Combo_ParkingConnu qui contient :

HLitRecherche(ParkingConnu,Lieu,MoiMême..ValeurAffichée)
DureeChoisie = ParkingConnu.DuréeStationnement
LIB_duree = ParkingConnu.Durée
Registered member
626 messages
Posted on November, 21 2023 - 9:36 AM
Bonjour,
Avez-vous essayé avec la conversion ChaîneVersDurée (Fonction)
https://doc.pcsoft.fr/?3027002
Cdlt
Registered member
22 messages
Posted on November, 26 2023 - 2:45 AM
par desespoir, j'ai tout recommencé... J'ai supprimer les type durée et remplacer par des type heure, je n'ai plus l'erreur "durée vers chaine" mais le calcul ne se fait pas correctement... (Et pour te répondre cédric, oui j'avais aussi tenté avec la fonction ChaineVersDurée sans succès...)

ParkingConnu.Durée = 0200 //Type : Heure
HeureArrivée est une Heure // = Exemple : 023544000 //HHMMSSCCC
DuréeChoisie est une Heure // = Exemple : 020000000 //HHMMSSCCC
HeureDépart est une Heure // = Résultat Obtenu : 023544000 //HHMMSSCCC

Mon code au Clic sur BTN_Calculer :

HeureArrivée = HeureSys()
DureeChoisie = ParkingConnu.Durée
HeureDepart = HeureArrivee+DureeChoisie

LIB_Heure = HeureDepart

Ma question :

Pourquoi mon HeureDepart n'est pas le resultat de l'opération : HeureArrivee + DureeChoisie (et est identique à HeureArrivée) ?
Registered member
288 messages
Popularité : +24 (28 votes)
Posted on November, 26 2023 - 9:09 AM
Bonjour à Tous ;-)
Je me pose une question qu'il-il prévu lors d'un dépassement que capacité ?
23H50 + 20 minutes ?
Bien Cordialement

//--------------------
MonHeureArrivee is Time
MonHeureDepart is Time
MaDuree is Duration

// Surtout pas affecter un entier sinon il sera considéré alors
// comme le nombre de centièmes de seconde écoulés depuis minuit
MonHeureArrivee = "2230"


MaDuree..Hour = 1; MaDuree..Minute = 25

MonHeureDepart = MonHeureArrivee

MonHeureDepart..Hour += MaDuree..Hour
MonHeureDepart..Minute += MaDuree..Minute

Trace(MonHeureArrivee +TAB+ MaDuree +TAB+ MonHeureDepart)
Registered member
986 messages
Popularité : +16 (20 votes)
Posted on November, 27 2023 - 10:45 AM
Je passerai par une requete HFSQL
1 - transformer la durée en minutes
2 - SELECT dateadd(mi,maDureeEnMinutes,getdate())

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Registered member
364 messages
Posted on November, 30 2023 - 9:16 AM
Ludovic BLANC a écrit :
par desespoir, j'ai tout recommencé... J'ai supprimer les type durée et remplacer par des type heure, je n'ai plus l'erreur "durée vers chaine" mais le calcul ne se fait pas correctement... (Et pour te répondre cédric, oui j'avais aussi tenté avec la fonction ChaineVersDurée sans succès...)

ParkingConnu.Durée = 0200 //Type : Heure
HeureArrivée est une Heure // = Exemple : 023544000 //HHMMSSCCC
DuréeChoisie est une Heure // = Exemple : 020000000 //HHMMSSCCC
HeureDépart est une Heure // = Résultat Obtenu : 023544000 //HHMMSSCCC

Mon code au Clic sur BTN_Calculer :

HeureArrivée = HeureSys()
DureeChoisie = ParkingConnu.Durée
HeureDepart = HeureArrivee+DureeChoisie

LIB_Heure = HeureDepart

Ma question :

Pourquoi mon HeureDepart n'est pas le resultat de l'opération : HeureArrivee + DureeChoisie (et est identique à HeureArrivée) ?


Je me demande si tu ne te mélanges pas les pinceaux entre les heures et les durées.
Toute information de durée doit se trouver dans une variable ou une rubrique de type durée. Tout horodatage doit se trouver dans une variable ou une rubrique de type Heure ou DateHeure.
Il est impératif que "DuréeChoisie" soit de type "Durée".
As-tu regardé cette page ?
https://doc.pcsoft.fr/fr-FR/?1514040

La question de Gemini1961 est intéressante, mais il faut déjà qu'un cas simple fonctionne.
Message modified, November, 30 2023 - 9:18 AM
Registered member
22 messages
Posted on December, 07 2023 - 4:12 PM
coucou Pucpood et merci de ta réponse, en faite j'ai modifier le type Durée de DureeChoisie, car j'obtenais l'erreur "type chaine ne peux pas etre convertis vers Durée"

Dans mon fichier sql, qui stock les durée max de stationnement des parking déjà connu, le type (ou meme sous-type) de ma rubrique ParkingConnu.Durée est obligatoirement une Heure. ducoup dans mon code je recupère cette valeur dans la variable DureeChoisie de type Heure.

j'ai effectivement déjà vu la page que tu m'a partager, mais dans leurs exemple ils additionne 2 heures, et non 1 heure plus une durée...
et il connaissent d'avance DateHeureDebut et DateHeureFin... contrairement a moi qui cherche justement DateHeureFin (enfin la date j'en ai pas besoin mais tu m'as compris je pense.....)

et effectivement quand j'aurais compris tout ce MicMac je pourrais me faire un plaisir de repondre a Gemini car c'est justement pour ce genre de cass que je n'arrive pas a calculer moi-meme de tete....

et Merci PASCAL pour cette piste je vais essayer quelques petites choses et je reviens vers vous....
Merci a tous ceux qui participe a ce sujet.
Registered member
22 messages
Posted on December, 07 2023 - 7:15 PM
Je pense avoir trouvé un code qui fonctionne, après quelques test, à voir si à l'utilisation dans le temps, certains horraires ne beug pas...

je partage pour ceux qui en aurais besoin...
DureeChoisie = ParkingConnu.Durée //00000000020000000

HRHA est une chaîne = Milieu(HeureArrivee,1,2) //19
mnHA est une chaîne = Milieu(HeureArrivee,3,2) //24
HRDC est une chaîne = Milieu(DureeChoisie,1,2) //02
mnDC est une chaîne = Milieu(DureeChoisie,3,2) //45

MinutesDepart est un entier = ChaîneVersNumérique(mnHA)+ChaîneVersNumérique(mnDC) //on compte les minutes exemple 51 + 24 = 75
HeuresDepart est un entier = ChaîneVersNumérique(HRHA)+ChaîneVersNumérique(HRDC) //on compte les heures exemple 18 + 2 = 20

SI MinutesDepart>=60 ALORS //on rentre dans la condition
MinutesDepart = MinutesDepart-60 //on retire 60 minutes, reste = 15
HeuresDepart++ //on ajouter une heure (la retenue)
SINON
//rien
FIN

SI HeuresDepart>=24 ALORS
HeuresDepart = HeuresDepart-24
SINON
//rien
FIN

LibHeureVal est une chaîne = NumériqueVersChaîne(HeuresDepart)+NumériqueVersChaîne(MinutesDepart)

LIB_Heure = LibHeureVal
Registered member
364 messages
Posted on December, 19 2023 - 9:56 AM
Ludovic BLANC a écrit :

j'ai effectivement déjà vu la page que tu m'a partager, mais dans leurs exemple ils additionne 2 heures, et non 1 heure plus une durée...
et il connaissent d'avance DateHeureDebut et DateHeureFin... contrairement a moi qui cherche justement DateHeureFin (enfin la date j'en ai pas besoin mais tu m'as compris je pense.....)


J'insiste, la page que je t'ai indiquée commence par un tableau à 2 dimensions qui t'indique ce que tu obtiens comme type pour chaque combinaison possible de type entre les heures et les durées. Sache aussi que les types Durée et Heure t'offrent le moyen de récupérer directement leur partie heure ou leur partie minute. Le type Durée permet aussi de récupérer directement la durée totale exprimée en heure ou en minute ou etc. On voit très clairement que type Heure (pour toi l'arrivée) + type Durée (pour toi le temps, la durée) = type Heure (pour toi le départ) .

A bientôt !