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 : Ajouter tous les champs obligatoires dans un groupe (ex: GR_SaisieObligatoire) Lors de la validation appeler la fonction SaisieValidee avec les paramètres : Nom de la fenêtre et Nom du groupe 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
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
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