Donnez vie à vos documents numériques !
 

Problème avec des boucles for

abracadabraPDF Forums PDF – Général Problème avec des boucles for

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

    Bonjour, j’ai un formulaire pdf qui fonctionne bien mais dont les scripts sur la 1ère page sont longs car je n’arrive pas à faire fonctionner la boucle for.

    Dès que j’essaye de la mettre en place, je n’ai pas de message d’erreur sur la console mais les changements ne s’opèrent que sur les 1ères listes déroulantes.

    Il s’agit des scripts affectés aux boutons pour générer des listes et pour « les mettre à 0 » sur la première page

    Merci

    • Ce sujet a été modifié le il y a 7 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
Affichage de 5 réponses de 1 à 5 (sur un total de 5)
  • Auteur
    Réponses
  • #70250
    Merlin
    Maître des clés

    Bonjour et bonne année

     

    Ces boucles utilisent une variable nommée « i ».

    Tous les champs « diff.n » utilisent chacun un script de calcul qui utilise aussi une variable nommée « i ».

    Un script de calcul se déclenche à chaque fois qu’un champ du document passe par l’état « désactivé », que l’action vienne d’un humain ou d’un script.

     

    Ce qui a deux conséquences :

    • la variable « i » des boucles est immédiatement interceptée et modifié par le premier calcul déclenché, c’est ce qu’on appelle une collision de variables et c’est pour ça que les boucles ne fonctionnent que sur la première itération.
    • à chaque fois qu’un champ est modifié cela déclenche les 52 calculs des champs « diff.n » (et il y a peut être d’autres calculs ailleurs, je n’ai pas vérifié).
      Donc quand on boucle sur 52 champs cela fait 52 x 52 calculs à effectuer : c’est pour ça que ça rame.

     

    Ci-joint, j’ai remplacé « i » par « t » dans les boucles de remplissage et de reset. Dans la mesure où le remplissage et le reset des champs n’est effectué qu’une fois (ou deux) par l’utilisateur on peut considérer le temps de latence comme acceptable. Sinon il faudrait « pousser » les valeurs depuis chaque menu déroulant correspondant, au lieu de les « tirer » avec un calcul.

    J’ai aussi ajouté une protection qui empêche les script de s’arrêter si un champ n’existe pas.

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

    bonjour et bonne année,
    👍
    C’est d’ailleurs ce que j’avais préconisé dans un sujet précédent :

    Couleurs


    …et ici il y a bien les scripts de touches personnalisés mais les scripts de calcul des champs « diff. » sont toujours présents.
    Pour les retirer, depuis la console :

    for (var i=0; i<53; i++) this.getField("diff."+i).setAction("Calculate", "");

    Il y a un message à l’ouverture du fichier « L’arborescence de la page contient un noeud incorrect. ».
    Je ne sais pas à quoi correspond ce message !!!

    @+
    😎

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

    Merci pour les réponses. Je ne vois pas cette erreur car avec le logiciel dont je dispose pour l’édition de pdf, aucun message ne s’affiche. J’ai pris en compte les remarques en mettant pour chaque script des variables d’incrémentation différentes. ça a l’air de marcher, je n’ai pas de message d’erreur.

    J’ai laissé par contre les mêmes pour les scripts associés à des bouton différents mais dont les scripts sont identiques, en supposant que dans ce cas, ce n’est pas nécessaire…

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

    c’est ce qu’on appelle une collision de variables

    On peut aussi éviter les collisions en plaçant le mot « var » devant la variable lors de sa déclaration, ainsi on utilise une variable « locale » et non pas une variable « globale ».

    #70263
    Merlin
    Maître des clés

    Il y a un message à l’ouverture du fichier « L’arborescence de la page contient un noeud incorrect. ».

    C’est un problème de structure du document, ce n’est pas lié aux champs de formulaire ni à JavaScript.

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