PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Impossible de ré-initialiser un combo (windev 15)
Impossible de ré-initialiser un combo (windev 15)
Débuté par JoÉ, 14 mar. 2019 16:34 - 3 réponses
Membre enregistré
1 message
Posté le 14 mars 2019 - 16:34
Bonjour à tous et à toutes !

Dans une application que je suis en train de créer, j'ai une fenêtre qui permet à l'utilisateur d'inscrire des participants à des activités prédéfinies sur une semaine. Lorsque je change la date dans le "champ" date, tous les autres champs se ré-initialisent sauf le champ combo qui affiche l'identité des participants. Lorsque qu'un participant s'est inscrit à une activité à un jour défini, l'identité de cette personne est grisé dans la combo après enregistrement et fermeture de la fenêtre. Lorsque j'ouvre de nouveau la fenêtre et choisit une date de la semaine, la combo indique parfaitement les participants inscrits (identité grisé) et les non inscrits (identité en bleu). Si je change de date, tous les autres champs se ré-initialisent et me donnent les bonnes informations sur les activités proposées et le nombre de participants déjà inscrits. La combo, elle, indique toujours les mêmes informations de la date choisie précédemment sur les participants inscrits (identité grisé) et les non inscrits (identité en bleu). Je suis obligé de fermer la fenêtre et de l'ouvrir de nouveau et de choisir la date voulue pour que la combo m'affiche les bonnes informations. Comme vous pouvez vous imaginer ce procédé n'est pas top. Il est impossible de naviguer entre différents dates et avoir des informations fiables dans la combo. Voici donc, le code de deux procédures que j'ai mis à "Initialisation de SAI_Date" et "A chaque modification de SAI_Date" :
Procedure AffichageActivite()// Décrit les activtés proposées chaque jour le matin, l'après-midi et le soirée

ListeSupprimeTout(LISTE_InscriptionMatin)
ListeSupprimeTout(LISTE_InscriptionApresMidi)
ListeSupprimeTout(LISTE_InscriptionSoiree)

SAI_PlaceDisponibleMatin..Valeur = 0
SAI_PlaceDisponibleApresMidi..Valeur = 0
SAI_PlaceDisponibleSoiree..Valeur = 0

HLitRecherche(ActiviteJournaliere,Date,FEN_Inscription.SAI_Date)

SI HTrouve(ActiviteJournaliere) ALORS
POUR TOUT ActiviteJournaliere
SI ActiviteJournaliere.Date = FEN_Inscription.SAI_Date ET ActiviteJournaliere.Periode = "2" ALORS
ListeAjoute(LISTE_InscriptionMatin,ActiviteJournaliere.NomActivite + " ("+(HeureVersChaîne(ActiviteJournaliere.HoraireDebut, "HHhMM")) +" - "+ (HeureVersChaîne(ActiviteJournaliere.HoraireFin, "HHhMM")) +")" +gLien(ActiviteJournaliere.NombreMaximunParticipant))
FIN

SI ActiviteJournaliere.Date = FEN_Inscription.SAI_Date ET ActiviteJournaliere.Periode = "3" ALORS
ListeAjoute(LISTE_InscriptionApresMidi,ActiviteJournaliere.NomActivite + " ("+(HeureVersChaîne(ActiviteJournaliere.HoraireDebut, "HHhMM")) +" - "+ (HeureVersChaîne(ActiviteJournaliere.HoraireFin, "HHhMM")) +")" +gLien(ActiviteJournaliere.NombreMaximunParticipant))
FIN

SI ActiviteJournaliere.Date = FEN_Inscription.SAI_Date ET ActiviteJournaliere.Periode = "4" ALORS
ListeAjoute(LISTE_InscriptionSoiree,ActiviteJournaliere.NomActivite + " ("+(HeureVersChaîne(ActiviteJournaliere.HoraireDebut, "HHhMM")) +" - "+ (HeureVersChaîne(ActiviteJournaliere.HoraireFin, "HHhMM")) +")" +gLien(ActiviteJournaliere.NombreMaximunParticipant))
FIN
FIN
FIN

