|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Accueil → WINDEV 2025 → Zone répétée avec Fenêtre interne, appeler procédure de la fenêtre interne |
| Zone répétée avec Fenêtre interne, appeler procédure de la fenêtre interne |
| Débuté par Patrice FROELIGER, 28 sep. 2018 17:53 - 9 réponses |
| |
| | | |
|
| |
Membre enregistré 32 messages |
|
| Posté le 28 septembre 2018 - 17:53 |
Bonjour. J'ai une fenêtre principale avec une zone répétée qui est complétée avec des fenêtres internes. Pour enregistrer ma fiche principale et mes lignes de la zone répétée, j'ai besoin d'accéder à une procédure de la fenêtre principale.
Comment executer cette procédure de la fenêtre interne depuis le parcours de la zone répétée ?
Merci d'avance.
-- Patrice FROELIGER KUCHLY SASMessage modifié, 28 septembre 2018 - 17:53 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 120 messages |
|
| Posté le 28 septembre 2018 - 20:46 |
Voici ce que je viens d'utiliser pour le même cas que le votre
vFenInterne est un Champ <- Fen_Menu.OngletMenu[Fen_Menu.OngletMenu..Valeur] vNomFenêtreInterne est une chaîne vNomFenêtreInterne = EnumèreChamp(vFenInterne, 1, parOrdreDeCréation) ExécuteTraitement(vNomFenêtreInterne+".ProcRafraichir",trtProcedure)
Bon courage  |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 32 messages |
|
| Posté le 01 octobre 2018 - 09:39 |
Merci pour le retour.
Voilà ce que j'ai tenté, mais ça renvoie un champ vFenInterne vide, et donc pas de champ.
POUR TOUTE LIGNE de ZR_Detail vFenInterne est un Champ <- ZR_Detail[ZR_Detail..Valeur] vNomFenêtreInterne est une chaîne vNomFenêtreInterne = EnumèreChamp(vFenInterne, 1, parOrdreDeCréation) ExécuteTraitement("ZR_Detail."+vNomFenêtreInterne+".Enregistrer_Offre_TrL",trtProcedure, clErreurL) FIN
Par contre, grace à EnumèreChamp, j'ai réussi à récupérer une fenêtre interne _FIBASE_
vNomFenêtreInterne = EnumèreChamp (ZR_Detail,1,parOrdreDeCréation)
Le pb, c'est qu'avec 2 lignes dans ma zone répétée, j'enregistre du coup 2 fois la dernière ligne...
C'est pas loin, mais il manque encore quelque chose...
-- Patrice FROELIGER KUCHLY SAS |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 32 messages |
|
| Posté le 01 octobre 2018 - 11:28 |
Petit complément.
La méthode énoncée ci-dessus avec l'énumération sur ZR_Detail fonctionne bien.
vNomFenêtreInterne = EnumèreChamp (ZR_Detail,1,parOrdreDeCréation) ExécuteTraitement("ZR_Detail."+vNomFenêtreInterne+".Enregistrer_Offre_TrL",trtProcedure, clErreurL)
J'avais une erreur dans la méthode d'enregistrement avec un EcranVersSource qui me faisait croire que la méthode n'était pas appelée correctement.
-- Patrice FROELIGER KUCHLY SAS |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 32 messages |
|
| Posté le 03 octobre 2018 - 17:51 |
En complément, réponse du support tel que ça devrait être.
C’est effectivement une solution de contournement mais cela reste une anomalie. La syntaxe est normalement beaucoup plus simple : ZR_Test[Indice].FentreInterneTest.pTest()
-- Patrice FROELIGER KUCHLY SAS |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 120 messages |
|
| Posté le 03 octobre 2018 - 18:19 |
| On attend avec impatience la correction de "l'anomalie"... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 32 messages |
|
| Posté le 08 novembre 2018 - 16:00 |
Autre méthode trouvée sur le forum... Mais dans les 2 méthodes, ça ne marche que pour les fenêtres internes visuellement affichées à l'écran.
Merci FLORIAN / Allsoftwar
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/221751-erreur-doc-windev-zone-repetee-fenetre-interne-221805/read.awp
POUR TOUTE LIGNE nIndice de ZR_MaZoneRépétée pChampCible est un Champ
sNomMaZoneRépétée est une chaîne = ZR_MaZoneRépétée[nIndice]..Nom sNomMonChampDisposition est une chaîne = sNomMaZoneRépétée +".FI_MaFenetreInterne.DISP_MonChampDisposition" sParamSaisi est une chaîne = ""
pChampCible<-{sNomMonChampDisposition +".SAI_MonChampDeSaisie"} sParamSaisi = SansEspace(pChampCible..Valeur) FIN
-- Patrice FROELIGER KUCHLY SAS |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
| Posté le 11 novembre 2018 - 20:33 |
Bonjour, Pour solutionner cela j'utilise une classe intermédiaire qui regroupe les procédures de toutes fenêtres internes, pouvant être appelées. Prenons l'exemple suivant : je dispose d'une fenêtre qui contient une zone répétée de fenêtres internes dont chacune d'elles contient aussi une zone répétée d'éléments.

