PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Zones répétées imbriquées
Zones répétées imbriquées
Iniciado por Jerome, abr., 16 2024 10:36 AM - 9 respostas
Publicado em abril, 16 2024 - 10:36 AM
Bonjour à tous,

je rencontre une difficulté avec des zones répétées imbriquées les unes dans les autres, je m'explique :

J'ai une zone répétée qui contient des informations d'un projet qui se répète pour chaque projet.
Chacun de ces projets contiennent des tâches, qui elles-mêmes contiennent des sous-tâches.
Je souhaite donc faire une zone répétée pour les projets, une autre zone répétée à l'intérieur de celle des projets pour les tâches et enfin une autre dans les tâches pour les sous-tâches.

J'ai entendu parlé des zones répétées imbriquées, ce qui me semble être une bonne idée, via cette vidéo:
https://www.youtube.com/watch?v=P0F03jDbljw


J'ai plusieurs interrogations notamment liées à la construction de ma page, je vous explique ma démarche :

Dans ma page, j'ai une Zone Répétée "ZR_Projets".
"ZR_Projets" contient des champs libellés à mettre à jour pour chaque projet + une Zone Répétée "ZR_Tâches".
"ZR_Tâches" contient une fenêtre interne "CFI_Tache" (qui contient la fenêtre interne "FI_Tache"). Dans "ZR_Taches" on retrouve des champs libellés à mettre à jour et un bouton (pour ajouter une tâche), ainsi qu'une autre zone répétée, "ZR_Soustâches".
"ZR_Soustâches" contient une fenêtre interne "CFI_SousTache" (qui contient la fenêtre interne "FI_SousTache"), dans laquelle on retrouve des champs libellés à mettre à jour ainsi qu'un bouton pour ajouter une sous-tâche.

ça ressemble à peu près à ça:









1ère interrogation, est-ce que j'ai bien appréhendé la construction de ma page ?


Secondo, j'ai une question concernant les options des Zones Répétées:

- Dans ma première zone répétée, "ZR_Projets", il m'est impossible de cocher la case "Utiliser une fenêtre interne par ligne" (dans l'onglet "contenu" de sa description), cependant j'arrive à répéter les projets (via ZoneRépétéeAjouteLigne) et les informations liées qui m'intéressent.

- Dans la seconde zone répétée "ZR_Taches", j'y ai inséré une Fenêtre Interne (FI_Tache) qui elle même contient la zone répétée des sous-tâche, je ne sais pas pourquoi, mais il m'arrive que la case se décoche toute seule parfois (elle devient alors grisé et donc impossible à cocher).

Concernant le code:

Pour ajouter du contenu dans la zone répétée ZR_Tache j'utilise ceci:

HLitRecherchePremier(Tache,IDProjet,ZR_Projets.LIB_idProjet)
SI HTrouve(Tache) ALORS
TANTQUE PAS HEnDehors(Tache) ET Tache.IDProjet = ATT_idProjet

ZoneRépétéeAjouteFI(ZR_Taches,FI_Tache,Tache.IDTache,Tache.Cloture,Tache.Libelle,Tache.LibelleCloture,Tache.DateFinEstimee)
HLitSuivant
FIN
FIN


Dans ma fenêtre FI_Tache, je déclare bien les paramètres:
Procedure MaFenêtre(idTache est un entier sur 8 octets, Cloture est un booléen, tacheLiee est une chaîne, intervenant est une chaîne, dateFin est une Date)


Or, quand j'exécute le code, au lancement j'obtiens l'erreur suivante :
Les paramètres d'appel du code 'Déclarations globales de FI_Tache' sont incorrects : on attendait 5 paramètres et on en a reçu 0.


J'avoue que je ne comprends pas bien le fonctionnement des zones répétées imbriquées et je ne trouve, malheureusement, d'exemple nulle part

Dans l'attente d'une réponse, je vous souhaite une bonne journée !
Membro registado
3.897 mensagems
Popularité : +227 (347 votes)
Publicado em abril, 16 2024 - 11:16 AM
Bonjour,
As-tu bien coché la case qui va bien ? Ooops lecture en diagonale.

As-tu tenté la création d'une ligne vide et l'initialisation de ton CFI via ChangeFenêtreSource ?

Ton problème de "cochage" impossible ne viendrait il pas du fait que ta FI est liées à la CFI ?
--
Il y a peut être plus simple, mais, ça tourne
Mensagem modificada, abril, 16 2024 - 11:23 AM
Membro registado
494 mensagems
Popularité : +24 (30 votes)
Publicado em abril, 16 2024 - 11:45 AM
salut,
pour les ZR imbriquées, j'utilise une classe que je met dans l'attribut de la première ZR
je lie le champ CFI a cet attribut
puis dans la FI qui contient la seconde ZR, je récupère la valeur dans une variable de la même classe et je travaille avec ma classe locale dans la FI
je n'envoie donc a la première ZR qu'une seule variable(ma classe)

