j’ai créé un formulaire Grist qui rajoute des enregistrements dans une table. Il fonctionne très bien lorsqu’il n’est pas publié et que je clique sur « aperçu ». Les données sont bien enregistrées dans ma table.
La situation se complique lorsque je publie le formulaire. une fois publié j’ai la message d’erreur « Une erreur s’est produite lors de l’envoi de votre formulaire. Veuillez réessayer. »
J’ai pensé aux droits et j’ai activé le partage public du document en mode éditeur. ça n’a pas solutionné mon problème. Je vous avoue ne plus savoir ou regarder,
Ces noms de formation sont une colonne « Référence multiple » bidirectionnelle, liée à une autre table dans laquelle vous calculez le nombre de places restantes pour chaque session, et vous concaténez le nom de la session et le nombre de places restantes, afin de l’afficher dans le formulaire.
L’erreur obtenue quand on soumet votre formulaire, "error « Blocked by table update access rules »" ne semble pas correspondre au problème. En effet, j’ai aussi testé de mon côté en autorisant les droits à tout le monde sur toutes les tables, et le souci reste le même.
Le problème semble venir du fait que vous utilisez comme champ du formulaire une « référence bidirectionnelle » pour le « label affichage » de la session.
Le formulaire fonctionnera bien si vous utilisez par exemple votre colonne statique « Nom formation » .
Je comprends néanmoins votre besoin, et ce n’est pas facile à résoudre avec Grist. En fait, ce n’est pas une colonne bidirectionnelle dont vous auriez besoin, mais plutôt une colonne formule qui compte, pour chaque session, le nombre de places restantes. Mais le label de chaque session va changer puisque vous y intégrez le nombre de places restantes.
Une piste pourrait être de regarder si le nom choisi via le formulaire « contient » le nom de la session.
Bonjour Audezu,
je repredns ce dossier ce matin et je prends connaissance de votre réponse. Je n’ai pas encore eu le temps d’y apporter des modifications mais je tiens vraiment à vous remercier pour votre aide. C’est vraiment très agréable de rencontrer des personnes aussi investies et aussi partantes pour aider les autres quand elles sont dans la difficulté.
Bonjour @JacquesIB
merci beaucoup pour ce message qui me fait très plaisir
Je voulais aller au bout de l’idée alors j’ai fait un exemple simple ici : un formulaire qui permet de s’inscrire sur des sessions en affichant le nombre de places restantes : Ex - formulaire inscriptions avec quotas - Grist
Le document Grist contient 2 tables :
1 table « Sessions » avec :
– le nom de la session (Texte)
– le nombre de places maximum (Entier)
– le nombre d’inscrits : c’est la formule qui va aller regarder dans notre table d’Inscrits le nombre d’inscrits sur chaque session len(Inscrits.lookupRecords(Session_Nom=$Nom))
– le nombre de places restantes (Entier, formule simple nb max - nb inscrits)
– et le nom de la session avec le nombre de places (concaténation de la colonne nom session + nb places restantes) → c’est cette colonne qu’on affiche dans le formulaire
1 table « inscrits » avec:
– le nom de l’inscrit·e (Texte)
– le nom de la session avec nb de places restantes (qui est une référence vers la colonne de notre table « Sessions »)
– le champ rapporté « Session nom » qui est le nom « simple » de la session, rapporté depuis la table « Sessions »
L’astuce pour pouvoir calculer le nombre d’inscrits sur chaque session, est de rapporter la colonne avec le nom de sessions dans la table « Inscrits », pour pouvoir ensuite utiliser un lookupRecords. En effet, on ne peut pas directement faire : Inscrits.lookupRecords(Session.Nom = $Nom)
Car la fonction lookup ne le permet pas.
Si on voulait éviter l’utilisation d’une colonne supplémentaire, on pourrait utiliser un compteur dans une formule python qui nous permet de faire directement la comparaison :
count = 0
for inscrit in Inscrits.all:
if $Nom == inscrit.Session_Nom:
count += 1
return count
Merci beaucoup pour ce partage…
J’ai retravaillé sur mon projet, le souci que je rencontre vient du fait que je peux effectuer plusieurs choix différents j’ai donc une colonne « choix multiple » avec le texte de chaque session… Chaine de caractère que je récupère bien dans ma table des sessions mais je ne peux pas appliquer un len dessus.
ou dumoins je ne sais pas comment faire.
Je pense abandonner mon projet car ma dead line approche et je n’arrive pas a trouver une solution fiable.
Si vous voyez quelque chose d’assez rapide à appliquer je suis preneur quand même !
En effet, vu que vous avez une référence multiple il faudra utiliser la formule python et la modifier légèrement pour qu’elle recherche si la session en question fait partie de la liste de sessions sélectionnées par l’utilisateur·ice.
Cela donne :
count = 0
for inscrit in Inscrits.all:
if $Nom in inscrit.Liste_sessions:
count += 1
return count
J’espère que ça pourra vous aider, vous êtes si près du but !!
On ne peut pas ici utiliser la fonction lookup qui ne permet pas de faire de recherche dans une liste. On ne peut pas écrire par exemple Inscrits.lookupRecords($Nom in Liste_sessions)
Audezu, grâce à votre aide mon formulaire fonctionne (enfin!)
un très grand merci, je commençais à desesperer!
le document que vous avez créé et partagé a été vraiment utile pour moi et je pense qu’il pourra résoudre un certain nombre de problèmes pour d’autres.
Sur mon formulaire demeure un petit souci au niveau des permissions avancées ou mes conditions de verifications sur newRec ne fonctionnent plus. décidemment dès qu’on arrange d’un coté ça dérange de l’autre.
Si quelqu’un a des pistes je suis preneur,
en tout cas un grand merci pour votre aide… vraiment
Génial super nouvelle, ravie d’avoir pu vous aider
Pour les permissions, pouvez-vous ouvrir un nouveau sujet et expliciter votre besoin / ce qui bloque ? Peut-être avec une capture d’écran des permissions ?
Bonjour,
En effet ! Je pense que c’est parce que je l’ai passé en « modèle » entre temps, du coup le lien initial qui incluait la page ne fonctionne plus, mais vous pouvez y accéder ici :
Pour l’utiliser vous pouvez cliquer sur « Enregistrer une copie ».
Je vais modifier l’url dans le post initial, merci !