PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 27 → AFFICHAGE AGENDA
AFFICHAGE AGENDA
Started by bernard SOBRA, Mar., 17 2023 6:28 AM - 21 replies
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 17 2023 - 6:28 AM
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 modified, March, 17 2023 - 6:31 AM
Registered member
2,634 messages
Popularité : +93 (137 votes)
Posted on March, 17 2023 - 9:09 AM
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 modified, March, 17 2023 - 9:12 AM
Registered member
227 messages
Popularité : +51 (79 votes)
Posted on March, 17 2023 - 9:46 AM
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
Registered member
227 messages
Popularité : +51 (79 votes)
Posted on March, 17 2023 - 9:46 AM
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
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 17 2023 - 10:15 AM
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.
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 17 2023 - 10:16 AM
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.
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 17 2023 - 10:17 AM
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.
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 17 2023 - 11:20 AM
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.
Registered member
227 messages
Popularité : +51 (79 votes)
Posted on March, 17 2023 - 11:43 AM
Bon dev hésite pas si tu as d'autres questions

--
#DKR
Registered member
2,634 messages
Popularité : +93 (137 votes)
Posted on March, 17 2023 - 11:58 AM
Merci, j'ai appris qu'il vaut mieux remplir le champ agenda par programmation.
Registered member
1,029 messages
Popularité : +50 (142 votes)
Posted on March, 17 2023 - 12:27 PM
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
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 17 2023 - 4:36 PM
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.
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 18 2023 - 10:21 AM
@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.
Registered member
227 messages
Popularité : +51 (79 votes)
Posted on March, 18 2023 - 10:30 AM
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
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 18 2023 - 11:12 AM
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.
Registered member
1,029 messages
Popularité : +50 (142 votes)
Posted on March, 18 2023 - 11:34 AM
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
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 18 2023 - 11:41 AM
@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.
Registered member
1,029 messages
Popularité : +50 (142 votes)
Posted on March, 18 2023 - 11:48 AM
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
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 19 2023 - 5:48 AM
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.
Registered member
431 messages
Popularité : +24 (30 votes)
Posted on March, 19 2023 - 2:37 PM
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 modified, March, 19 2023 - 2:38 PM
Registered member
282 messages
Popularité : +11 (13 votes)
Posted on March, 22 2023 - 7:06 AM
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.
Registered member
3,391 messages
Popularité : +227 (347 votes)
Posted on March, 22 2023 - 7:56 AM
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