--
José
Publicado em abril, 19 2024 - 9:51 AM
Bonjour, merci pour vos réponses et désolé pour le retard de la mienne, j'étais sur un autre projet.

As-tu tenté la création d'une ligne vide et l'initialisation de ton CFI via ChangeFenêtreSource ?

Oui, et mon problème reste toujours le même (cf un peu plus bas dans ma réponse)

Ton problème de "cochage" impossible ne viendrait il pas du fait que ta FI est liées à la CFI ?

La FI est forcément liée à une CFI non ? Pour le coup, je n'ai plus eu ce problème, il est possible que j'ai mal interprété ce que je voyais (dans le sens où comme j'ai 3 zones répétées, j'ai peut-être confondu les descriptions).

salut,
pour les ZR imbriquées, j'utilise une classe que je met dans l'attribut de la première ZR
je lie le champ CFI a cet attribut
puis dans la FI qui contient la seconde ZR, je récupère la valeur dans une variable de la même classe et je travaille avec ma classe locale dans la FI
je n'envoie donc a la première ZR qu'une seule variable(ma classe)

J'avoue ne pas être encore très à l'aise avec les classes, pourrrais-tu détaillé ton procédé stp ?


Pour le moment, je fais sans fenêtre interne, une imbrication simple de zones répétées.
Seulement, je me heurte de nouveau à un problème de mise en page.

En effet, les zones répétées ne s'adaptent pas en hauteur selon le contenu, par exemple certains projets vont avoir 3 tâches, d'autres beaucoup plus, ou un projet tout juste créé n'en aura pas.
Il en est de même pour les sous-tâches.
À la place, un ascenseur apparaît pour permettre la navigation, cependant ce n'est ni esthétique, ni pratique à l'utilisation dans mon cas.

C'est pourquoi j'aimerais parvenir à avoir des zones répétées qui s'adaptent automatiquement en fonction de leur contenu.
Après qlq recherches, je suis tombé sur les fenêtres internes avec un champ disposition (champ que j'ai l'habitude de manipuler), cependant malgré l'exemple : "WW_ZoneRepetee_PageInterne" que j'ai trouvé, je n'arrive pas à comprendre la logique pour l'adapter à mon projet.

J'obtiens toujours l'erreur concernant le passage de paramètres au lancement de mon GO:

Les paramètres d'appel du code 'Déclarations globales de FI_Tache' sont incorrects : on attendait 5 paramètres et on en a reçu 0.


Or dans mon code, j'éxecute bien:
ZoneRépétéeModifieFI(ZR_ProjetSS,Projet.IDProjet,FI_Tache,Tache.IDTache,Tache.Cloture,Tache.Libelle,"intervenant",DateVersChaîne(Tache.DateFinEstimee))


Après avoir déclaré dans FI_Tache:
Procedure MaFenêtre(idTache est un entier sur 8 octets, Cloture est un booléen, tacheLiee est une chaîne, intervenant est une chaîne, dateFin est une Date)


Merci à vous, bonne journée.
Membro registado
3.897 mensagems
Popularité : +227 (347 votes)
Publicado em abril, 19 2024 - 11:34 AM
Jerome a écrit :
La FI est forcément liée à une CFI non ?

Non, tu peux très bien créer un CFI "vierge" et tout gérer via ChangeFenêtreSource. e.g. Dans une fenêtre principale personnel tu peux intégrer un CFI (CFI_Service) qui pourra afficher soit la FI compta, soit la FI BPers ...

--
Il y a peut être plus simple, mais, ça tourne
Membro registado
494 mensagems
Popularité : +24 (30 votes)
Publicado em abril, 20 2024 - 3:36 PM
si tu ne veux pas utiliser une classe, je te conseille de mettre des valeurs par défaut aux paramètres de ta FI, ca t’évitera des problèmes qui peuvent être justement ceux que tu as.
la fi se crée a l'initialisation, mais comme elle n'a pas de paramètres par défaut et que rien ne lui est envoyé, elle déclenche une erreur, je pense que ton plantage est lié à ça

--
José
Publicado em abril, 22 2024 - 9:35 AM
Non, tu peux très bien créer un CFI "vierge" et tout gérer via ChangeFenêtreSource. e.g. Dans une fenêtre principale personnel tu peux intégrer un CFI (CFI_Service) qui pourra afficher soit la FI compta, soit la FI BPers ...


Oui effectivement, j'avais déjà testé cette méthode sans succès.