ListeTrie(LISTE_InscriptionMatin)
ListeTrie(LISTE_InscriptionApresMidi)
ListeTrie(LISTE_InscriptionSoiree)


Procedure AttestationInscription()
i est un entier = -1
ListeParticipant est un entier

SI IDInscriptionActivite = 0 ALORS

COMBO_IdentiteParticipant = -1

SAI_TotalNombreInscrit..Valeur = 0 //Compteur d'inscrits

POUR Indice = 1 A COMBO_IdentiteParticipant..Occurrence
COMBO_IdentiteParticipant[Indice]..Couleur = RVB(68,139,237) //Identité des non inscrits couleur bleu
FIN

REQ_NombreInscriptionParticipant.PDateInscription = SAI_Date..Valeur //Affichage de l'identité des participants selon la date choisie

HExécuteRequête(REQ_NombreInscriptionParticipant)

POUR i = 1 _A_ HNbEnr(REQ_NombreInscriptionParticipant) //Nombre total des participants

HLit(REQ_NombreInscriptionParticipant, i)

SI HEtat() = hEtatActif ALORS
ListeParticipant = ListeCherche(COMBO_IdentiteParticipant,REQ_NombreInscriptionParticipant.Participant)
COMBO_IdentiteParticipant[ListeParticipant]..Etat = Grisé //Affichage de l'identité des participants déjà inscrits
FIN
SAI_TotalNombreInscrit = HNbEnr(REQ_NombreInscriptionParticipant) //Nombre total des participants déjà inscrits
FIN
FIN


J'ai utilisé la fonction "HAnnuleDéclaration" sur la réquête "REQ_NombreInscriptionParticipant.PDateInscription" avec le dernier "FIN". Cela ne donne aucun résultat.

Si quelqu'un ou quelqu'une a une idée à me soumettre, je suis preneur. Merci d'avance.
Joseph Emmanuel
Membre enregistré
107 messages
Posté le 18 mars 2019 - 18:42
Bonjour,

C'est la requete qui ne te renvoie rien ou c'est la modification de la propriété etat qui ne s'applique pas ?

Autre chose comment est initialisé ta COMBO_IdentiteParticipant (accès direct ou rempli par programmation) ?

si tu as une requete lié est est exécuté quand tu clique sur la combo il me semble.
Essaye de remplir par programmation COMBO_IdentiteParticipant.
Membre enregistré
107 messages
Posté le 19 mars 2019 - 09:14
Bonjour,

1) Dans le code :

SI IDInscriptionActivite = 0 ALORS
COMBO_IdentiteParticipant = -1


si IDInscriptionActivite est différent de 0, alors rien ne se passe. Met un point d'arrêt sur la première ligne

2) J'imagine que la combo n'est pas réinitialisée. Il manque alors le code de "Dégrisage"....

3) Par ailleurs, je modifierais le code
HExécuteRequête(REQ_NombreInscriptionParticipant)

POUR i = 1 _A_ HNbEnr(REQ_NombreInscriptionParticipant) //Nombre total des participants

HLit(REQ_NombreInscriptionParticipant, i)

SI HEtat() = hEtatActif ALORS
ListeParticipant = ListeCherche(COMBO_IdentiteParticipant,REQ_NombreInscriptionParticipant.Participant)
COMBO_IdentiteParticipant[ListeParticipant]..Etat = Grisé //Affichage de l'identité des participants déjà inscrits
FIN
SAI_TotalNombreInscrit = HNbEnr(REQ_NombreInscriptionParticipant) //Nombre total des participants déjà inscrits
FIN


par

HExécuteRequête(REQ_NombreInscriptionParticipant)

// Initialisation
SAI_TotalNombreInscrit = 0

