PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → AFFICHAGE AGENDA
AFFICHAGE AGENDA
Débuté par bernard SOBRA, 17 mar. 2023 06:28 - 21 réponses
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 17 mars 2023 - 06:28
Bonjour les copains !

Je sèche, surement une bêtise, mais je sèche. Et je dois trouver d'urgence une solution.
J'ai un fichier de visites, avec un ID_MEDECIN et un ID_PATIENT.
J'affiche un agenda à partir de ce fichier de visite basé sur la requête paramétrée REQ_LISTE_VISITE.
Voila ma pièce de code

Procedure RafraichitAgenda(I8_Medecin est un entier sur 8 octets, I8_Patient est un entier sur 8 octets )
// Exécution de la requête
REQ_LISTE_VISITE.PARAM_MEDECIN = (I8_Medecin = 0) ? Null SINON I8_Medecin
REQ_LISTE_VISITE.PARAM_PATIENT = (I8_Patient = 0) ? Null SINON I8_Patient
REQ_LISTE_VISITE.ExécuteRequête()
// On réinitialise l'agenda
AGD_AGENDA.Affiche()

Pour débugger, j'affiche dans le titre de l'agenda les paramètres passés, ils sont corrects.

MAIS : Quels que soient les paramètres que je passe à cette procédure, l'agenda me montre toujours toutes les visites de tous les médecins et de tous les patients. Comme si les paramètres de la requête paramétrée était réinitialisée à NULL par l'instruction Affiche().

Au secours !!
Merci d'avance
Bernard

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Message modifié, 17 mars 2023 - 06:31
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 17 mars 2023 - 09:09
Salut @bernard,
En effet, ça aurait dû fonctionner.
Quand c'est comme ça, je mets d'abord les paramètres dans des variables.
Ensuite j'évite la nouvelle écriture des fonctions (xxx.fonction)
Ce qui donne ceci
// Exécution de la requête
Monparmed est une chaîne= (I8_Medecin = 0) ? Null SINON I8_Medecin
REQ_LISTE_VISITE.PARAM_MEDECIN = Monparmed
Monparpatient est une chaîne = (I8_Patient = 0) ? Null SINON I8_Patient
REQ_LISTE_VISITE.PARAM_PATIENT = Monparpatient
SI HExécuteRequête(REQ_LISTE_VISITE) ALORS
// On réinitialise l'agenda
AgendaAffiche(AGD_Agenda)
FIN

Si mes variables ne sont pas bonnes
Alors je met l'écriture standard du si alors sinon
Message modifié, 17 mars 2023 - 09:12
Membre enregistré
287 messages
Popularité : +51 (79 votes)
Posté le 17 mars 2023 - 09:46
Tout est précisé dans l'aide :
https://doc.pcsoft.fr/fr-FR/?1000019425

"Si la source de données liée au champ Agenda est une requête, cette requête est réinitialisée."

--
#DKR
Membre enregistré
287 messages
Popularité : +51 (79 votes)
Posté le 17 mars 2023 - 09:46
Je t'invite à remplir l'agenda par programmation toi même. Tu seras moins limitée et plus performant car tu aura la main mise totale.

--
#DKR
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 17 mars 2023 - 10:15
Popoy a écrit :
Salut @bernard,
En effet, ça aurait dû fonctionner.
...........................
Si mes variables ne sont pas bonnes
Alors je met l'écriture standard du si alors sinon


En fait, mon écriture est correcte car le nombre d'enregistrements renvoyés par la requête est bien celui attendu (mareq.nbenr())
C'est sans doute le champ AGENDA qui doit poser le problème.

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 17 mars 2023 - 10:16
404 ERROR a écrit :
Tout est précisé dans l'aide :
https://doc.pcsoft.fr/fr-FR/?1000019425
"Si la source de données liée au champ Agenda est une requête, cette requête est réinitialisée."
#DKR

Oui, je l'avais bien lu, mais cette phrase est un peu absconse, ça veut dire quoi "réinitialisée" ? Que les paramètres sont effacés ?

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 17 mars 2023 - 10:17
404 ERROR a écrit :
Je t'invite à remplir l'agenda par programmation toi même. Tu seras moins limitée et plus performant car tu aura la main mise totale.