si tu ne veux pas utiliser une classe, je te conseille de mettre des valeurs par défaut aux paramètres de ta FI, ca t’évitera des problèmes qui peuvent être justement ceux que tu as.
la fi se crée a l'initialisation, mais comme elle n'a pas de paramètres par défaut et que rien ne lui est envoyé, elle déclenche une erreur, je pense que ton plantage est lié à ça


Effectivement avec des valeurs par défaut, je n'ai plus mon erreur d'envoi de paramètres ! Merci !


Cependant, malgré le champ disposition, je vois toujours les ascenseurs de mes zones répétées et ces dernières ne semblent pas s'adapter au champ disposition, pourtant, si je me base sur l'exemple de Webdev "WW_ZoneRepetee_PageInterne" (pour rappel, je suis sur un projet Windev donc j'imagine qu'il y a des choses qui ne sont pas identiques, seulement je n'arrive pas à trouver d'exemple sous Windev) cela ne devrait pas poser de soucis.

Si je comprends bien la logique:
Dans ma fenêtre "Projets", j'affiche une ZoneRépétée ZR_Projets.
Cette ZR_Projets, je viens la remplir via une Fenetre Interne FI_Projet.
Dans FI_Projet, je place, dans un champ Disposition, tous les champs des informations de mes projets que je souhaite (Libellé, responsable, date de fin etc...) et c'est cette Fenetre interne qui représentera les lignes de ma ZR_Projet.

Si je souhaite afficher les tâches associées à un projet, dans ma FI_Projet, dans une seconde cellule de mon champ disposition, je place une zone répétée et je reprends le même principe : ZoneRepetee ZR_Taches remplie via une Fenêtre Interne FI_Tache et je créais cette FI dans laquelle je place les champs à afficher dans un champ disposition et ainsi de suite pour les Sous Tâches ?

Je ne sais pas si je suis bien clair

Merci à vous pour votre temps et votre aide.
Bonne journée !
Membro registado
494 mensagems
Popularité : +24 (30 votes)
Publicado em abril, 22 2024 - 1:10 PM
il me semble avoir eu le souci de redimensionnement
je l'ai contourné en agrandissant la hauteur de ma fi par programmation en lui donnant la hauteur d'une ligne zr * nb de lignes, un truc comme ca

--
José
Membro registado
3 mensagems
Publicado em abril, 22 2024 - 1:56 PM
Bonjour,

Pour ton problème de coche

Dans ma première zone répétée, "ZR_Projets", il m'est impossible de cocher la case "Utiliser une fenêtre interne par ligne" (dans l'onglet "contenu" de sa descriptiJerome a écrit :

, cela vient de

"ZR_Projets" contient des champs libellés à mettre à jour pour chaque projet + une Zone Répétée "ZR_Tâches".

Perso, j'ai constaté que dès que tu mets un champ dans une ZR, la coche devient inactive. Si tu laisse ta ZR vierge et que tu vas inclure une fenêtre interne dedans contenant tous les champs, elle sera cochable. J'ai cru comprendre qu'une ZR dans une ZR devait être gérée comme cela, par FI et pas directement comme un champ.
Publicado em abril, 22 2024 - 3:47 PM
Bonjour,

Pour ton problème de coche

Dans ma première zone répétée, "ZR_Projets", il m'est impossible de cocher la case "Utiliser une fenêtre interne par ligne" (dans l'onglet "contenu" de sa descriptiJerome a écrit :

, cela vient de

"ZR_Projets" contient des champs libellés à mettre à jour pour chaque projet + une Zone Répétée "ZR_Tâches".

Perso, j'ai constaté que dès que tu mets un champ dans une ZR, la coche devient inactive. Si tu laisse ta ZR vierge et que tu vas inclure une fenêtre interne dedans contenant tous les champs, elle sera cochable. J'ai cru comprendre qu'une ZR dans une ZR devait être gérée comme cela, par FI et pas directement comme un champ.


Bonjour, oui effectivement, j'en suis arrivé à la même conclusion

je l'ai contourné en agrandissant la hauteur de ma fi par programmation en lui donnant la hauteur d'une ligne zr * nb de lignes, un truc comme ca


J'ai fait quelques tests avec cette méthode, malheureusement soit ça ne change rien (j'ai toujours les ascenseurs et la hauteur de n'adapte pas) soit les ascenseurs disparaissent bien, mais toutes les itérations de la ZR changent de taille
Par exemple: sur un "Projet" je vais avoir 2 tâches, mais dans un autre 6, donc toutes les hauteurs vont prendre la hauteur des 6 lignes Taches.

Mais de logique, si ma ZR est dans un champ Disposition, le champ disposition devrait s'agrandir automatique en fonction du nombre de lignes de ma ZR non ?