Donnez vie à vos documents numériques !
 

Exporter certaines données d’un formulaire en PJ vers le formulaire principal

abracadabraPDF Forums PDF – Général Exporter certaines données d’un formulaire en PJ vers le formulaire principal

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45368
    Mouss
    Membre

    Bonjour les grands magiciens  :bonjour:

    Je travaille toujours sur le même formulaire (celui où sur Acrobat 11 mes formules de calcul n’étaient pas prises en compte mais sur Acrobat 8 oui  :geek: ), mais au cas où ma question intéresserait d’autres personnes, je crée un autre sujet.

    Voici donc ma problématique :

    Sur mon formulaire principal, l’utilisateur doit entrer des montants globaux par type de dépenses.
    Je compte ajouter un autre formulaire en pièce jointe sur lequel, si l’utilisateur ne connaît pas les montants globaux pour chaque type, il puisse rentrer ses dépenses une par une (je sais, il pourrait utiliser une calculette et faire une addition mais je dois lui faciliter la tâche au maximum  :jerisjaune: ).
    Un champ calculerait bien sûr automatiquement les totaux de chaque type de dépenses.
    À la fin de ce formulaire en PJ, je souhaiterais mettre un un bouton “envoyer les totaux vers le formulaire principal”, et chaque total serait envoyé vers le bon champ du formulaire principal.

    Est-ce possible ? Est-ce que dans un script de la PJ je peux appeler des variables du formulaire principal ?

    Ex :
    – sur le formulaire principal j’ai déjà déclaré un champ en variable : var a=this.getField(“montantglobal1”)
    – sur la PJ, je déclare : var b=this.getField(“soustotal1”)
    – en action souris relâchée sur le bouton de la PJ, puis-je avoir : a.value=b.value; ?

    J’aimerais par ailleurs également qu’en cliquant sur le bouton pour exporter les données, on retourne sur le formulaire principal, c’est faisable ?