--
#DKR

Donc je remplace la ligne "MonAgenda.afffiche" par une boucle du style :
pour tout REQ_MAREQUETE
MonAgenda.ajoute(.....)

FIN

C'est lourd, mais je vais essayer.

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 17 mars 2023 - 11:20
bernard SOBRA a écrit :
404 ERROR a écrit :
Je t'invite à remplir l'agenda par programmation toi même. Tu seras moins limitée et plus performant car tu aura la main mise totale.
#DKR

Donc je remplace la ligne "MonAgenda.afffiche" par une boucle du style :
pour tout REQ_MAREQUETE
MonAgenda.ajoute(.....)

FIN

C'est lourd, mais je vais essayer.


Ben 20 lignes de code plus loin, c'est de loin la meilleure méthode !! C'est vrai que ca met de la souplesse et surtout ca marche mieux que l'option de lier l'agenda à une requête.

MERCI A VOUS TOUS !!

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
287 messages
Popularité : +51 (79 votes)
Posté le 17 mars 2023 - 11:43
Bon dev hésite pas si tu as d'autres questions

--
#DKR
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 17 mars 2023 - 11:58
Merci, j'ai appris qu'il vaut mieux remplir le champ agenda par programmation.
Membre enregistré
1 143 messages
Popularité : +50 (142 votes)
Posté le 17 mars 2023 - 12:27
Bonjour Bernard,

Lors de la création de ton champ agenda, si tu as laissé la case "Générer le code d'initisalisation..." cochée, alors tu as du code dans l'initialisation du champ :
MaSource.ParamAnnee = "2023"
MaSource.ParamNumeroSemaine = "3"
// Ce code permet d'exécuter le code de changement de période à la fin de l'initialisation de la fenêtre
// Les différents champs de la barre de navigation ont ajouté des traitements pour se mettre à jour
// Le code de changement de période provoquera la mise à jour de l'état de ces champs de navigation
PROCEDURE INTERNE MAJPremierAffichage()
ExécuteTraitement(PLN_REQ_PlanningSemaineCherche, trtChangementPériodePlanning)
FIN
MaFenêtre..Traitement[trtInit] += MAJPremierAffichage


tu remplace les valeurs par tes variables :
MaSource.PARAM_MEDECIN = Monparmed
MaSource.PARAM_PATIENT = Monparpatient
// Ce code permet d'exécuter le code de changement de période à la fin de l'initialisation de la fenêtre
// Les différents champs de la barre de navigation ont ajouté des traitements pour se mettre à jour
// Le code de changement de période provoquera la mise à jour de l'état de ces champs de navigation
PROCEDURE INTERNE MAJPremierAffichage()
ExécuteTraitement(PLN_REQ_PlanningSemaineCherche, trtChangementPériodePlanning)
FIN
MaFenêtre..Traitement[trtInit] += MAJPremierAffichage

et l'affichage seul ( AgendaAffiche(AGD_Agenda) ) devrait suffire non ?

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 17 mars 2023 - 16:36
Merci Thierry, excellente réponse comme d'habitude. J'aime bien le bout de code :
MaFenêtre..Traitement[trtInit] += MAJPremierAffichage


J'avoue que je n'avais jamais fait cela....

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 18 mars 2023 - 10:21
@THIERRY
----------
A propose :
MaFenêtre..Traitement[trtInit] += MAJPremierAffichage

Cette pièce de code ou son pendant est-elle documentée dans la doc PcSoft ?

Question subsidiaire : la "bulle" d'un RDV de l'agenda n'est pas au format MarkDown, et n'accepte pas non plus les fonctions habituelles des libellés type gstylo/gpolice... Je viens de faire le test.
Peut on quand même mettre en évidence un morceau de texte à l'intérieur de cette bulle ? (HTML / RTF ?)

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
287 messages
Popularité : +51 (79 votes)
Posté le 18 mars 2023 - 10:30
De mon coté j'arrive bien à utiliser "gPoliceGras" dans la bulle

Mon agenda est remplit par programmation avec comme affichage une fenêtre interne personnalisée

--
#DKR
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 18 mars 2023 - 11:12
404 ERROR a écrit :
De mon coté j'arrive bien à utiliser "gPoliceGras" dans la bulle

