Donnez vie à vos documents numériques !
 

Script qui a l’air de marcher mais…

abracadabraPDF Forums PDF – Général Script qui a l’air de marcher mais…

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

    Bonjour, j’ai fait un script (j’ai adapté un script qui m’a été proposé ici il y a quelques jours)

    Il fonctionne mais la console affiche une erreur : Field:Calculate:5: TypeError: this.getField(…) is null

    L’idée c’est que lorsque les élèves sont en stage (PFMP) ou en vacances, les apprentis ne peuvent pas être au lycée.

    Si l’utilisateur coche la case Au lycée pour l’apprenti alors que la case au lycée n’est pas cochée pour les élèves, une alerte apparait et la case est décochée…

    Merci

    Attachments:
    You must be logged in to view attached files.
Affichage de 7 réponses de 1 à 7 (sur un total de 7)
  • Auteur
    Réponses
  • #70159
    Merlin
    Maître des clés

    Bonjour

     

    “Le champ n’existe pas” parce-que tu fais faire une boucle au script alors qu’il n’y a que des champs “.0“, donc pas besoin de boucle ni de “+i“.

     

    if (this.getField("CheckBox.0").value == "A" & this.getField("TheckBox.0").value != "D") {
    app.alert({cMsg:"Attention, les apprentis ne peuvent pas être au lycée quand les élèves sont en PFMP ou en vacances", nIcon:2});
    this.getField("CheckBox.0").value = "Off"
    }

    Attachments:
    You must be logged in to view attached files.
    #70161
    michel c.
    Participant

    Bonjour,

    j’avais voulu simplifier mon document pour le poster mais ce n’était pas une bonne idée.

    Voici le document complet ou presque.

    Cette erreur est toujours présente et je n’arrive pas à activer la ligne 37 sans que le message d’alerte s’affiche 53 fois…

     

    Merci

    Attachments:
    You must be logged in to view attached files.
    #70163
    michel c.
    Participant

    Je viens de tenter un truc : créer des variables de A à I avec une valeur 0 qui se mettent à 1 pour chaque “erreur”

    Et les messages d’alertes qui s’affichent si la valeur de ces variables est différente de 0.

    La variable J avec valeur initiale 0 se met à 1 si toutes les autres variables ont des valeurs différentes de 1.

    Si la variable J est différente de 0, le message d’alerte indiquant que tout est ok s’affiche.

    Toutes les alertes étant en dehors de la boucle for, je me disais que ça devrait marcher.

    Sauf que non….

     

    var condA=0
    var condB=0
    var condC=0
    var condD=0
    var condE=0
    var condF=0
    var condG=0
    var condH=0
    var condI=0
    var condJ=0

    if (this.getField("SLR").value != this.getField("LT").value) {var condA = 1;}

    if (this.getField("SER").value != this.getField("ET").value) {var condB = 1;}
    //Le nombre de PFMP pour les apprentis n'est pas conforme

    if (this.getField("SCR").value != this.getField("VT").value) {var condC = 1;}
    //Le nombre de semaines de congé pour les apprentis n'est pas conforme

    if (this.getField("SLRE").value != this.getField("LE").value) {var condD = 1;}
    //Le nombre de semaines au lycée pour les élèves n'est pas conforme

    if (this.getField("SERE").value != this.getField("PFMP").value) {var condE = 1;}
    //Le nombre de PFMP pour les élèves n'est pas conforme

    if (this.getField("SCRE").value != this.getField("VE").value) {var condF = 1;}
    //Le nombre de vacances pour les élèves n'est pas conforme

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

    if (this.getField("CheckBox."+i).value == "A" & this.getField("TheckBox."+i).value != "D") {var condG = 1;
    ///Attention pour les semaines en rouge, les apprentis ne peuvent pas être au lycée quand les élèves sont en PFMP ou en vacances
    this.getField("semaine."+i).fillColor = color.red;}

    if (this.getField("CheckBox."+i).value == "Off") {var condH = 1;
    //Indiquer ou sont les apprentis pour les semaines en vert
    this.getField("semaine."+i).fillColor = color.green;}

    if (this.getField("TheckBox."+i).value == "Off") {var condI = 1;
    //Indiquer ou sont les élèves pour les semaines mises en bleu
    this.getField("semaine."+i).fillColor = color.blue;}

    if (condA !=1 & condB !=1 & condC !=1 & condD !=1 & condE !=1 & condF !=1 & condG !=1 & condH !=1 & condI !=1) {var condJ=1;
    this.getField("semaine."+i).fillColor = color.transparent;}

    }

    if (condA !=0) {app.alert({cMsg:"Le nombre de semaines au lycée pour les apprentis n'est pas conforme", nIcon:2});}

    if (condB !=0) {app.alert({cMsg:"Le nombre de PFMP pour les apprentis n'est pas conforme", nIcon:2});}

    if (condC !=0) {app.alert({cMsg:"Le nombre de semaines de congé pour les apprentis n'est pas conforme", nIcon:2});}

    if (condD !=0) {app.alert({cMsg:"Le nombre de semaines au lycée pour les élèves n'est pas conforme", nIcon:2});}

    if (condE !=0) {app.alert({cMsg:"Le nombre de PFMP pour les élèves n'est pas conforme", nIcon:2});}

    if (condF !=0) {app.alert({cMsg:"Le nombre de vacances pour les élèves n'est pas conforme", nIcon:2});}

    if (condG !=0) {app.alert({cMsg:"Attention pour les semaines en rouge, les apprentis ne peuvent pas être au lycée quand les élèves sont en PFMP ou en vacances", nIcon:2});}

    if (condH !=0) {app.alert({cMsg:"Indiquer ou sont les apprentis pour les semaines en vert", nIcon:2});}

    if (condI !=0) {app.alert({cMsg:"Indiquer ou sont les élèves pour les semaines mises en bleu", nIcon:2});}

    if (condJ !=0) {app.alert({cMsg:"Tout est ok", nIcon:2});}

     

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

    Le problème c’est la boucle :

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

     

    this.numFields ça veut dire : nombre de champs contenus dans le document (199 dans ce document).

    Les champs à calculer sont nommés avec des suffixes qui vont de  xxxxx.0  à  xxxxx.52

    Comme il y a plus que 52 champs dans le document quand “i” arrive à la valeur 53 ça provoque une erreur puisque ces champs n’existent pas (en JavaScript “null” ça veut dire : n’existe pas).

     

    Donc il faut remplacer la ligne ci-dessus par celle-ci, qui indique zéro comme valeur de départ et 52 comme valeur à ne pas dépasser :

    for (var i = 0; i < 53; i++) {

     

     

    • Cette réponse a été modifiée le il y a 2 années et 4 mois par Merlin.
    #70167
    michel c.
    Participant

    Merci beaucoup !!!

    J’ai pu enfin arriver au bout de ce que je voulais faire. J’ai également amélioré la vérification finale afin qu’elle soit plus fonctionnelle.

    Voici le fichier terminé, en espérant qu’il n’y ait pas de bug.

    Une des questions que je me pose, sans savoir si cela est possible par la programmation c’est si en spécifiant une année quelle quelle soit (par exemple 2024) est ce qu’il est possible que pour chaque champ (semaine.0 à semaine.53) soit inscrit automatiquement la semaine spécifiée (du lundi au dimanche) en commençant par la 1ère semaine de septembre.

    Je ne demande pas le code qui doit être assez long à faire mais juste savoir si c’est possible ou pas.

    Merci

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

    Ceci pourrait peut être aider à répondre à ta dernière question (dont je ne connais pas la réponse) :

    Calcul date automatique j+1, j+2, j+3….

    #70170
    michel c.
    Participant

    Je viens de regarder mais quelle que soit la date choisie, c’est la semaine qui commence le 21/12/2021 qui s’affiche en semaine 1 comme en semaine 2 avec mon logiciel (PDF XChange Editor) alors qu’avec adobe acrobat DC ça fonctionne.

    C’est la 1ère fois que je vois un script qui dysfonctionne avec ce logiciel…

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