Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#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: 3807

Re: QGIS: Valider selon contraintes multiples

Bonjour,
J'ai lu et essayé de suivre mais je suis tombé dans

Giene a écrit:

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 smile


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

 

Pied de page des forums

Powered by FluxBB