banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 11 March 2021 09:02

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

QGIS 3.16: Contraintes multiples par expression (renforce et non)

Bonjour,

J'aurais souhaité mettre des contraintes par expression sur l'un de mes attributs : une des contraintes serait renforcée (obligée d'être respectée) mais l'autre n'afficherait qu'un avertissement sans être obligatoire. Y a-t-il un moyen de faire ce genre de chose ?

Merci d'avance !

Hors ligne

 

#2 Thu 11 March 2021 09:58

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1103

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Bonjour,

Je ne suis pas sûr d'avoir bien compris. Vous voulez mettre deux contraintes sur le même champ (une "souple" et une "sévère" en fonction de l'attribut saisi ?) Ou bien est-ce sur deux champs différents ?
Les contraintes sont paramétrables dans les propriétés de la couche, rubrique 'Formulaire d'attributs'- Onglet 'Contraintes'

Hors ligne

 

#3 Thu 11 March 2021 10:12

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

C'est bien ça : je souhaite en mettre deux (une souple et une sévère) sur le même champ.


Concrètement j'ai un champs "Système d'assainissement" :

- contrainte souple : je souhaite que ce champs soit null si le réseau est du pluvial (c'est un autre champ qui donne cette info). Car théoriquement le pluvial ne doit pas être raccordé au reste du réseau (mais en pratique ça peut arriver donc je veux que cette contrainte soit souple)

- contrainte sévère : il ne doit pas y avoir de ";" dans le nom (en valeur par défaut le formulaire va chercher tous les système d'assainissement de la commune et les concaténer avec ";" comme séparateur => ça oblige à choisir l'un des SA si QGIS en trouve plusieurs)

Hors ligne

 

#4 Thu 11 March 2021 10:20

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1103

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Ok, je viens de tester rapidement. Tu devrais pouvoir y arriver en saisissant une expression dans l'onglet 'Contraintes' qui utilise la fonction if ou CASE WHEN. Il ne faut pas oublier de cocher la contrainte 'Renforcer la contrainte par expression pour que ça fonctionne. Peux-tu me mettre un extrait de ta couche pour que je teste ?

Hors ligne

 

#5 Thu 11 March 2021 11:00

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Tu as réussi à mettre un critère souple et un sévère sur le même champ ?
Voici en pj un extrait (mon projet étant un peu complexe j'ai essayé de mettre un exemple minimaliste qui fonctionne, le champ SA (système d'assainissement) est dans le deuxième onglet du formulaire)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Thu 11 March 2021 13:27

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1103

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Bon, je n'y arrive pas. Je cherche et reviens vers toi. La structuration de tes données est assez chouette !

Dernière modification par GlaDal (Thu 11 March 2021 13:38)

Hors ligne

 

#7 Thu 11 March 2021 15:33

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Merci et.. merci ^^"

Hors ligne

 

#8 Thu 11 March 2021 16:19

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3946

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Bonjour,

- contrainte sévère : il ne doit pas y avoir de ";" dans le nom (en valeur par défaut le formulaire va chercher tous les système d'assainissement de la commune et les concaténer avec ";" comme séparateur => ça oblige à choisir l'un des SA si QGIS en trouve plusieurs)


Quid de proposer une liste déroulante des items possibles dont null serait une valeur, acceptable seulement pour le pluvial, plutôt qu'une zone de texte à remplir?
J'essaie de comprendre

