Donnez vie à vos documents numériques !
 

Raz et remplissage automatique

abracadabraPDF Forums PDF – Général Raz et remplissage automatique

  • Créateur
    Sujet
  • #72310
    michel c.
    Participant

    Bonjour, j’ai bien avancé sur un formulaire qui me servira de base pour beaucoup d’autres.

    L’idée est qu’il fonctionne quelque soit le nombre de questions, le nombre de réponses pour chaque question et le type de réponse (champ texte ; liste déroulante ou case à cocher)

    Il fonctionne bien. Je viens d’ajouter un menu administrateur avec lequel je peux éditer les réponses exactes pour chaque question et d’autres fonctions :

    J’aimerais aussi à l’aide du bouton Raz remettre à 0 sans pour autant effacer les champs « R…. » et les champs « Question….. » j’ai mis en place un bouton Default en face de chaque question mais j’aurais préfèrerais que lors de la saisie, la valeur soit d’emblée celle par défaut (je vais potasser dessus mais je crois que je vais y arriver)

    L’autre problème auquel je suis confronté c’est que j’aimerais qu’en cliquant sur le bouton Corriger dans le menu admin, toutes les bonnes réponses s’affichent et toutes les mauvaises s’effacent pour chaque champ « Q….  » or ces champs sont de type différents (texte ; liste déroulante ; checkbox …) et je ne vois pas trop comment faire. (je peux éventuellement remplacer toutes les listes déroulantes par des Checkbox si c’est plus simple)

     

    Merci

