1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Contrôle de saisie des champs obligatoires d'une fenêtre.

Discussion dans 'Windev' créé par Ziguiza, Fev 12, 2018.

  1. Ziguiza

    Ziguiza New Member
    MEMBRE WX

    Inscrit:
    Jan 3, 2018
    Messages:
    16
    J'aime reçus:
    9
    Bonjour tous !
    Je partage cette fonction que je trouve très pratique pour contrôler la saisie des champs obligatoires d'une fenêtre ou d'une page.
    Le principe est le suivant :
    1. Ajouter tous les champs obligatoires dans un groupe (ex: GR_SaisieObligatoire)
    2. Lors de la validation appeler la fonction SaisieValidee avec les paramètres : Nom de la fenêtre et Nom du groupe
    3. Si tous les champs sont validée la fonction retourne vrai sinon un message est affiché et une RepriseSaisie est appelée sur le premier champ non validé rencontré.
    Toute amélioration ou proposition en vue d'optimiser cette fonction sera la bienvenue.:)

    voici la fonction :
    Code (Text):
    PROCEDURE SaisieValidee(ChampParent,Ensemble)

    //Recupérer le contenu du groupe (Liste des champs obligatoires à vérifier)
    TabChamp est un tableau de chaînes
    sGroupeChamp est une chaîne
    i est un entier = 1
    ResChamp est une chaîne

    sGroupeChamp = ChampParent+"."+Ensemble
    ResChamp = EnumèreChamp({sGroupeChamp}, i)
    TANTQUE ResChamp<>""
        i++
        TableauAjoute(TabChamp, ResChamp)
        ResChamp = EnumèreChamp({sGroupeChamp}, i)
    FIN

    //Validation en fonction du type de contenu
    sChamp est une chaîne
    sType est une chaîne
    bErreurTrouvee est un booléen = Faux


    POUR TOUT ELEMENT sChamp DE TabChamp
        SI {ChampParent+"."+sChamp}..Etat = Actif ALORS // Le champ doit être obligatoire et actif
            sType = {ChampParent+"."+sChamp}..Type

            SELON sType
                CAS typComboSNS, typComboAVS
                    SI {ChampParent+"."+sChamp}..ValeurAffichée ~= "" ALORS bErreurTrouvee = Vrai
                CAS typSélect, typInterr
                    SI {ChampParent+"."+sChamp} < 0 ALORS bErreurTrouvee = Vrai
                CAS typDate, typTexte //,wlCaractère,  wlDate, wlDateHeure
                    SI SansEspace({ChampParent+"."+sChamp}) ~= "" ALORS bErreurTrouvee = Vrai
                CAS typNum, typMonétaire, typDurée //, wlDurée, wlEntier, wlHeure, wlMonétaire, wlNumérique, wlRéel
                    SI Val({ChampParent+"."+sChamp}) <= 0 ALORS bErreurTrouvee = Vrai
                AUTRE CAS
                 
            FIN
            SI bErreurTrouvee ALORS
                Erreur("Vous devez renseigner tous les champs obligatoires. Y compris le champ ["+ {ChampParent+"."+sChamp}..Libellé +"]")
                RepriseSaisie({ChampParent+"."+sChamp})
            FIN
        FIN
    FIN

    // Comme tout se passe bien alors renvoyer vrai
    RENVOYER Vrai
     
  2. suenodesign

    suenodesign Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    507
    J'aime reçus:
    732
    Oui, intéressent mon ami
     
  3. Tixa

    Tixa Active Member
    MEMBRE WX

    Inscrit:
    Mar 10, 2018
    Messages:
    124
    J'aime reçus:
    145
    je kiff la fonction ça donne des idées sur les forms ! merci
     
  4. jiem31

    jiem31 New Member

    Inscrit:
    Août 29, 2018
    Messages:
    14
    J'aime reçus:
    8
    Bonjour,

    Effectivement, c'est une approche intéressante mais elle présente néanmoins un petit défaut : la gestion des valeurs obligatoires se fait dans la fenêtre et rien ne garantit qu'on n'oublie pas un champ dans le groupe
    Il n'en demeure pas moins que la méthode proposée par PCSOFT est insupportable pour les utilisateurs car une fois que le champ prend le focus, impossible d'en sortir tant qu'il n'est pas renseigné.
    Alors, pour palier à ce problème, voici comment personnellement je le contourne….

    Je ne coche bien-sûr pas la case 'Saisie obligatoire' des rubriques mais à la place, je termine le libellé par '*' (astérisque) ce qui a un double intérêt :
    - Ce caractère est universellement reconnu (il me semble) pour indiquer à l'utilisateur qu'une valeur est requise. Au besoin, pour enfoncer le clou,on peut toujours le rappeler dans une info-bulle ou un libellé bien visible quelque part dans la fenêtre.
    - Au moment de la validation de la saisie, il suffit de vérifier que tous les champs dont le libellé se termine par cet indicateur sont bien renseignés.

    Et pour aller encore plus loin, on peut même pousser le bouchon jusqu'à griser le bouton de validation tant qu'un ou plusieurs champs obligatoires sont vides et plaçant un peu de code au bon endroit.

    S'il y a des personnes intéressées, je développe volontiers le sujet et publie mon code.

    Bon dev.
    jiem31
     
  5. CharlyGO

    CharlyGO New Member

    Inscrit:
    Mai 21, 2018
    Messages:
    16
    J'aime reçus:
    9
    Bien sûr mon cher jiem31, intéressant la façon de valider les champs. J'espère que vous pourrez partager votre code et en apprendre un peu plus.

    Salutations
     

Partager cette page

Chargement...