Filtrer les enregistrement d'un formulaires
Étiquetté : filtre, formulaire, powerapps
-
Filtrer les enregistrement d'un formulaires
Posté par Tom Victor sur 17 février 2023 à 9h52Bonjour,
Je possède actuellement 3 listes :
-Liste CRM-Client (dans laquelle je crée mes clients)
-Liste CRM-Commande (dans la quelle je crée mes commandes)
-Liste CRM-détail Commandes (dans laquelle je vais créer mes lignes de commandes sur chacune de mes commandes)
L’idée est que dans mon formulaire sur ma page détail commande, je puisse faire en sorte de filtrer les commandes par rapport au client.
J’ai donc essayé ceci dans l’onglet Item :
Cela fonctionne en partie cependant si une commande ne possède pas de ligne de commande elle ne sera pas trouvé dans la sélection des commandes puisque la commande n’existe dans la liste “CRM-Détail commande” tant qu’on ne rentre pas une ligne de commande.
Ma question est donc la suivante :
Est-il possible de filtrer les commandes de ma liste “CRM-Commande” par rapport a mes clients afin que lorsque je sélectionne mon client seul ses commandes apparaisent et que le nom de la commande qu’il a sélectionne soit enregistré dans ma colonne “Commande” de ma liste “CRM-détail client” ?J’espère avoir était claire dans mon explication !
Merci d’avance !
Tom Victor
PostID=wVEkrzcD5VIJ3Ae
R3dKap a répondu Il y a 11 mois, 4 semaines 1 Membre · 32 Réponses -
32 Réponses
-
Salut Tom Victor,
C’est très clair. Merci pour les explications détaillées.
Alors, au vu de ton cas, et pour que l’expérience utilisateur soit la meilleure, je viserais l’objectif suivant :
-
la combo box Cde (en-dessous de Client) reste grisée tant qu’un client n’a pas été choisi
-
une fois qu’un client a été choisi, la combo box Cde se déverrouille et n’affiche que les commandes du client
-
une fois qu’une commande a été choisie, la galerie affiche les lignes de détail de la commande
-
en cliquant sur une ligne de la galerie, cela affiche le panel de droite où l’on peut modifier la ligne de la commande (du coup il ne devrait y avoir qu’un bouton ENREGISTRER)
-
je mettrais un bouton NOUVELLE LIGNE en haut à droite au-dessus de la galerie qui affiche le détail de la commande
-
et sur chaque ligne de la galerie je mettrais tout à droite un icône POUBELLE pour supprimer une ligne si nécessaire
-
dans le panel de droite qui s’affiche lorsque l’on clique sur une ligne ou lorsque l’on clique sur NOUVELLE COMMANDE il y aurait le formulaire branché sur ta liste CRM-Détail commandes : dans ce formulaire, le datacard contenant la commande serait masqué et automatiquement alimenté à partir de la combo box Cde (en-dessous de Client)
Ca t’irait comme mode de fonctionnement ?
CommentID=4Dt3AYMeJnuTvC7, PostID=wVEkrzcD5VIJ3Ae
-
Salut R3dKap
Merci pour votre réponse.
Yes, ce fonctionnement me parait très clair et plutot simple d’utilisation pour les utilisateurs.
SubCommentID=hb0aSE2quru62c3, CommentID=4Dt3AYMeJnuTvC7, PostID=wVEkrzcD5VIJ3Ae
-
j’ai un peu de mal au niveau du filtrage, pour filtrer l’affichage des commandes par rapport au client pour le moment j’ai appliqué cette formule dans la combo box de cde (en haut à gauche) :
Distinct(
ForAll(
Filter(
‘CRM-Détail Commandes’;Client.Value=ddlClient.Selected.Value).Commande;Commande
)
;Value)
cela filtre les commandes en fonction des clients mais seulement les commandes qui possède déjà une ligne de commande. Cependant j’aimerais aussi que le client puisse voir ses commandes qui n’ont pas encore de ligne de commande pour pouvoir les ajouté par la suite.
En parrallèle je me renseigne comment griser la combo box cde tant qu’un client n’est pas choisi.
SubCommentID=wU4KlAvYhgzu8Tx, CommentID=4Dt3AYMeJnuTvC7, PostID=wVEkrzcD5VIJ3Ae
-
C’est parce que tu dois aller chercher tes commandes dans ta table commande, ce sera beaucoup plus simple :
Filter(n CRM-Commande;n Client.ID=ddlClient.Selected.IDn)
et si tu souhaites afficher toutes les commandes si il n’y pas de client sélectionné :
Filter(n CRM-Commande;n Or(n Client.ID=ddlClient.Selected.ID;n IsBlank(ddlClient.Selected)n )n)
SubCommentID=iv2qF6vnsWq28XD, CommentID=4Dt3AYMeJnuTvC7, PostID=wVEkrzcD5VIJ3Ae
-
Bonjour Jonathan Copin
Yes cependant si je fais comme ça, comment je dois procéder pour afficher les lignes de commandes qui sont stocké dans ma liste “CRM-détail Commande” en fonction de la commande qui est sélectionné si je vais chercher mes commandes dans ma liste “CRM-Commande” ?
Dans ma gallery j’ai fais un filter :
Cela me permet d’afficher seulement les lignes de commandes de la commande sélectionner. Cependant mon problème, et que les commandes qui n’ont aucune ligne de commande ne peuvent pas être sélectionné dans ma combo box cde.
Si j’applique votre filtre :
Filter(
CRM-Commande;
Client.ID=ddlClient.Selected.ID
)
Je peux effectivement sélectionner toutes les commandes du client sélectionné (ce qui résout mon problème). Cependant le filtre de ma gallery ne fonctionne plus, Puisque je filtre cde depuis ma liste “CRM-commande” et non “CRM-détail Commande”.
SubCommentID=YtJNaDKdPoRSPZO, CommentID=4Dt3AYMeJnuTvC7, PostID=wVEkrzcD5VIJ3Ae
-
-
Tom Victor comme indiqué par Jonathan Copin la combo box qui affiche la liste des commandes en fonction du client doit effectivement faire un filtre sur la liste des commandes.
En gros, c’est assez simple…
-
J’ai envie d’afficher une liste de commandes ? Je filtre sur la liste des commandes !
-
J’ai envie d’afficher une liste de lignes d’une commande ? Je filtre sur la liste de détail des commandes !
Donc, pour la combo box des commandes en fonction du client, le code de Jonathan Copin devrait fonctionner.
Et pour la galerie, il suffit de filter la liste CRM-Détail commandes en fonction de la commande sélectionnée dans la combo box :
Filter('CRM-Détail commandes'; Commande.Value = DropDown_Commande.Selected.ID)
Plusieurs choses :
-
Si tu as bien conçu ton modèle de données, chaque commande doit avoir un numéro unique (quel que soit le client) -> donc, pas besoin de préciser le client dans le filtre sur le détail d’une commande -> d’ailleurs tu ne devrais même pas avoir de colonne Client dans ta liste de détail -> la logique c’est : une ligne de détail est liée à une ligne de commande qui est elle-même liée à une ligne de client, c’est tout…
-
Si tu mets le code de Jonathan Copin dans ta combo box des commandes, alors la structure de ton
.Selected
de ta combo box sera celle de ta liste SharePoint -> c’est pour ça que j’ai misDropDown_Command.Selected.ID
car j’ai supposé que c’est la colonne ID de SharePoint qui sert de numéro de commande unique
Est-ce que t’as besoin d’aide pour mettre en place la logique générale de tout ça ?
CommentID=jLkUP4QfTYQrfNn, PostID=wVEkrzcD5VIJ3Ae
-
-
Pour compléter le filtre de R3dKap je dirais même :
Filter(n 'CRM-Détail commandes';n //Filtrer sur les commandes et tout afficher si rien de sélectionnén Or(n Commande.ID= DropDown_Commande.Selected.ID;n Isblank(DropDown_Commande.Selected)n );n //Filtrer sur les clients (si client est également renseigné dans 'CRM-Détail commandes') et tout afficher si rien de sélectionnén Or(n Client.ID=ddlClient.Selected.ID;n IsBlank(ddlClient.Selected)n )n)
CommentID=PTQfVTH5dY1Ka9d, PostID=wVEkrzcD5VIJ3Ae
-
Même si la formule de Jonathan Copin est correcte, je pense qu’en terme d’expérience utilisateur c’est à éviter (pardon Jonathan Copin 😉).
En effet, la galerie a pour objectif d’afficher le détail d’une commande. C’est sa raison d’être. Il faut donc obligatoirement choisir une commande pour en voir le détail. Afficher le détail de plusieurs commandes pour un client pour moi n’a pas vraiment de sens. Et encore une fois, le client ne doit pas faire partie de la liste CRM-Détail commandes.
Suggestion pour améliorer l’expérience de l’utilisateur :
-
je créerai visuellement un panel sur le côté gauche de l’écran où je mettrais :
-
la liste déroulante pour choisir le client
-
juste en-dessous une galerie qui afficherait la liste des commandes du client choisi (triées par date décroissante)
-
-
au clic sur une une commande de la galerie à gauche on verrait immédiatement le détail de la commande dans la galerie centrale
Cela faciliterait la navigation entre les commandes d’un même client…
🙂
CommentID=dQSwjoGFoRWFCaZ, PostID=wVEkrzcD5VIJ3Ae
-
Je le prends bien R3dKap 😄 J’avais oublié qu’on ne voulait affiché que le détail d’une commande…
SubCommentID=JIAjlT2HpCaYBAU, CommentID=dQSwjoGFoRWFCaZ, PostID=wVEkrzcD5VIJ3Ae
-
-
Bonjour R3dKap et Jonathan Copin
Désolé pour la réponse un peu tardive, et merci pour vos réponse 😄
si possible je veux bien un petit coup de main pour mettre en place tout ça 🙂Actuellement j’avais recréer une colonne recherche pour client et commande dans chaque liste afin de pouvoir récupérer mes clients et commandes dans chaque liste et je cherchais a filtré ça. Cependant de ce que j’ai compris c’est qu’il faut pas s’y prendre commande ça et utiliser l’id de client (donc je suppose que c’est la colonne ID dans la liste CRM-Client”) et l’ID de la commande (donc la colonne ID dans “CRM-commande”) c’est bien ça ?
en faisant ça je pourrais supprimé les colonnes client et commande dans “CRM-Détail-Commande”
CommentID=RYbmr0QdmqF7IRg, PostID=wVEkrzcD5VIJ3Ae
-
En partant de cela, ça voudrait dire que je n’ai pas besoin de colonne “client” dans “CRM-commande” ? (j’avais créé une colonne recherche pour “client” pour récupérer mes clients créé qui sont dans “CRM-Client”).
CommentID=nObWelh5vYqQG9c, PostID=wVEkrzcD5VIJ3Ae
-
Tom Victor alors comme je dis toujours : le modèle de données c’est le socle de ton application. Il faut qu’il soit bien propre pour que ton application coule de source derrière.
Pour bien formaliser les choses, je recommande toujours de faire un schéma. Je propose dans ce post un modèle de PPT qui te permet de faire ça :
Dans ton cas de figure, ça devrait ressembler à ça à priori :
Voici un lien vers le fichier PPT qui contient ce début de modèle de données pour que tu puisses l’utiliser. Je t’encourage à le compléter en entier avec toutes tes listes et toutes tes colonnes et à le reposter ici parce-que ça aide énormément à comprendre comment l’application est structurée…
En fait pour construire un modèle de données, on essaie de représenter la réalité :
-
j’ai un ensemble de clients -> liste Clients
-
ces clients peuvent passer plusieurs commandes -> liste Commande où il faut que je sache à quel client est rattachée la commande donc j’y mets une colonne Client qui pointe vers la liste Clients
-
dans chaque commande je peux avoir plusieurs lignes -> liste Lignes commandes où il faut que je sache à quelle commande appartient chaque ligne donc j’y mets une colonne Commande qui pointe vers la liste Commandes
-
etc…
Tu me suis ?
Dis-moi si t’as bien réussi à récupérer le PPT…
Une fois que ton modèle de données est propre, à ce moment-là tu maquettes ton écran et tu décris comment il est censé fonctionner. Et une fois que ta maquette est prête, là tu développes… Ce travail en amont est nécessaire car il te facilite énormément la vie au final… Et aussi à celui qui reprend ton application après toi si un jour tu la lâches… 😉
CommentID=XmwYNntbcZsw1E9, PostID=wVEkrzcD5VIJ3Ae
-
yes, je l’ai bien reçu, j’ai déjà fait mon modèle de données sur papier je vais le refaire sur le ppt pour que vous puissiez le voir dans la journée 😄
SubCommentID=tM8yxGwmKWv93oX, CommentID=XmwYNntbcZsw1E9, PostID=wVEkrzcD5VIJ3Ae
-
-
Voilà mon modèle de données, j’ai rajouté et modifié certaine chose :
Si il y a des choses qui ne vont pas je suis preneur de toute suggestion (je fais pas souvent de modèle de donnée et de la création d’application).
Voila le lien vers le ppt, dis moi si tu as réussi à le récupérer 🙂
CommentID=mpPS5zNqfEtXYzH, PostID=wVEkrzcD5VIJ3Ae
-
Très bien… Pas besoin du PPT (pour l’instant), je vois très bien le modèle comme ça…
Alors, c’est nickel pour les clients, les commandes et les lignes commandes. Par contre, je suis pas sûr de comprendre fonctionnellement les prestations et la facturation.
Est-ce que tu pourrais m’expliquer chacun uniquement en terme métiers/besoin et ce que tu voudrais en faire (sans parler technique) ?
CommentID=ygkgma0HJSRwaoL, PostID=wVEkrzcD5VIJ3Ae
-
Yes, La page facturation va facturer les commandes donc on doit pouvoir facturer une ou plusieurs lignes de commande d’une commande. L’idéal serait que la quantité se mette à jour automatiquement sur la ligne de commande après que l’on est facturée cette dernière pour savoir ce qu’il reste à facturé sur une ligne de commande.
La prestation est là pour nous servir de statistique, on peut faire une prestation sur une ou plusieurs lignes de commande d’une commande. L’idée est de comparé par exemple (sur power BI) le temps réel passé sur une tâche (donc le temps qu’on a rentré dans la prestation) et le temps facturé (celui qu’on rentre dans la facture) pour pouvoir identifier les tâches où l’on a passé plus de temps ou au contraire voir les tâche ou l’on a passé moins de temps que prévu.
CommentID=jTgxLElPF6riVCz, PostID=wVEkrzcD5VIJ3Ae
-
Tom Victor, merci pour ces précisions…
La facturation
Sur le fond uniquement, sans parler technique, je ne comprends pas bien le principe de ne facturer qu’une partie d’une commande. De manière générale, il me semble qu’une facture a pour but de payer tous les éléments d’une commande en une fois. Mais peut-être que les notions de commande/facture dans ton contexte représente des choses un peu différentes. Typiquement j’entends parler de tâches.
Est-ce à dire que tes commandes sont constituées de listes de tâches qui ne sont pas toutes réalisées au même moment ou du moins pas toutes facturées en une seule fois ?La prestation
J’ai envie de dire, pourquoi à la rigueur ne pas mettre la date de la prestation, le temps passé et le lieu de la prestation directement dans la liste Lignes commandes. Est-ce qu’on pourrait considérer que finalement cela représente quand même la réalité ?
Encore une fois, le modèle de données est censé représenter la réalité au plus proche.Autres questions
-
Quelles sont les valeurs de ton champ Unité dans Lignes commandes ?
Remarque
Peut-être que de manière générale, si tu as le temps, tu pourrais tout simplement m’expliquer votre besoin à l’origine. Car peut-être qu’avec la vision globale j’envisagerais un modèle de données différent.
CommentID=jGskXDu9I5GpRw0, PostID=wVEkrzcD5VIJ3Ae
-
-
Salut R3dKap,
-
Le champ unite désigne ce qu’on va vendre (exemples : un audit, des jours, des logiciel ect…)
-
Pour la facturation, dans mon cas une commande peut durer sur plusieurs mois car nous vendons en partie des prestations de gestions de projet pour d’autre boîtes c’est a dire que l’on va gérer les projet d’une entreprise qui ne possède pas de chef de projet généralement les projet dure sur plusieurs mois et donc nous vendons un total de jour travaillé sur la totalité du projet (exemple pour la totalité du projet on va par exemple vendre 20 jours a 500 euros/jour) cependant les 20 jours seront effectué sur plusieurs mois et nous facturons le nombre de jours travaillés par mois (exemple le premier mois nous avons passé 6 jours donc a la fin du mois nous allons facturé 6 jours a 500/jours et il restera 14 jours qu’on aura pas facturé) enfaite l’idée et de ne pas faire payer la totalité de la commande par le client directement mais plutôt de leur faire payer pour ce qu’on a travaillé. Je sais pas si j’ai été super claire.
-
Pour la prestation, donc comme expliqué précédemment une commande peut se passer sur plusieurs mois, par ailleurs on peut effectuer les différentes tâches de la commandes a divers endroit pour une ligne de commande je vais peut-être pas forcément faire tout le travail directement chez le client mais plutôt faire une partie chez le client et une autre partie en télétravail.
CommentID=OcgryQI2D9DJkOj, PostID=wVEkrzcD5VIJ3Ae
-
-
Tom Victor ok, j’ai très bien compris, merci pour les explications…
Est-ce que du coup on pourrait considérer que l’on facture plutôt une prestation qu’une commande ? Puisqu’une prestation est une portion d’une commande et que c’est cette portion qui est facturée au client, alors je dirais bien que la facture doit plutôt consister en un ensemble de prestations. Tu me suis ?
Exemple :
-
Un client commande 20 jours d’un développeur à 500 et 10 jours d’un expert à 700 (2 lignes dans Lignes commandes)
-
En janvier le développeur consomme 7 jours et l’expert 2 jours (2 lignes dans Prestation qui pointent chacune vers leur ligne correspondante dans Lignes commandes)
-
La facture de janvier contient donc 2 lignes (une ligne vers la ligne des 7j du dév. dans Prestation et une ligne vers la ligne de 2j de l’expert dans Prestation) -> de mon point de vue la quantité est une information qui doit être plutôt renseignée dans Prestation
En gros, j’adapterais ton modèle ainsi :
Voici le fichier PPT.
Quelques explications :
-
Comme expliqué précédemment, on facture une prestation et donc Facturation pointe sur 1 ou plusieurs lignes de Prestation
-
De mon point de vue, pas besoin de la colonne Tâche dans Prestation puisqu’on pointe déjà sur la Ligne/Tâche de Lignes commandes (sauf si la prestation détaille des sous-tâches éventuelles)
-
Dans Prestation on indique une quantité qui est censé être une portion de la quantité de la ligne de Lignes commandes concernée
-
J’ai rajouté le montant de la facture dans Facturation (au cas où les prix unitaires varient APRES une facturation et bien conserver le prix payé à l’époque avec l’ancien prix)
-
J’ai rajouté un indicateur de facture acquittée
Voilà… Je sais pas, qu’est-ce que t’en dis… Ca semble correspondre à ton besoin ?
Pour des jours ça fonctionne bien. Par contre, je vois pas trop comment une prestation pourrait être vendue “par morceaux” dans le cas d’un audit ou de logiciels… Peux-tu m’éclairer là-dessus ?
CommentID=gwBLzg6nr5r3NFB, PostID=wVEkrzcD5VIJ3Ae
-
-
Salut R3dKap
Je suis d’accord avec toi pour l’audit ou logiciel ça ne se vendra pas par “morceaux”.
Pour la prestation, je l’avais pas relié avec la facturation sur le modèle car le temps passé de la presta ne sera pas forcément le temps facturé. Je reprend l’exemple avec le développeur, on s’engage au près du client qu’il fera le travail en 10j cependant finalement il a fait le travail en 12j, on ne va pas facturé 12j au client car on s’est engagé à le faire en 10j. Dans ce cas là, la presta aura plus de jour que les jours facturé.
CommentID=BIJubvnx2HM75ne, PostID=wVEkrzcD5VIJ3Ae
-
Je comprends. Dans ce cas, il faut peut-être simplement mettre un peu d’intelligence dans l’application lors de la génération de la facture avec quelque chose comme :
-
si
Prestation.Quantité > Commande.Quantité
alors on factureCommande.Quantité
sinon on facturePrestation.Quantité
Mais je ne pense pas qu’il faille adapter le modèle de données à ce cas précis-là…
Tu me suis ? Est-ce que c’est logique ce que je dis ?
CommentID=TaC7YXwsxUxQ8Kr, PostID=wVEkrzcD5VIJ3Ae
-
Connectez-vous pour répondre.