Affichage de 15 réponses de 26 à 40 (sur un total de 40)
  • Auteur
    Réponses
  • #72368
    bebarth
    Maître des clés

    Je n’ai pas de message d’erreur mais ça ne marche pas…

    Je n’ai pas vérifié le script entier, mais la première chose que je vois est que resetForm() doit s’appliquer à une table, il faut donc écrire :
    if (oFld.type == "combobox") {this.resetForm([oFld.name]);}

    Je regarderai plus précisément si ça ne fonctionne pas mieux…

    @+
    😎

    #72370
    michel c.
    Participant

    Merci pour tes 2 suggestions. La 1ère (utilisation d’un indice compris entre les 2 points du nom du champ) me permettra je pense d’y arriver (j’ai encore des erreurs mais je pense qu’elles sont dues à des champs qui portent des noms incorrects)

    Pour la 2ème suggestion, je l’ai implémentée au script Raz mais j’ai toujours quelques listes déroulantes qui ne s’initialisent pas (Q.8.1 ; Q.9.1 par exemple)

    Sinon, j’ai viré les checkboxe et je les ai remplacées par des menus déroulants (vrai ou faux) ; j’étais en train de devenir maboul alors j’ai contourné le problème.

    LIEN

    Merci encore

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    #72373
    michel c.
    Participant

    J’ai renommé les champs pour qu’ils aient tous 2 points et j’ai utilisé les indices pour extraire l’indice1 (nombre situé entre les 2 points) et l’indice2 (nombre situé après le dernier point)

    J’ai modifié mon script EditReps qui est beaucoup plus simple.

    Je comptais faire pareil pour le script Raz.

    Mais, je ne comprend pas pourquoi ça ne fonctionne pas….

     

    LIEN

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    #72378
    michel c.
    Participant

    Le dernier fichier (j’ai essayé de faire un peu le ménage dans les scripts mais j’ai toujours des erreurs).

    LIEN

    #72379
    michel c.
    Participant

    J’ai compris mes erreurs (elles étaient multiples).

    Pour le coup j’ai résolu 2 problèmes : le script Default et EditReps

    Je potasse un peu le script Raz qui fonctionne encore mal.

    Je vais essayer tout seul comme un grand.

    LIEN

    #72380
    michel c.
    Participant

    J’ai réussi à mettre en place une fonction Remise à 0 qui fonctionne.

    Je suis en train de vérifier les bugs éventuels et ajouter quelques petites fonctionalités mais c’est en bonne voie.

    Merci à tous

    #72405
    michel c.
    Participant

    Bonjour, j’ai un peu tout passé en revue, j’en ai profité pour ajouter des aides interactives mais j’ai un bug que je n’arrive pas à corriger.

    Lorsque je clique sur Raz, l’aide de la question 1 (Aide.1.1) s’affiche alors que je voudrais qu’elle soit masquée.

    C’est peut être le dernier bug. En tout cas, celui-ci est gênant.

    Si quelqu’un pouvait m’aider, ça fait un moment que je suis dessus sans avoir la moindre piste.

    Merci

    LIEN

    • Cette réponse a été modifiée le il y a 2 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 1 semaine par michel c..
    #72409
    Merlin
    Maître des clés

    Je crois que ça vient de la fonction « EditReps() » qui est utilisée en script de calcul par le champ « Aide.1.1 » parce-que la valeur du champ « Menu5 » (qui est une case à cocher…) n’est pas égale à « 1 », voir capture.

    Quand on fait un reset (resetForms ou defaulValue) ça déclenche les actions de calcul de tous les champs, actions qui s’effectuent donc après le reset.

    En clair le champ « Aide.1.1 » s’auto-réaffiche après chaque reset.

    Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

     

     

    Note que dans cette fonction tu pourrais avantageusement remplacer la ligne (encadrée) :

    if (this.getField("Menu.5").value != 1) {

    par

    else {

     

    😉

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

    Autre chose, j’ai lu ton code de reset qui mouline beaucoup et inutilement :

    • il faut oublier le « f » !
    • « 100 » c’était un exemple, dans un premier temps tu pourrais utiliser un chiffre plus modeste.

     

    S’agissant d’une propriété partagée (display, color, etc) quand on s’adresse à un champ parent on s’adresse à tous ses enfants.

    Par exemple :

    this.getField("Q.1).display = display.hidden;

    suffit à masquer tous les champs dont le nom commence par « Q.1. »

     

    Donc la première partie de la fonction Raz() :

    function Raz() {
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0;

    for (var i = 1 ; i<101 ; i++) {
    for (var f = 0 ; f<101 ; f++) {
    if (this.getField("Q."+i +"."+f) != null) {this.getField("Q."+i +"."+f).display = display.hidden;
    this.getField("Q."+i +"."+f).fillColor=color.white;
    }
    if (this.getField("TQ."+i +"."+f) != null) {this.getField("TQ."+i +"."+f).display = display.hidden;}
    if (this.getField("Question."+i +"."+f) != null) {this.getField("Question."+i +"."+f).display = display.hidden;}
    if (this.getField("Verifier."+i +"."+f) != null) {this.getField("Verifier."+i +"."+f).display = display.hidden;}
    if (this.getField("Recommencer."+i +"."+f) != null) {this.getField("Recommencer."+i +"."+f).display = display.hidden;}
    if (this.getField("Aide."+i +"."+f) != null) {this.getField("Aide."+i +"."+f).display = display.hidden;}
    }
    }

    ...

     

    Pourrait être simplifiée ainsi (sans les 100 x 100 boucles « f ») :

    function Raz() {
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0;

    for (var i = 1 ; i<101 ; i++) {
    if (this.getField("Q."+i) != null) {
    this.getField("Q."+i).display = display.hidden;
    this.getField("Q."+i).fillColor=color.white;
    }
    if (this.getField("TQ."+i) != null) {this.getField("TQ."+i).display = display.hidden;}
    if (this.getField("Question."+i) != null) {this.getField("Question."+i).display = display.hidden;}
    if (this.getField("Verifier."+i) != null) {this.getField("Verifier."+i).display = display.hidden;}
    if (this.getField("Recommencer."+i) != null) {this.getField("Recommencer."+i).display = display.hidden;}
    if (this.getField("Aide."+i) != null) {this.getField("Aide."+i).display = display.hidden;}
    }

    #72413
    Merlin
    Maître des clés

    Cependant pour le reset je me baserais seulement sur les noms de champs, ce script devrait aller encore plus vite car il ne cherche pas de champs inexistants :

    function Raz() {

    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));

    if (/\bQ.+/.test(oFld.name)) {
    oFld.display = display.hidden;
    oFld.fillColor = color.white;
    oFld.value = oFld.defaultValue;
    }

    else if (/\bQ\.1.+/.test(oFld.name)) {
    oFld.display = display.visible;
    oFld.readonly = false;
    }

    else if (/\bTQ.+/.test(oFld.name) || /\bQuestion.+/.test(oFld.name) || /\bVerifier.+/.test(oFld.name) || /\bRecommencer.+/.test(oFld.name) || /\bAide.+/.test(oFld.name)) {
    oFld.display = display.hidden;
    oFld.readonly = false;
    }

    }

    this.getField("Verifier.1.0").display = display.visible
    this.getField("Verifier.1.0").display = display.noPrint;
    this.getField("Recommencer.1.0").display = display.visible;
    this.getField("Recommencer.1.0").display = display.noPrint;
    this.getField("TQ.1.0").display = display.visible;
    this.getField("Aide.1.0").display = display.visible;
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0; // !!!

    }

    #72418
    michel c.
    Participant

    Merci, j’ai appliqué les changements que tu préconisais dans tes messages de 12h30 et 13h02.

    Pour les autres, j’ai essayé mais il y avait des erreurs et comme j’ai de fortes lacunes dans ce que tu proposes, je n’ai pas pu corriger.

    Pour les 100 x 100 boucles « f » ; je les ai supprimées comme tu le disais dans la fonction raz, sauf pour la dernière partie ou j’ai du en conserver une avec un nombre plus modeste :

    for (var i = 1 ; i<50 ; i++) {
    for (var f = 0 ; f<50 ; f++) {
    if (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i +"."+f).type != "combobox") {this.getField("Q."+i +"."+f).value = "";}
    if (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i +"."+f).type == "combobox") {this.resetForm([("Q."+i +"."+f)]);}

    }
    }

    Sans cela, lors du clic sur raz, je n’avais pas d’erreur à la console mais les menus déroulants ne s’initialisaient pas (peut être une erreur dans mon code) ; j’avais écrit ceci :

    if (this.getField("Q.") != null && this.getField("Q.").type != "combobox") {this.getField("Q.").value = "";}
    if (this.getField("Q.") != null && this.getField("Q.").type == "combobox") {this.resetForm(("Q."));}

    Je suis en train de tout revérifier pour voir si je n’ai pas d’erreur ou de bug que je n’avais pas vu….

    Merci encore

    LIEN

    #72419
    michel c.
    Participant

    Autre question, est il possible de faire « remonter » plus d’une variable lors d’un clic sur un bouton pour appeler une fonction qui utilisera ces variables.

    Par exemple le script affecté à un bouton :

    var nomChamp=event.target.name;
    var premierPoint=nomChamp.indexOf(".");
    var dernierPoint=nomChamp.lastIndexOf(".");
    var ind1=nomChamp.substring(premierPoint+1,dernierPoint);
    var ind2=nomChamp.substring(dernierPoint+1);
    var prefixe = nomChamp.substring(0, premierPoint);

    NomDeLaFonction(nomChamp,ind1,ind2);

    Et en script de document :

    NomDeLaFonction(nomChamp,ind1,ind2) {

    Code utilisant les variables nomChamp, ind1 et ind2

    }

    Merci

    #72422
    Merlin
    Maître des clés

    Pour les autres, j’ai essayé mais il y avait des erreurs et comme j’ai de fortes lacunes dans ce que tu proposes, je n’ai pas pu corriger.

    1000 excuses, une parenthèse a disparu entre le test et la copie dans le sujet. C’est corrigé (ci-dessus, c’est la parenthèse en bleu).

    Mais là c’est plus une question d’outil que de niveau, la console JS d’Acrobat m’a tout de suite signalé la parenthèse manquante. 😉

    #72423
    Merlin
    Maître des clés

    Autre question, est il possible de faire « remonter » plus d’une variable lors d’un clic sur un bouton pour appeler une fonction qui utilisera ces variables.

    Oui.

    #72424
    Merlin
    Maître des clés

    for (var i = 1 ; i<50 ; i++) {
    for (var f = 0 ; f<50 ; f++) {
    if
    (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i
    +"."+f).type != "combobox") {this.getField("Q."+i +"."+f).value = "";}
    if
    (this.getField("Q."+i +"."+f) != null && this.getField("Q."+i
    +"."+f).type == "combobox") {this.resetForm([("Q."+i +"."+f)]);}

     

    Je ne comprend pas ce script inutilement compliqué qui pourrait être remplacé plus simplement par :

    this.resetForm(["Q"]);

     

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