Donnez vie à vos documents numériques !
 

Problème script de validation valeur minimale

abracadabraPDF Forums PDF – Général Problème script de validation valeur minimale

Étiqueté : 

  • Ce sujet contient 18 réponses, 4 participants et a été mis à jour pour la dernière fois par falafhell, le il y a 2 mois.
  • Créateur
    Sujet
  • #74848
    falafhell
    Participant

    Bonjour,

    Je sollicite vos conseils pour corriger un formulaire de calcul assez simple (cf. PJ) : il s’agit d’appliquer un multiple à un montant, de transcrire ce montant en lettres, puis de lui appliquer un taux et d’afficher le total « montant + taux ».

    Jusque-là, pas de problème majeur, mes maigres connaissances ont suffi.

    Première complication : le multiple à renseigner dans le champ « nombre » doit être égal ou supérieur à 5.

    Pour ce faire, j’ai inséré un script de validation dans le champ concerné, associé à un message d’alerte, mais il ne fonctionne pas : il n’empêche pas de remplir le formulaire avec n’importe quelle valeur <5, une fois qu’on a fait disparaître le message d’alerte. De plus, le champ étant toujours rempli, le message d’alerte s’active (logiquement) lorsqu’on clique sur le bouton de rénitialisation.

    Le script a beau être simple, je ne parviens pas à pointer l’erreur… Du coup, comment faire pour effectivement bloquer puis effacer le champ « nombre » (ainsi que les champs associés, « SaisieSomme » et « TexteSomme »), en dessous de la valeur minimale 5 ?

    Seconde difficulté : la conversion des chiffres en lettres fonctionne très bien, mais y’a-t-il un moyen pour que, dès que le champ « montant en chiffres » est rempli, le champ « montant en lettres » se remplisse simultanément, sans avoir à cliquer dans le champ « montant en chiffres » ? J’ai inséré le script en « champ activé », en vain…

    Si vous pouviez m’apporter vos lumières, j’en serais bien soulagé !

    Merci par avance pour votre aide.

    Attachments:
    You must be logged in to view attached files.