Mon agenda est remplit par programmation avec comme affichage une fenêtre interne personnalisée


Moi je suis sous Webdev, donc pas de fenêtre interne je crois. Merci quand même.

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
1 143 messages
Popularité : +50 (142 votes)
Posté le 18 mars 2023 - 11:34
bernard SOBRA a écrit :

MaFenêtre..Traitement[trtInit] += MAJPremierAffichage

Cette pièce de code ou son pendant est-elle documentée dans la doc PcSoft ?

Non, c'est du code généré automatiquement lorsque la case "générer le code d'initialisation" est cochée.

J'attirais surtout ton attention sur cette partie :
MaSource.PARAM_MEDECIN = Monparmed
MaSource.PARAM_PATIENT = Monparpatient


--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 18 mars 2023 - 11:41
@Thierry

OK, merci, ca je connaissait.

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
1 143 messages
Popularité : +50 (142 votes)
Posté le 18 mars 2023 - 11:48
Le code
PROCEDURE INTERNE MAJPremierAffichage()
ExécuteTraitement(PLN_REQ_PlanningSemaineCherche, trtChangementPériodePlanning)
FIN
MaFenêtre..Traitement[trtInit] += MAJPremierAffichage


Donne la possibilité de préparer plusieurs traitements dans la procédure interne et de les exécuter en remplissant le tableau de traitement de la fenêtre avec
MaFenêtre..Traitement[trtInit] += MAJPremierAffichage


--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 19 mars 2023 - 05:48
THIERRY TILLIER a écrit :
MonObjet..Traitement[trtInit] += MAJPremierAffichage


Est ce une façon d'ajouter une procédure indépendante qui sera exécuté à chaque évènement trtinit de l'objet concerné ?
Peut-on imaginer par exemple ajouter une procédure interne (ou locale) sur un trtclic ? Pour mutualiser un code identique
sur chaque objet concerné ?
MonObjet..Traitement[trtClic] += MAJProcédurePersoInterne



Ou encore, pour mutualiser l'interface (mettre en fond rouge lors de la saisie et blanc lors de la fin de saisie d'une zone
MaPage.MonChamp.Traitement[trtEntrée] += MaProcedureLocaleEntreeEnSaisie
MaPage.MonChamp.Traitement[trtSortie] += MaProcedureLocaleSortieEnSaisie


--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
487 messages
Popularité : +24 (30 votes)
Posté le 19 mars 2023 - 14:37
bernard SOBRA a écrit :
THIERRY TILLIER a écrit :
MonObjet..Traitement[trtInit] += MAJPremierAffichage


Est ce une façon d'ajouter une procédure indépendante qui sera exécuté à chaque évènement trtinit de l'objet concerné ?
Peut-on imaginer par exemple ajouter une procédure interne (ou locale) sur un trtclic ? Pour mutualiser un code identique
sur chaque objet concerné ?
MonObjet..Traitement[trtClic] += MAJProcédurePersoInterne



Ou encore, pour mutualiser l'interface (mettre en fond rouge lors de la saisie et blanc lors de la fin de saisie d'une zone
MaPage.MonChamp.Traitement[trtEntrée] += MaProcedureLocaleEntreeEnSaisie
MaPage.MonChamp.Traitement[trtSortie] += MaProcedureLocaleSortieEnSaisie


--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.



salut, j'ai testé, ton idée, ca fonctionne parfaitement et même mieux, on peut utiliser "moimême"

MoiMême.Traitement[trtEntrée] += en_vert
MoiMême.Traitement[trtSortie] += en_rouge


Procedure en_vert()
MoiMême..CouleurFond=VertPastel


Procedure en_rouge()
MoiMême..CouleurFond=RougePastel


cool comme principe de mutualisation

--
José
Message modifié, 19 mars 2023 - 14:38
Membre enregistré
337 messages
Popularité : +11 (13 votes)
Posté le 22 mars 2023 - 07:06
J'ai ajouté cet item à la page d'aide sur les traitement (https://doc.pcsoft.fr/?3013031&name=executetraitement_fonction)

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 22 mars 2023 - 07:56
Bonjour,
Cette méthode est décrite dans le chapitre "Procédure (type de variable)"

--
Il y a peut être plus simple, mais, ça tourne