Affichage de 26 réponses de 1 à 26 (sur un total de 26)
  • Auteur
    Réponses
  • #60413
    Merlin
    Maître des clés

    Bonjour.

    Si tu peux viser des utilisateurs avec Reader XI ou Reader DC je pourrais te proposer un solution bien plus simple et élégante, à base de “modèles” : des pages que l’on peut afficher et masquer à l’intérieur d’un seul et même document…

    #60414
    Mouss
    Membre

    Bonjour Merlin,

    J’avais l’intention de préciser dans le mailing contenant le formulaire qu’il serait conseillé d’ouvrir le formulaire avec Reader, je peux ajouter qu’il faut une version à jour  :Smiley08: .
    J’accueille donc ta proposition à bras ouverts ! Tu as un lien vers un tuto sur comment procéder ?

    Pour être plus précis, mon formulaire envisage plusieurs situations (chaque situation a ses taux de déduction spécifiques). J’imaginais une PJ par situation, un clic sur le bouton décrit dans mon précédent post ouvrant la PJ correspondante.Est-ce que ta proposition permettrait de faire “la même” chose? à savoir, différentes pages masquées, une par situation, et le bouton afficherait la bonne ?

    Est-ce que le fait que les pages puissent apparaître ou rester masquées changerait quelque chose au script this.pageNum ?

    #60415
    Merlin
    Maître des clés

    Pas de lien ni de tuto, mais souvent un dessin vaut mieux qu’un long discours.
    Alors je te laisse explorer l’exemple ci-joint.

    En fait ça tient en une seule ligne de JavaScript :

    Code:
    this.getTemplate(“NOMduMODELE”).hidden = false;  // ou true

    Pour créer des modèles de page il faut trouver la fenêtre “Modèles de pages”, la fonction la mieux dissimulée d’Acrobat.

    :Smiley15:

    #60416
    Merlin
    Maître des clés

    il serait conseillé d’ouvrir le formulaire avec Reader

    Là on dépasse le simple conseil, c’est un impératif.

    Astuce :
    – placer un champ ou un calque qui recouvre toutes les pages et qui affiche une alerte disant que ce document doit être ouvert avec Acrobat Reader.
    – placer le code JavaScript qui va bien en script de document (pour qu’il s’exécute à l’ouverture) pour masquer ledit champ ou ledit calque.

    Si l’utilisateur ouvre le document avec un logiciel qui ne gère pas JavaScript (c’est à dire presque tous les non-Adobe) il ne verra que l’alerte qui masque tout.
    Si l’utilisateur ouvre le document avec Acrobat Reader il ne se rendra compte de rien.

    Exemple ci-joint.

    #60417
    Mouss
    Membre

    Super Merlin!

    Je vais m’amuser avec ce nouvel outil (les modèles), que j’ai effectivement mis du temps à trouver  :jerisjaune: .

    Et merci pour les exemples!

    De la bombasse ce forum!  :bravo:

    #60418
    Merlin
    Maître des clés

    Ce que tu as vu c’est juste la partie émergée de l’iceberg.
    Les Modèles ça sert aussi et surtout à ça : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/dupliquer-des-pages-dans-un-formulaire-pdf/

    :geek:

    #60419
    Mouss
    Membre

    J’avais effectivement vu qu’on pouvait faire ça après que tu aies parlé des modèles de pages  :Smiley03:
    Je vais explorer tout ça en profondeur  :extra:

    #60420
    Mouss
    Membre

    Merlin,

    Lorsqu’un événement appelle le script this.getTemplate(“…”).hidden=false, on est automatiquement envoyé vers cette page. Y a-t-il un moyen d’empêcher cela ?

    J’ai par exemple une page avec un bouton radio, et j’aimerais que l’un des choix fasse apparaître le modèle caché, sans aller directement sur la page…

    #60421
    Mouss
    Membre

    Bon, finalement j’ai ajouté au bouton radio, après le …hidden=false, this.pageNum= numéro de la page sur laquelle se trouve le bouton.

    Ça peut faire un peu bouger la page si on est pas bien centré dessus mais au moins on reste sur la même page  :jerisjaune:

    #60422
    Merlin
    Maître des clés

    Lorsqu’un événement appelle le script this.getTemplate(“…”).hidden=false, on est automatiquement envoyé vers cette page. Y a-t-il un moyen d’empêcher cela ?

    Pas directement, mais je suppose qu’il suffit faire suivre cette ligne de script par une autre qui ramène vers la page de départ. Par exemple pour aller à la première page du document :

    Code:
    this.pageNum = 0;

    Sachant que générer ou afficher une nouvelle page sans la mettre sous les yeux de l’utilisateur c’est prendre un gros risque : celui qu’il clique 50 fois avant de comprendre ce qu’il se passe…
    ==> Mauvaise expérience utilisateur !
    :Smiley15:

    #60423
    Mouss
    Membre

    celui qu’il clique 50 fois avant de comprendre ce qu’il se passe…

    Hahahaha, imaginer la scène me fait bien rire  :jerisjaune:

    Pas trop de risque sur mon formulaire car le choix qui fait apparaître la page supplémentaire est fait avant de passer à une étape suivante où là, l’utilisateur verra que pour sa situation il y 2 pages  :Smiley03:

    EDIT : Petite question, j’envisage de peut-être ajouter à mon formulaire un modèle de page duplicable par l’utilisateur autant qu’il le souhaite. Est-il possible d’ajouter un script sur un bouton qui permet d’imprimer toutes les pages correspondant au template en question ? J’ai vu sur le forum qu’on pouvait imprimer des plages de pages, mais ça je ne sais pas…

    #60424
    Merlin
    Maître des clés

    Est-il possible d’ajouter un script sur un bouton qui permet d’imprimer toutes les pages correspondant au template en question ?

    A priori oui, mais sa mise en œuvre dépend de beaucoup de paramètres (nb de modèles, nombre de pages à ne pas imprimer, etc.)

    #60425
    Mouss
    Membre

    Ok, on va éviter de s’embêter à essayer de simplifier à l’excès l’utilisation de ce formulaire destiné à des adultes autonomes  :jerisjaune:

    Je viens de subir un nouveau phénomène paranormal quant à l’utilisation de Acrobat XI et Acrobat 8. Je partage avec vous cette histoire étrange.

    Pour rappel : Je bosse habituellement sur Acrobat XI, car quand j’utilise la 8, ça rame beaucoup et quand je veux travailler sur les champs de formulaires ils apparaissent et disparaissent…
    J’avais quand même dû passer sur la version 8 pour mettre en place des calculs qui n’étaient pas pris en compte lorsque je définissais les formules sur Acrobat XI….

    Aujourd’hui, travaillant sur Acrobat XI, je décide de déplacer des champs au-dessus d’autres. La console javascript s’affole alors, me trouvant des erreurs “DeadObjectError objet introuvable” et des “Field.Value:4:….” en veux-tu en voilà, des erreurs en cliquant sur des boutons radio etc. (pourtant à part la position des champs, rien n’avait été modifié…).

    Je perds alors de précieuses minutes à chercher dans mes scripts (qui fonctionnaient sans problème), sur google et ici d’où peut provenir l’erreur, sans succès.

    Me vient alors l’idée d’essayer sous Acrobat 8. Là, miracle, tout fonctionne, aucun message d’erreur. Je sauvegarde le fichier. Je l’ouvre à nouveau avec Acrobat XI. Tout fonctionne à nouveau sans problème, la console reste tranquillement endormie et invisible.

    Mulder et Scully sont-ils inscrits ici ?

    #60426
    Merlin
    Maître des clés

    Qui sait…?
    :alien:

    #60427
    Mouss
    Membre

    Re-bonjour les amateurs de phénomènes paranormaux.

    J’ai du nouveau sur mon formulaire hanté.

    Certains boutons radio sont censés attribuer une valeur à des champs texte. Aucun problème sur Acrobat, mais sur Reader… rien n’apparaît au niveau des champs texte….

    Problème de logiciels ou versions pourriez-vous penser ?
    Détrompez-vous !
    J’ai une version plus ancienne de mon formulaire, qui a depuis subi simplement plusieurs changements “esthétiques”, sans modification au niveau des scripts concernés, et qui fonctionne correctement sur Reader…

    L’ajout de templates ou les changements de positions/couleur de fond etc. y sont-ils pour quelque chose ?

    Ce qui est très étrange c’est que l’un des boutons radio (2 choix) fait bien apparaître une valeur spécifique à chaque choix sur un champ texte… Évidemment il s’agit du champ texte le moins important…
    De même mon script de visibilité d’un template ne fonctionne plus…

    Très étrange également, sans avoir fait de manipulation particulière, le message d’erreur sur la police (absente de mon PDF) Cochin contenant un encodage incorrect, a cessé d’apparaitre à l’ouverture de mon document depuis 1 heure…

    Bon, j’ai ma version précédente que je peux utiliser mais je vais devoir refaire toutes les modifications esthétiques…  :mur: :mur: :mur: :mur: :mur:

    #60428
    Merlin
    Maître des clés
    #60429
    Mouss
    Membre

    La console s’ouvre quand il y a une erreur de script et ça me permet de voir où apporter des corrections, et encore…. comme je le disais plus bas, à un moment, après avoir déplacé des champs, la console s’était mise à me trouver des erreurs alors que les scripts n’avaient pas changé, et en passant sur Acrobat 8 puis en sauvegardant le fichier le problème semblait avoir été réglé.

    Là ce qui est étrange c’est que sur Acrobat Pro (XI et 8), tout fonctionne, donc pas d’erreurs de scripts, mais sur Reader mes champs texte ne prennent plus la valeur qu’ils sont censés prendre… Et sur ma version plus ancienne, qui a les mêmes scripts pour les actions concernées, ça fonctionne bien sur Reader.

    #60430
    Merlin
    Maître des clés

    Tu devrais peut être tester sur un autre ordi, pour voir si ton Reader fonctionne correctement…  :doute:

    #60431
    Mouss
    Membre

    Salut,

    Malheureusement Merlin, le problème était toujours là sur d’autres ordis.

    Par contre, semi-bonne nouvelle, j’ai trouvé l’origine du problème ! C’est l’utilisation d’un modèle de page, caché/visible selon le choix fait sur un bouton radio.

    J’étais reparti sur ma vieille version et j’ai commencé à refaire des modif en testant au fur et à mesure, et j’ai vu que c’est après l’ajout d’un modèle de page que ça commençait à merder.

    Du coup je suis revenu sur mon tableau final, j’ai supprimé le modèle de page, et les actions qui ne fonctionnaient plus sous Reader ont fonctionné !

    Je vais donc oublier pour le moment l’utilisation de modèles de pages… dommage…

    #60432
    Merlin
    Maître des clés

    Ça c’est de l’info !
    Merci.
    :bravo:

    #60433
    Mouss
    Membre

    Bonjour Poudlard,

    Je déterre mon sujet pour à nouveau solliciter votre aide précieuse.

    Je confectionne actuellement le complément de mon formulaire de base.
    Le principe est le suivant (exemple en pièce jointe) :
    – Sur chaque ligne, l’utilisateur choisit un type de recette ou dépense puis indique le montant (j’utilise ici le script de Thom Parker app.popupmenu)
    – J’ai placé des champs de totaux par type de recette/dépense

    J’avais au départ pensé à mettre un script de validation sur les champs prix qui, en fonction du type choisi, ajoutait le montant au total correspondant. Ça ne fonctionnait pas, mais en le plaçant en action champ désactivé ça marchait. Le problème est qu’avec ça, on peut entrer un montant, et s’amuser à activer/désactiver le champ en question et le total augmentait en conséquence.

    J’ai donc opté pour un bouton qui calculerait les totaux, avec le script suivant :

    Code:
    for (var i=0;i      if (this.getField(“nature.”+i).value=”Loyers”)
                this.getField(“totalentreeloyers”).value=this.getField(“totalentreeloyers”).value+this.getField(“prix.”+i).value;
          else if (this.getField(“nature.”+i).value=”Subventions”)
                this.getField(“totalsubventions”).value=this.getField(“totalsubventions”).value+this.getField(“prix.”+i).value;
          else if (this.getField(“nature.”+i).value=”Autres recettes”)
                this.getField(“totalautresrecettesf”).value=this.getField(“totalautresrecettesf”).value+this.getField(“prix.”+i).value;

          if (this.getField(“nature.”+i).value=””) break;
    }

    Je rencontre cependant les problèmes suivants :
    – au départ déjà je n’avais pas mis la dernière ligne avec le break et tous mes champs nature.i prenaient la valeur “Loyers”
    – avec ou sans cette ligne, les montants s’additionnent seulement dans le total loyers
    – depuis que j’ai ajouté cette ligne break, l’addition se fait toujours uniquement dans le total loyer, et en plus, mes champs nature.i voient leur valeur s’effacer

    Avez-vous une idée du problème ?  :priere:
    Voyez-vous un moyen plus efficace de faire ce que je souhaite faire ?

    EDIT : J’oubliais, j’ai également ce message d’erreur qui s’affiche sur la console :
    TypeError: this.getField(“nature.” + i) is null
    2:AcroForm:calcultotaux:Annot1:MouseUp:Action1

    #60434
    Merlin
    Maître des clés
    Code:
    for (var i=0;i      if (this.getField(“nature.”+i).value=”Loyers”)

    j’ai également ce message d’erreur qui s’affiche sur la console :
    TypeError: this.getField(“nature.” + i) is null
    2:AcroForm:calcultotaux:Annot1:MouseUp:Action1

    C’est parce-que le champ nature.3 et les suivants n’existent pas.  La boucle infinie c’est bien pour compter mais quand on veut modifier quelque chose aux champs il faut tenir de leur nombre. Je l’ai appris récemment à mes dépends (merci Alex ;-)).

    Donc pour ce document où il y a 3 champs “nature.x” il faudrait changer :
    for (var i=0;i
    en : for (var i=0;ii<3)

    (inférieur à 3 parce-que le compte commence à zéro).

    Et ensuite, comme par magie, tout le reste se met à fonctionner comme attendu…
    :soleil:

    #60435
    Mouss
    Membre

    Salut Merlin,

    En fait les champs nature.3 et suivants existent dans mon formulaire, là je l’ai juste allégé. J’envisage de faire éventuellement de cette page un modèle duplicable (si ça ne fout pas en l’air le reste de mon formulaire comme ça avait été le cas), c’est pour ça que j’essaie de faire un script sans avoir de “dernier indice”, et que j’ai ajouté la ligne avec le break.

    J’ai d’ailleurs un peu modifié mon script, j’ai passé la ligne break en première instruction de ma boucle for, et j’ai aussi changé la ligne pour le cas où le champ est vide :

    Code:
    for (var i=0;iif (this.getField(“nature.”+i)==null) break;
    else if (this.getField(“nature.”+i).value=”Loyers”) this.getField(“totalentreeloyers”).value=this.getField(“totalentreeloyers”).value+this.getField(“prix.”+i).value;
    else if (this.getField(“nature.”+i).value=”Subventions”) this.getField(“totalsubventions”).value=this.getField(“totalsubventions”).value+this.getField(“prix.”+i).value;
    i++;
    }

    Je n’ai plus de message d’erreur qui apparaît sur la console mais j’ai toujours le problème suivant : en cliquant sur le bouton de calcul des totaux, tous mes champs nature.i prennent la valeur “Loyers”, même si je ne fais aucun choix ou un choix différent, et toutes mes valeurs s’additionnent dans le champs total loyers. Je ne comprends pas du tout comment mon script fait changer la valeur des champs nature.i…

    Je vais peut-être essayer autre chose que le app.popUpMenu.

    #60436
    Merlin
    Maître des clés

    C’est une erreur de débutant, que je fais souvent moi aussi :

    Ce script affecte la valeur “Loyers” aux champs “nature” de la boucle :

    else if (this.getField(“nature.”+i).value = “Loyers

    Celui-ci vérifie si la valeur des champs “nature” de la boucle est égale à “Loyers” :

    else if (this.getField(“nature.”+i).value == “Loyers

    :geek:

    #60437
    Mouss
    Membre

    Oh mon dieu ! Merci Merlin!  :bonjour:

    Qu’est-ce qu’on se sent bête quand on galère à essayer de nouveaux codes pour résoudre son problème alors que la solution est un “=” supplémentaire…
    Cela dit j’aurais pas imaginer que dans un if ça pouvait quand même attribuer une valeur et non simplement vérifier la valeur…

    Merci encore Merlin  :bravo:

    #60438
    Merlin
    Maître des clés

    Qu’est-ce qu’on se sent bête quand on galère à essayer de nouveaux codes pour résoudre son problème alors que la solution est un “=” supplémentaire…

    Tu ne peux pas imaginer à quel point je te comprend !  :mur:

    :Smiley03:

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