Affichage de 18 réponses de 1 à 18 (sur un total de 18)
  • Auteur
    Réponses
  • #74850
    jctremblay
    Participant

    Pour ton champ de validation «nombre» tu peut utiliser ceci:

    if (event.value != "" && event.value < 5)
    {
    app.alert("Rentrer une valeur supérieure ou égale à 5");
    event.value = "";
    }

    Pour le reste, ton code pour les chiffres en mots devrait être en Javascript de document, le calcul de «SaisieSomme» et de celui-ci devrait idéalement être dans ton champ «nombre».

    #74851
    jctremblay
    Participant

    Ok…
    Comme j’avais mentionné, déplace ton code pour les nombres en mots dans un script de document.
    Puis consolide tout dans un script de calcule du champ «nombre» comme ceci:

    var saisieSomme = this.getField("SaisieSomme");
    if (event.value != "" && event.value < 5)
    {
    app.alert("Rentrer une valeur supérieure ou égale à 5");
    event.value = "";
    } else {
    saisieSomme.value = event.value * 1000;
    mots();
    }

    Le script du document ici à le nom de fonction «mots».
    Tu trouvera la correction dans le PDF.
    L’ordre de calcul a aussi été modifié… et les champ «SaisieSomme» et «texteSomme» en lecture seulement.

    Attachments:
    You must be logged in to view attached files.
    #74853
    Merlin
    Maître des clés

    Bonjour

     

    C’est le script de validation du champ “nombre” qui n’est pas correct, c’est d’autant plus dommage qu’il n’y a pas besoin de script : il suffit d’utiliser la validation fournie par Acrobat (voir capture).

    Et dans le champ “SaisieSomme” le script devrait placé en script de Validation, pas en Action.

    Attachments:
    You must be logged in to view attached files.
    #74855
    Merlin
    Maître des clés

    Ceci dit JC à raison, le script de conversion en lettres serait mieux placé en script de document.

    Et pour plus de cohérence je mettrais le symbole € dans le champ “SaisieSomme”, qui devrait être en lecture seule tout comme le champ “TexteSomme”.

    Attachments:
    You must be logged in to view attached files.
    #74859
    falafhell
    Participant

    Bonjour JC,

    Merci beaucoup !

    En effet, le script de transcription a plus sa place en script de document. Le seul hic, c’est que tant que l’utilisateur n’a pas cliqué dans le champ “SaisieSomme”, le champ “TexteSomme” transcrit le contenu du champ “Nombre” et non celui de “SaisieSomme”. Si on rentre la valeur 5 dans le champ “Nombre”, le champ “TexteSomme” affiche “cinq euros”, tandis que le champ “SaisieSomme” affiche “5000 €”.

    Attachments:
    You must be logged in to view attached files.
    #74861
    falafhell
    Participant

    C’est vrai, mais la validation Acrobat implique d’indiquer une fourchette de valeurs et je ne souhaite pas indiquer de valeur maximale.

     

    #74862
    Merlin
    Maître des clés

    C’est vrai, mais la validation Acrobat implique d’indiquer une fourchette de valeurs et je ne souhaite pas indiquer de valeur maximale.

    Non.

    Si tu avais regardé la capture d’écran que j’ai posté (ci-dessus) tu aurais vu qu’on peut très bien n’entrer qu’une seule valeur, minimum ou maximum.

    #74863
    jctremblay
    Participant

    Bonjour JC, Merci beaucoup ! En effet, le script de transcription a plus sa place en script de document. Le seul hic, c’est que tant que l’utilisateur n’a pas cliqué dans le champ “SaisieSomme”, le champ “TexteSomme” transcrit le contenu du champ “Nombre” et non celui de “SaisieSomme”. Si on rentre la valeur 5 dans le champ “Nombre”, le champ “TexteSomme” affiche “cinq euros”, tandis que le champ “SaisieSomme” affiche “5000 €”.

    Remplace cette ligne:
    var chaine=this.event.target.valueAsString;
    Par ceci et tout devrait fonctionner.
    var chaine=this.getField("SaisieSomme").valueAsString;

    #74869
    falafhell
    Participant

    Merci JC, ça fonctionne très bien.

    Juste une dernière requête : j’ai voulu appliquer ton script de conversion chiffres > lettres au champ “SaisieNombre” > “TexteNombre”. Ça fonctionne bien entendu, sauf que, à nouveau, l’affichage en lettre n’est pas automatique : il faut cliquer sur le champ “TexteNombre” pour voir apparaître la transcription. Ça fait un moment que je cherche mais je ne vois pas où est l’erreur. Est-ce parce que l’ordre de calcul n’a pas été modifié ?

    Attachments:
    You must be logged in to view attached files.
    #74871
    bebarth
    Maître des clés

    bonjour,

    Seconde difficulté : la conversion des chiffres en lettres fonctionne très bien, mais y’a-t-il un moyen pour que, dès que le champ « montant en chiffres » est rempli, le champ « montant en lettres » se remplisse simultanément, sans avoir à cliquer dans le champ « montant en chiffres » ? J’ai inséré le script en « champ activé », en vain…

    Le sujet a déjà été traité dans un autre post : https://www.abracadabrapdf.net/forums/topic/remplacer-valeur-numerique-en-lettre/#post-72771

    Voici un fichier qui reprend le script principal, et ci-dessous les scripts que j’ai ajouté :

    // Script de touches personnalisé champ nombre
    if (!event.willCommit) {
    if (event.selStart==0 && event.change==",") event.change="0,";
    if (event.selStart==0 && event.change=="0") event.change="0,";
    var aTester=event.value.split("");
    aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
    var testeChaine=aTester.join("");
    if (/^([1-9]\d*(\,\d{0,2})?)?$/.test(testeChaine)) this.getField("SaisieSomme").value=Number(testeChaine.replace(/,/,"."))*1000;
    else event.rc=false;
    } else {
    if (event.value=="" || /^([1-9]\d*(\,\d{0,2})?)$/.test(event.value)) this.getField("SaisieSomme").value=Number(event.value.replace(/,/,"."))*1000;
    else event.rc=false;
    }

    // Script de calcul champ SaisieSomme
    if (event.value>5000) {
    ecriture(event.value);
    this.getField("droit2").value=this.getField("SaisieSomme").value*Number(this.getField("tauxpersonnalise").value.replace(",","."))/100;
    this.getField("totalperso").value=this.getField("SaisieSomme").value+this.getField("droit2").value;
    } else {
    this.getField("TexteSomme").value="";
    this.getField("droit2").value="";
    this.getField("totalperso").value="";
    }

    // Script de format personnalisé champ SaisieSomme
    if (event.value<=5000) event.value="";
    else event.value=event.value+" €";

    Je te laisse retirer les étoiles si tu ne les veux pas…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74873
    jctremblay
    Participant

    Tu as modifié passablement le code de la fonction mots. L’erreur se trouve là…
    Je te laisse revérifier le tout ou recommencer selon mon document.

    #74878
    falafhell
    Participant

    Ok, je vais revérifier. En fait, comme je voulais faire disparaître l’unité monétaire, je suis reparti du code associé aux deux derniers champs du document “conversionalphanumerique_BB2-avec-espace”, ce n’est donc pas le même. J’ai dû faire une erreur en l’adaptant, désolé.

    #74879
    bebarth
    Maître des clés

    je voulais faire disparaître l’unité monétaire

    De quel(s) champ(s) ?

    @+
    😎

    #74883
    Merlin
    Maître des clés

    sauf que, à nouveau, l’affichage en lettre n’est pas automatique : il faut cliquer sur le champ “TexteNombre” pour voir apparaître la transcription. Ça fait un moment que je cherche mais je ne vois pas où est l’erreur. Est-ce parce que l’ordre de calcul n’a pas été modifié ?

    J’ai déjà répondu à cette question il y a deux jours dans ma première réponse (voir ci-dessus) :

    “Et dans le champ “SaisieSomme” le script devrait placé en script de Validation, pas en Action.”

    Si tu ne lis pas les réponses et que tu ne regardes pas les copies d’écran qu’on se donne la peine de te fournir tu risques de tourner en rond pendant longtemps !

    #74884
    falafhell
    Participant

    Je suis navré Merlin, et crois-moi j’ai pris le temps de lire tes commentaires et de regarder les captures d’écran que tu as pris la peine d’y associer. Seulement, vous êtes trois à commenter le sujet et à m’apporter chacun des suggestions (ce dont je vous remercie sincèrement !)… sur deux documents différents. Veuillez m’en excuser, car je suis en effet à l’origine de la confusion, étant donné que ma requête d’origine a évolué entre temps. Pour être le plus clair possible, si on part de la proposition de JC, en PJ, je souhaite non pas transcrire le champ “SaisieSomme” en lettres, mais le champ du dessus, le dénommé “Nombre”, en lettres (un champ vide avant toute action, et sans aucune unité monétaire), avec la même simplicité d’affichage, c’est-à-dire en renseignant le champ “Nombre”, avec calcul automatique des autres champs  (en lecture seule, à l’exception du champ “tauxpersonnalise”). Pour ce faire, je suis reparti du script “conversionalphanumerique_BB2-avec-espace” lié aux deux derniers champs de conversion, sans unité monétaire (d’où la remarque de JC sur la modification substantielle de sa proposition, qui en effet n’est pas tout à fait la même), tout en tenant compte de vos remarques (entendues, je vous assure) de placer le script de transcription en script de document plus qu’en script de validation. Encore une fois, je suis vraiment désolé, je patauge, mais mon intention n’est absolument pas de faire perdre du temps à quiconque.

    Attachments:
    You must be logged in to view attached files.
    #74893
    Merlin
    Maître des clés

    C’est tout le charme des forums, chacun propose son idée et ensuite il faut faire la part des choses.

    Ci-joint un exemple fonctionnel, il faut aussi faire attention à l’ordre de calcul.

     

    Attachments:
    You must be logged in to view attached files.
    #74895
    bebarth
    Maître des clés

    bonjour,

    chacun propose son idée et ensuite il faut faire la part des choses.

    Voici donc ma version avec écriture directe lors de la frappe des chiffres (uniquement si >5).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74903
    falafhell
    Participant

    J’en prends bonne note ! Merci à tous les deux pour vos propositions.

    A+

Affichage de 18 réponses de 1 à 18 (sur un total de 18)
  • Vous devez être connecté pour répondre à ce sujet.