#1 Tue 16 November 2021 08:50
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
QGIS: Valider selon contraintes multiples
Bonjour,
J'aimerais ajouter certaines contraintes dans le remplissage d'un champ particulier.
Dans la théorie, il faudrait que :
Si le champ "Précision" ne propose pas de liste déroulante alors (liste qui se charge en fonction du contenu dans "Code_esp") :
Si le champs "Pla-cort" (situé sur une autre couche ("TERRAIN_SAISIE_LISTE_PT" ; les deux sont mises en relation) est vide, alors :
Si dans le champs "Code_esp" il n'y a pas de doublons alors :
> Remplissage possible
Si le champs "Code_esp" contient un doublon alors :
Si le champ "Ret_lim" est = à "True" (case à cocher) alors :
> Remplissage possible
Sinon
> Remplissage non autorisé
Si le champ "Pla-cort" n'est pas vide :
Si dans le champs "Code_esp" il n'y a pas de doublons alors :
> Remplissage possible
Si le champs "Code_esp" contient un doublon alors :
Si le champ "Ret_lim" est = à "True" (case à cocher) alors :
> Remplissage possible
Sinon
> Remplissage non autorisé
Si le champ "Précision" propose une liste déroulante alors :
Si aucun choix n'a été sélectionné :
> Remplissage non autorisé
Si un choix a été sélectionné
> Remplissage possible
J'ai commencé à essayer des codes, sans succès..
En voici un qui me semblait le plus proche de ce que je veux :
Code:
left("Code_esp",1)=upper(left("Code_esp",1)) AND CASE WHEN "Précision" = '' THEN CASE WHEN aggregate("TERRAIN_SAISIE_LISTE_PT","Pla-cort", min_length) = 0 THEN CASE WHEN "Ret_lim" = 'True' or "Ret_lim" = True THEN count("Code_esp","Code_esp") >= 0 Else count("Code_esp","Code_esp") = 0 END Else CASE WHEN "Ret_lim" = 'True' or "Ret_lim" = True THEN count("Code_esp","Code_esp") >= 0 Else count("Code_esp","Code_esp") = 0 END END Else "Précision" <> '' END
Ce champ "Précision" est une liste déroulante qui est chargée lorsque certains codes sont renseignés dans "Code_esp" ; je ne sais pas si utiliser "Précision" = '' revient à indiquer à QGIS "Le champ précision ne contient aucune liste" et "Précision" <> '' "Le champ précision contient une liste"
Je vous remercie de votre attention,
Bonne journée !
Dernière modification par Giene (Tue 16 November 2021 08:53)
Hors ligne
#2 Wed 17 November 2021 08:47
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
Re: QGIS: Valider selon contraintes multiples
Bonjour,
J'ai corrigé quelques éléments de mon code et fait quelques tests manuellement.
Si le champ "Précision" ne propose pas de liste déroulante alors (liste qui se charge en fonction du contenu dans "Code_esp") :
Si le champs "Pla-cort" (situé sur une autre couche ("TERRAIN_SAISIE_LISTE_PT" ; les deux sont mises en relation) est vide, alors :
Si dans le champs "Code_esp" il n'y a pas de doublons alors :
> Remplissage possible
Si le champs "Code_esp" contient un doublon alors :
Si le champ "Ret_lim" est = à "True" (case à cocher) alors :
> Remplissage possible
Sinon
> Remplissage non autorisé
Si le champ "Pla-cort" n'est pas vide :
Si un doublons existe dans "Code_esp" et qu'ils possèdent la même valeur dans "Pla-cort" alors :
Si le champ "Ret_lim" est = à "True" (case à cocher) alors :
> Remplissage possible
Sinon
> Remplissage non autorisé
Sinon
> Remplissage possible
Si le champ "Précision" propose une liste déroulante alors :
Si aucun choix n'a été sélectionné :
> Remplissage non autorisé
Si un choix a été sélectionné
> Remplissage possible
Il y a un point sur lequel je bloque pour le moment :
J'ai deux couches en relation ("TERRAIN_SAISIE_LISTE_PT" = parent ; "Formulaire_Bota_v1.1" = fille)
Comment puis-je rechercher dans la couche fille, des doublons dans le champ "Code esp", possédant le même identifiant dans la couche parent, dans le champ "Pla-cort" ?
Pour le reste, je conçois que vous ne pouvez pas tellement m'aider sans vraiment visualiser le fonctionnement de mes couches. Je vais essayer de faire un fichier exemple dès que possible.
Pour résoudre mon problème, je pensais à quelque chose comme aggregate("TERRAIN_SAISIE_LISTE_PT",'count',"Pla-cort") ; mais je ne sais pas où faire figurer le champ "Code_esp" de la couche fille du coup.
Je vous remercie de votre attention,
Bonne journée !
Hors ligne
#3 Wed 17 November 2021 18:30
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3939
Re: QGIS: Valider selon contraintes multiples
Bonjour,
J'ai lu et essayé de suivre mais je suis tombé dans
e conçois que vous ne pouvez pas tellement m'aider sans vraiment visualiser le fonctionnement de mes couches
J'ai été largué. Si je puis me permettre, indiquez la finalité globale de ce que vous souhaitez, (en option, ce que vous réussissez) et l'étape à laquelle vous êtes coincé (ce que vous avez tenté). Autrement vous nous noyez et potentiellement risquez de décourager les potentielles aides.
Hors ligne
#4 Wed 17 November 2021 21:52
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
Re: QGIS: Valider selon contraintes multiples
Bonsoir,
J'ai deux couches qui sont mises en relation :
- Couche parent : "TERRAIN_SAISIE_LISTE_PT"
- Couche fille : "Formulaire_Bota_v1.1"
Lorsque je complète la couche fille,
- J'ai un champ "Ident" qui est rempli automatiquement avec un identifiant unique (uuid) (le même que dans la couche parent)
- J'ai un champ Code_esp dans lequel je rentre des codes (ex : "CODE")
- J'ai un champ précision qui se charge parfois selon le code utilisé (lorsqu'un code est associé à plusieurs correspondances dans une BDD)
- J'ai un champ Ret_lim (case à cocher) qui permet de ne pas tenir compte des restrictions pour enregistrer de force (nécessaire dans certains cas)
> Je souhaite éviter les doublons (lorsque je saisis dans le champ "Code_esp") en utilisant le contenu des champs "Ident" et "Code_esp".
Mon premier problème : Comment compter les doublons en concaténant deux champs ? (J'ai essayé diverses solutions à base de concatenate, count (en concaténant), count_distinct, etc. ... sans succès)
Il faut, par ex., vérifier l'existence de "CODE" avec l'Identifiant "1" ; à chaque fois qu'un code est renseigné dans la couche fille.
> En même temps, lorsque le champ "Code_esp" est renseigné, si des correspondances sont proposées dans la liste déroulante du champ "Précision", alors ne pas pouvoir poursuivre tant qu'aucune sélection n'a été faite.
Mon second problème : Comment vérifier si une liste a été chargée (is_empty_or_null("Précision") = true permet de vérifier que le champ n'est pas vide) et comment vérifier qu'un choix a été fait dans cette liste ?
Pour le retrait des contraintes avec Ret_lim, pas de problème car je le fais déjà.
Voila, dans l'ensemble j'ai réussi à faire fonctionner différents morceaux de codes, et ces deux problèmes me bloquent depuis plusieurs jours.
Je vous remercie de votre attention
Bonne soirée !
Dernière modification par Giene (Wed 17 November 2021 21:54)
Hors ligne
#5 Sat 27 November 2021 09:33
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
Re: QGIS: Valider selon contraintes multiples
Bonjour,
J'ai décidé de séparer certaines vérifications en ne les appliquant pas toutes dans un seul champ, mais champ après champ.
Sauriez-vous me dire ce qui cloche dans cette expression :
Code:
CASE WHEN "Pla-cort" <> NULL or "Pla-cort" <> '' THEN count_distinct("Pla-cort", "Pla-cort") =0 ELSE count_distinct("Pla-cort","Pla-cort") >=0 END
Je souhaite que si "Pla-cort" est vide (ou null), QGIS teste qu'il n'y ait aucun doublon avec la valeur saisie dans le champ "Pla-cort".
J'ai coché la case ""Renforcer la contrainte par expression".
Ce qu'il se passe c'est qu'à partir du moment où quelque chose a été saisie, la seconde saisie n'est pas possible, comme si un doublon était trouvé. Mais ça n'est pas le cas...
J'ai essayé avec count et count_distinct.
EDIT : expression corrigée, je comptais les doublons sans indiquer ce qu'est le doublon recherché. count_distinct("Pla-cort", "Pla-cort").
Bonne journée !
Dernière modification par Giene (Sat 27 November 2021 09:41)
Hors ligne
#6 Sat 27 November 2021 11:00
- Giene
- Participant actif
- Date d'inscription: 1 Dec 2018
- Messages: 75
Re: QGIS: Valider selon contraintes multiples
Bonsoir,
Pour finaliser, il reste un point sur lequel je bloque.
Dans le champ "Code_esp" je renseigne des codes. Si ce champ est rempli à partir d'un code possédant plusieurs correspondances, le champ "Précision" est alors chargé en indiquant la liste des correspondances possibles.
J'aimerais que lorsque le champ précision propose une liste, il ne soit pas possible de valider sans sélectionner un résultat. Lorsque ce champ ne propose pas de liste, alors permettre de poursuivre.
Pour le moment, je tâtonne et ai essayé quelque chose comme ça :
Code:
CASE WHEN is_empty_or_null("Précision") = true THEN is_empty_or_null("Précision") = true ELSE not is_empty_or_null("Précision") END
Le résultat est qu'à chaque test, lorsque le champ "Précision" propose quelque chose, alors je ne peux plus valider.
Bonne soirée !
Dernière modification par Giene (Sat 27 November 2021 11:10)
Hors ligne