- contrainte souple : je souhaite que ce champs soit null si le réseau est du pluvial (c'est un autre champ qui donne cette info). Car théoriquement le pluvial ne doit pas être raccordé au reste du réseau (mais en pratique ça peut arriver donc je veux que cette contrainte soit souple)


Ca veut dire que, si c'est du pluvial, ça peut être null comme ça peut ne pas l'être. c'est ça? Auquel cas, ce n'est donc pas une contrainte sur le caractère pluvial du truc. Mais plutôt, sur les autres valeurs: si ce n'est pas pluvial, ça doit ABSOLUMENT être renseigné. Mais dans tous les cas, qu'il y ait info ou pas, on ne veut pas de ;.

Code:

if( "TYPRESEAU" not in ('1'), regexp_match("SA",';')=0 and length("SA")>=1,"SA" is null or regexp_match("SA",';')=0)

Je n'ai pas tout testé mais le widget semble changer de couleur selon le type de réseau sélectionné.

Hors ligne

 

#9 Thu 11 March 2021 17:44

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Merci pour ton retour SANTANNA,

Ton code semble faire la même chose que le mien, le souci étant que là les deux contraintes sont liées : soit les deux sont souples (et on peut valider le formulaire même si le widget est orange) soit les deux sont sévères (et donc je ne pourrais pas valider le formulaire si j'ai du pluvial et tout de même un SA de renseigné).
PS : mon code :

Code:

regexp_match("SA",';')=0 AND if( "TYPRESEAU" not in ('1'),"SA" is not null,1)

Pour l'idée de liste déroulante il y a un certain nombre de SA différents et je ne les connais pas encore tous. La liste serait proposée avec les mêmes possibilités ? Mais dans ce cas on pourrait vite oublier de sélectionner le bon, c'était pour moi l'intérêt de les concaténer et d'avertir l'utilisateur tant qu'il n'aura pas choisi le bon.

Hors ligne

 

#10 Fri 12 March 2021 10:29

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3946

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Bonjour,

et donc je ne pourrais pas valider le formulaire si j'ai du pluvial et tout de même un SA de renseigné)


Hum, je suis un peu largué. N'est-ce pas ce qui était voulu? Le code proposé est basé sur tout le laïus qui précède et notamment ma reformulation/question précédente: si c'est du pluvial, ça peut être null comme ça peut ne pas l'être. c'est ça? mais visiblement, la réponse est non. Si pluvial doit toujours avoir un SA vide, alors ceci devrait être bon

Code:

if( "TYPRESEAU" not in ('1'), regexp_match("SA",';')=0 and length("SA")>=1,"SA" is null)

Si toujours pas bon, prière de bien vouloir détailler les conditions sous forme de points (liste à cocher).

Pour l'idée de liste déroulante il y a un certain nombre de SA différents et je ne les connais pas encore tous. La liste serait proposée avec les mêmes possibilités ?


La liste serait la contrainte: il faut que la valeur saisie soit contenue dans cette liste. Et je pense qu'une liste peut être extensible.
Peut-être aussi voir du côté de https://north-road.com/drill-down-cascading-forms/

Mais dans ce cas on pourrait vite oublier de sélectionner le bon, c'était pour moi l'intérêt de les concaténer et d'avertir l'utilisateur tant qu'il n'aura pas choisi le bon.


Le terme "sélectionner" est mal utilisé ici à mon humble avis. Le schéma actuel propose aux utilisateurs de saisir la donnée dans ce champ, donc une erreur est vite arrivée, et donc de nouvelles valeurs de SA ajoutées à la base. En proposant une liste, les valeurs possibles sont déjà limitées, et je ne pense pas qu'il y ait plus de risque que la personne sélectionne une mauvaise entrée que d'habitude.
Après, j'écris ça, j'écris rien hein! big_smile Ça fait un bail que je n'ai pas fait de personnalisation de formulaire donc je ne suis peut-être plus à la page...

Hors ligne

 

#11 Fri 12 March 2021 16:43

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Bonjour et merci pour ton retour, désolé si je ne suis pas clair ^^" je vais essayé de clarifier tout ça :
SI réseau non-pluvial ALORS "SA" non null (contrainte sévère) et pas de ';' (contrainte sévère)
SI réseau pluvial ALORS "SA" null (contrainte souple) et pas de ';' (contrainte sévère)

Par contrainte sévère j'entends qu'on ne peut pas valider le formulaire si la condition n'est pas remplie
Par contrainte souple j'entends que le widget affiche un avertissement mais n'empêche pas de valider le formulaire

Je pense que du coup on ne peut pas mélanger les deux types de contraintes en une seule expression, parce que le choix d'une contrainte souple ou sévère se fait en dehors de celle-ci... Mais je me disais que peut-être il y aurait eu possibilité de renseigner plusieurs expressions ?

Pour l'idée de la concaténation que je préfère à la liste :
J'ai une valeur par défaut qui récupère les SA de la commune à l'aide des entités ayant le même début d'identifiant (trigramme qui correspond à la commune). Ainsi QGIS propose à l'utilisateur soit un SA unique en valeur par défaut (car le seul sur la commune) soit une concaténation des 2 ou 3 SA présents sur la commune.
Mais je travaille sur presque 100 communes donc je vois mal l'utilisateur scroller une liste de 100 SA pour trouver le bon. (EDIT : le Drill-down permettrait d'avoir seulement les 2-3 SA de la commune en fait donc argument invalide ^^")
Et s'il y a un SA de présélectionné par défaut ce n'est peut-être pas le bon (dans le cas où il y a plusieurs SA sur la commune).
Alors oui le défaut de mon système c'est que si l'utilisateur se trompe en effaçant incorrectement les mauvais SA ça rajoutera un SA dans les prochaines "listes" :
'STEP de Pont d'Oir ; Lagunage de la Mazure'   =>(utilisateur efface bien la mazure et le ; )=>   'STEP de Pont d'Oir'
'STEP de Pont d'Oir ; Lagunage de la Mazure'   =>(utilisateur efface mal la mazure et le ; )=>   'STEP de Pont d'Oir '
====> 'STEP de Pont d'Oir ; Lagunage de la Mazure ; STEP de Pont d'Oir ' dans les prochaines propositions (avec un espace en trop du coup)

Dernière modification par aheurion (Fri 12 March 2021 16:44)

Hors ligne

 

#12 Mon 15 March 2021 11:54

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3946

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Hello

Par contrainte sévère j'entends qu'on ne peut pas valider le formulaire si la condition n'est pas remplie
Par contrainte souple j'entends que le widget affiche un avertissement mais n'empêche pas de valider le formulaire


Oui, on est d'accord. C'est bien ce que j'avais compris.
Si j'essaie (désolé, je suis dur de la feuille le lundi matin!) de reformuler, l'utilisateur choisit:
- un réseau non pluvial, alors il DOIT renseigner un SA qui ne contient pas de ";". Autrement il ne peut valider son formulaire. ce champ est donc forcément non null.
- un réseau pluvial, alors il peut:
   - soit laisser le champ SA vide et donc il pourra valider le formulaire
   - soit indiquer un SA qui ne doit pas contenir de ";" (donc le champ n'est plus null) et il pourra toujours valider le formulaire

Ai-je bon?

Je pense que du coup on ne peut pas mélanger les deux types de contraintes en une seule expression, parce que le choix d'une contrainte souple ou sévère se fait en dehors de celle-ci... Mais je me disais que peut-être il y aurait eu possibilité de renseigner plusieurs expressions ?


Perso, je pense que c'est possible. Il suffit juste de trouver la bonne formulation du besoin à retranscrire dans une expression qui permet/interdit au bon endroit.

Hors ligne

 

#13 Mon 22 March 2021 11:44

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 143

Re: QGIS 3.16: Contraintes multiples par expression (renforce et non)

Oui c'est bien ça, et la formule marche bien pour ça.
J'aurais juste souhaité que le widget affiche bien un avertissement (mais qui n'empêche pas de valider le formulaire) lorsque le réseau est pluvial et le SA est non null (pour dire : "Attention ! C'est du pluvial, vous indiquez un SA donc ça signifie que le pluvial se rejette dans l'eau usée, êtes-vous sûr ?" => c'est rare mais ça peut arriver).
Tu penses toujours qu'il y a moyen d'avoir ça ?

(N.B.: c'est les plantes qui ont les feuilles les plus dures qui résistent le mieux aux contraintes les plus agressives ^^)

Dernière modification par aheurion (Mon 22 March 2021 14:38)

Hors ligne

 

Pied de page des forums

Powered by FluxBB