POUR i = 1 _A_ HNbEnr(REQ_NombreInscriptionParticipant) //Nombre total des participants

HLit(REQ_NombreInscriptionParticipant, i)

SI HEtat() = hEtatActif ALORS
ListeParticipant = ListeCherche(COMBO_IdentiteParticipant,REQ_NombreInscriptionParticipant.Participant)
COMBO_IdentiteParticipant[ListeParticipant]..Etat = Grisé //Affichage de l'identité des participants déjà inscrits
SAI_TotalNombreInscrit++
FIN
// La ligne suivante s'exécute autant de fois qu'il y a d'enregistrements, ce qui est inutile. De plus, s'il y avait des enregistrements rayés/suprimés, le nombre serait faux !!!!
// SAI_TotalNombreInscrit = HNbEnr(REQ_NombreInscriptionParticipant) //Nombre total des participants déjà inscrits
FIN


4) Amélioration du code d'initialisation.

Si "ActiviteJournaliere.Date = FEN_Inscription.SAI_Date" est FAUX, ton programme effectuera 6 tests, alors qu'un seul suffit.

Nouvelle version :

Procedure AffichageActivite()// Décrit les activtés proposées chaque jour le matin, l'après-midi et le soirée

ListeSupprimeTout(LISTE_InscriptionMatin)
ListeSupprimeTout(LISTE_InscriptionApresMidi)
ListeSupprimeTout(LISTE_InscriptionSoiree)

SAI_PlaceDisponibleMatin = 0
SAI_PlaceDisponibleApresMidi = 0
SAI_PlaceDisponibleSoiree = 0

HLitRecherche(ActiviteJournaliere,Date,FEN_Inscription.SAI_Date)

TANTQUE HTrouve(ActiviteJournaliere) ALORS
SELON ActiviteJournaliere.Periode
CAS "2" :
ListeAjoute(LISTE_InscriptionMatin,ActiviteJournaliere.NomActivite + " ("+(HeureVersChaîne(ActiviteJournaliere.HoraireDebut, "HHhMM")) +" - "+ (HeureVersChaîne(ActiviteJournaliere.HoraireFin, "HHhMM")) +")" +gLien(ActiviteJournaliere.NombreMaximunParticipant))

CAS "3" :
ListeAjoute(LISTE_InscriptionApresMidi,ActiviteJournaliere.NomActivite + " ("+(HeureVersChaîne(ActiviteJournaliere.HoraireDebut, "HHhMM")) +" - "+ (HeureVersChaîne(ActiviteJournaliere.HoraireFin, "HHhMM")) +")" +gLien(ActiviteJournaliere.NombreMaximunParticipant))

CAS "4" :
ListeAjoute(LISTE_InscriptionSoiree,ActiviteJournaliere.NomActivite + " ("+(HeureVersChaîne(ActiviteJournaliere.HoraireDebut, "HHhMM")) +" - "+ (HeureVersChaîne(ActiviteJournaliere.HoraireFin, "HHhMM")) +")" +gLien(ActiviteJournaliere.NombreMaximunParticipant))

AUTRES CAS :
// Traitement optionnel par Exemple
// Si EnModeTest() ALORS
// Erreur("Cas non traité")
// FIN
FIN
HLitSuivant(ActiviteJournaliere,Date)
FIN
HAnnuleRecherche(HLitSuivant(ActiviteJournaliere)

ListeTrie(LISTE_InscriptionMatin)
ListeTrie(LISTE_InscriptionApresMidi)
ListeTrie(LISTE_InscriptionSoiree)


Bon Dev

--
Yann Wagner

WHY-GemA sàrl
Posté le 20 mars 2019 - 12:52
Bonjour Gurdarr !
Bonjour Yann !

Merci à tous les deux t'avoir pris le temps de me répondre.
Yann, j'ai suivi tes conseils qui m'ont permis de résoudre mon problème.

Bonne journée à vous !
JoÉ