Donnez vie à vos documents numériques !
 

Transformer un script "absolu" en script "relatif"

abracadabraPDF Forums PDF – Général Transformer un script "absolu" en script "relatif"

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46016
    PhDCus
    Participant

    Bonjour à tous,
    je cherche à transformer un script “absolu” en script “relatif” (je ne suis pas sûr des termes employés).Je m’explique. J’ai des champs interdépendants. Ces champs sont dupliqués 10 fois et aujourd’hui j’ai un script pour chaque groupe de champs. Ce script est le même pour tous, il y a juste le n° des champs qui changent.
    Quand je dois modifier le script, je dois le faire 10 fois…
    Je voudrais savoir s’il est possible, au déclenchement du script, que ce dernier détecte le n° du champ et modifie en conséquence uniquement les champs du même groupe.J’espère que je suis assez claire et précis, mais j’ai un doute sur ce point…
    Voici le script. J’utilise Adobe pro DC.
    Merci pour votre aide !

    if (this.getField(“CreditTypeAutreCredit_0″).value == ”


    “) {this.getField(“ChargeTypeNomCredit_0”).value = “”} else {this.getField(“ChargeTypeNomCredit_0”).value = “Autres”}

    this.getField(“nature_credit_1”).value = this.getField(“CreditTypeAutreCredit_0”).value

    this.getField(“capital_emprunte_credit_1”).value = this.getField(“ChargeMontantCredit_0”).value

    this.getField(“taux_interet_credit_1”).value = this.getField(“TauxCreditCredit_0”).value

    if (this.getField(“ChargeDateDebutJourCredit_0”).value == “”)
    {this.getField(“date_souscription_credit_1”).value = “”}
    else
    {this.getField(“date_souscription_credit_1”).value = this.getField(“ChargeDateDebutJourCredit_0”).value + “/” + this.getField(“ChargeDateDebutMoisCredit_0”).value + “/” + this.getField(“ChargeDateDebutAnneeCredit_0”).value }

Affichage de 9 réponses de 1 à 9 (sur un total de 9)
  • Auteur
    Réponses
  • #65367
    bebarth
    Maître des clés

    bonjour,
    Il faut que tu  récupères “l’indice” de ton champ avec :

    Code:
    var str = this.event.target.name;
    var n = str.indexOf(“_”);
    indice = parseInt(str.substring(n+1));

    Ici, “indice” représente la valeur numérique de tous les caractères situés après “_” dans le nom du champ.
    Si ton champ se nome “reditTypeAutreCredit_0” indice vaut 0, et tu pourras écrire :

    Code:
    this.getField(“nature_credit_”+(indice+1)).value = this.getField(“CreditTypeAutreCredit_”+indice).value;
    au lieu de
    this.getField(“nature_credit_1”).value = this.getField(“CreditTypeAutreCredit_0”).value;

    etc.
    …si j’ai bien compris ce que tu veux faire.
    Et quand on commence à avoir x fois le même script pour le même calcul il est préférable de le mettre en fonction dans un script de document. On ne l’écrit qu’une seule fois et s’il y a une modification, on ne la fait qu’une fois.
    Il existe plusieurs exemples sur le forum, dont celui-ci :
    https://abracadabrapdf.net/forum/index.php/topic,3594.0.html
    @+
    :bonjour:

    #65368
    PhDCus
    Participant

    Merci pour le retour ! Je vais mettre en place !

    #65369
    Merlin
    Maître des clés

    Bonjour.

    Autre astuce : quand le script est placé dans le champ qui l’exécute il n’y a pas besoin de le nommer, on peut remplacer le nom du champ par event.target (le champ cible de l’évènement).

    Par exemple, si le script de calcul est placé dans le champ “date_souscription_credit_1”, on peut remplacer :

    this.getField(“date_souscription_credit_1”).value = this.getField(“ChargeDateDebutJourCredit_0”).value + “/” + this.getField(“ChargeDateDebutMoisCredit_0”).value + “/” + this.getField(“ChargeDateDebutAnneeCredit_0”).value;

    par

    event.target.value = this.getField(“ChargeDateDebutJourCredit_0”).value + “/” + this.getField(“ChargeDateDebutMoisCredit_0”).value + “/” + this.getField(“ChargeDateDebutAnneeCredit_0”).value;

    Ça marche aussi dans les fonctions.
    :Smiley15:

    #65370
    PhDCus
    Participant

    Merci Merlin pour l’astuce. Je vais gagné du temps.
    Le script marche nickel, mais j’ai une nouvelle difficulté… J’ai des champs qui n’ont pas de séparateur “_”. J’ai tenté çà dans le champ EnfantNomEnfant0

    var str = this.event.target.name;
    var n = str.indexOf(“mEnfant”);
    indice = parseInt(str.substring(n+1));

    this.getField(“nom_personne_”+(indice+1)).value = this.getField(“EnfantNomEnfant”+indice).value

    mais ça ne marche pas

    #65371
    bebarth
    Maître des clés

    …normal que ça ne marche pas, ici il faut écrire :

    Code:
    indice = parseInt(str.substring(n+7));

    str.substring donne la position du premier caractère (n), et +1 pour le caractère suivant.
    Pour “mEnfant” il faut rajouter 7 caractères.
    @+
    :bonjour:

    #65372
    PhDCus
    Participant

    Nickel ! je n’étais pas près de trouver…Merci encore !

    #65373
    PhDCus
    Participant

    De retour sur ce sujet…Cette fois, mon indice est compris dans le nom du champ :
    P5.AV2.frais_€.0 où l’indice est 5 uniquement
    C’est possible d’aller incrémenter le 5 ?

    #65374
    bebarth
    Maître des clés

    bonjour,
    Si le nombre est toujours situé entre le P (première lettre) et le premier point, il suffit de rechercher la position de ce premier point qui peut varier en fonction du nombre de chiffres après le “P”. Donc :

    Code:
    var ancien=”P5.AV2.frais_€.0″;
    var positionPoint=ancien.indexOf(“.”); // position du premier point
    var nouveau=ancien.substring(0,1)+(Number(ancien.substring(1,positionPoint))+1)+ancien.substring(positionPoint);

    cf. https://www.w3schools.com/jsref/jsref_indexof.asp et https://www.w3schools.com/jsref/jsref_substring.asp
    Je développerai si tu ne comprends pas… mais je doute si tu es PhD !
    @+
    :bonjour:

    #65375
    PhDCus
    Participant

    lol Merci ! Je vais regarder çà :D

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