Problème. Lorsque je sélectionne un élément dans une des zones je dois supprimer la sélection précédente qui peut être située dans une autre fenêtre interne. Donc depuis la fenêtre interne je dois pouvoir intervenir sur la fenêtre principale ou sur les autres fenêtres internes qui la composent.
Pour commencer, ci-dessous la classe qui me permet de faire le lien entre les différents éléments.
IHMFenPrincipale est une Classe PRIVÉ m_taColProcDesselectionner est un tableau associatif de Procédures FIN
Procedure inscrireProcDesselectionner(LOCAL sPNomFenInterne est une chaîne, prcPProcedure est une Procedure)
m_taColProcDesselectionner[sPNomFenInterne] = prcPProcedure
Procedure getColProcDesselectionner():tableau associatif de Procédures
RENVOYER m_taColProcDesselectionner
Au niveau de la fenêtre principale, nous instancions l'objet "IHMFenPrincipale"
Procedure MaFenêtre() gclObjIHMFenPrincipale est un objet IHMFenPrincipale
Procedure chargerZoneRepetee()
POUR TOUT clObjMaitreOperation de colObjMaitreOperation ZoneRépétéeAjouteFI(ZR_OpOrchestrator, FI_MaitreOpGroupe ,clObjMaitreOperation,gclObjIHMFenPrincipale) FIN
Au niveau de la fenêtre interne "FI_MaitreOpGroupe" Ma fenêtre interne dispose de deux procédures : - "selectionner" appelée lorsque je sélectionne un élément en cliquant sur l'icône - "délectionner" qui supprime la sélection des tous ces éléments. C'est cette dernière qui sera inscrite dans l'objet nous servant d'intermédiaire.
Procedure MaFenêtre(LOCAL pObjMaitreOpGroupe est un objet clMaitreOpGroupe dynamique, gpclPObjIHMParent est un objet IHMFenPrincipale dynamique)
LIB_NomGroupe = pObjMaitreOpGroupe:getNomGrpSelection()
prcValProcedure est une Procedure prcValProcedure = desselectionner gpclPObjIHMParent:inscrireProcDesselectionner(LIB_NomGroupe,prcValProcedure)
Procedure desselectionner()
SI ZoneRépétéeOccurrence(ZR_ZoneOperation) = 0 ALORS RETOUR
POUR X = 1 _À_ ZR_ZoneOperation..Occurrence ATT_Selection[X] = Faux FIN
Procedure selectionner() taColProcDesselection est un tableau associatif de Procédures sNomFenInterne est une chaîne prcProcDesselection est une Procedure
taColProcDesselection = gpclPObjIHMParent:getColProcDesselectionner()
POUR TOUT prcProcDesselection, sNomFenInterne de taColProcDesselection SI sNomFenInterne = LIB_NomGroupe ALORS CONTINUER prcProcDesselection() FIN
nIndiceZone est un entier nIndiceZone = ZoneRépétéeSelect(ZR_ZoneOperation) SI nIndiceZone <> Null ALORS ATT_Selection[nIndiceZone] = Vrai
Nous pouvons créer d'autres tableaux associatifs pour d'autres méthodes.
En résumé, l'objectif n'est pas d'essayer d'exécuter une procédure d'une fenêtre interne par ExécuteTraitement() [je n'ai pas réussi à correctement l'utiliser. Confronté à des erreurs] mais d'enregistrer celle-ci dans un tableau de procédure afin de l'appeler. Donc vous pouvez simplifier cette démarche en vous passant de cette classe intermédiaire. Il suffit de fixer ce tableau de procédure au niveau de la fenêtre principale et d'y accéder directement par ses procédures : - FEN_Principale.inscrireProcDesselectionner() - FEN_Principale.getColProcDesselectionner() Personnellement je préfère l'objet, nous avons tous nos petites manies.
Cordialement.Message modifié, 11 novembre 2018 - 21:36 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 146 messages |
|
| Posté le 06 juin 2020 - 15:55 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 173 messages |
|
| Posté le 07 juin 2020 - 16:04 |
Bonjour,
Je ne vais pas apporter de solution à la question, mais personnellement, je m'arrange pour ne jamais appeler de procédure "ascendante", comme dans la fenêtre principale. Toutes les fenêtres devraient être indépendantes de celles qui les appellent. 1 - parce que cela permet de réutiliser la fenêtre ailleurs 2 - parce que les adhérences entre les fenêtres augmenteront la difficultés en cas de maintenance.
Pensez au passage de paramètre dans les fenêtres (internes ou non), ainsi qu'aux valeurs de retour Pensez aussi aux Triggers, si l'utilisation s'y prête.
Mais c'est vous qui codez, et les réponses ci-dessus sont de bonnes pistes.
-- Thierry TILLIER Développeur Windev-Webdev Formation Windev : https://coursdinfo.teachable.com/ Formation bureautique : https://coursdinfo.net |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|