Donnez vie à vos documents numériques !
 

Fonction TVA multiple

abracadabraPDF Forums PDF – Général Fonction TVA multiple

  • Créateur
    Sujet
  • #74068
    davidletellier
    Participant

    Bonjour à toutes et à tous !

    Tout d’abord, merci pour ce forum, j’ai pu, grâce à vous, trouver beaucoup d’infos afin de réaliser un pdf interactif qui commence à ressembler à quelque chose.

    Je me permets de solliciter votre aide car j’arrive au bout de mes compétences.

    J’ai créer un système de calcul multi TVA fait de bric et de broc (je ne suis pas développeur) mais j’arrive à un stade où je bloque. Je dois dupliquer les 5 premières lignes sur tout le document mais au regard de la façon dont j’ai créé les calculs cela s’annonce très fastidieux. Est-il possible de créer une fonction en amont que je pourrais appliquer à mes champs sans avoir à modifier chaque “case” ?

    J’espère être clair, si quelqu’un peut m’aiguiller sur le principe à mettre en place ce serait d’une grande aide !

    Merci d’avance 🙂

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

    bonjour,
    Ce serait possible de créer un script, mais manuellement se sera plus rapide.
    Il existe une fonction Acrobat pour créer plusieurs copies. Comme tu en as besoin de 72 sur 3 pages, il faut d’abord les mettre tous sur une seule, puis les répartir.

    Plus de détails ce soir si tu n’y es pas arrivé…

    @+
    😎

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

    Bonjour

     

    Ci-joint un document qui fonctionne.

    L’astuce c’est de créer tous les champs à partir de la première rangée en utilisant la fonction “Créer plusieurs copies” (comme indiqué par bebarth) dans un autre PDF suffisamment haut pour en contenir 72 (j’ai utilisé un format A1). Ensuite il faut les amener dans le formulaire en 3 fois (car 3 pages) par copier-coller.

    J’ai remplacé les champs “TVA” par des listes déroulantes, ce qui permet d’être certain des valeurs qu’ils contiennent, et donc d’effectuer les calculs en utilisant ces valeurs directement.

    Les scripts de calcul des rangées et des TVA sont dans le champ invisible “calculs”.

    Les champs total HT et total TTC ne font que de simples additions.

    L’ordre de calcul est important, bien entendu.

     

    J’ai aussi légèrement modifié la fonction Reset et le champ qui contient l’intitulé, car en fait le Reset ne vide pas les champs, il les remet à leur valeur par défaut. Ce qui n’est pas forcément la même chose. 😉

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

    PS : si le document doit être imprimé il existe une astuce pour ne pas imprimer la flèche située à droite des listes déroulantes.

    Tu me dis.

    #74076
    davidletellier
    Participant

    Oh la la, c’est du grand art, mille mercis Merlin pour ton aide précieuse et merci bebarth pour ces infos ! Je vais décortiquer le champ “Calculs” pour essayer de comprendre avec l’aide de tes commentaires. C’est exactement ce que j’essayais de faire, simplifier les calculs car mon doc devenait une usine à gaz 😀

    Pour les flèches, le document est destiné à être imprimé, donc si tu as une astuce ce serait très sympa.

    Merci beaucoup et bonne soirée 🙂

    • Cette réponse a été modifiée le il y a 1 mois par davidletellier.
    • Cette réponse a été modifiée le il y a 1 mois par davidletellier.
    #74079
    Merlin
    Maître des clés

    Merci !

    Il y a une boucle qui calcule le total HT de chaque rangée, et une autre boucle qui calcule les TVA en alimentant 3 variables en fonction du taux utilisé.

    L’intérêt d’avoir un seul champ qui déclenche tous ces calculs c’est la rapidité, s’il y avait 2 ou 3 fois 72 champs de calculs qui se déclenchaient à chaque fois il y aurait des lenteurs sensibles à l’utilisation.

     

    Une liste déroulante en lecture seule n’affiche pas la flèche noire, donc on peut utiliser les évènements “Document est imprimé” et “Document a été imprimé” pour les verrouiller avant l’impression et les déverrouiller après.

    Et pour que ça ne soit pas considéré comme une modification du document si l’utilisateur n’a rien fait d’autre qu’imprimer depuis le dernier enregistrement on stocke au préalable la variable “dirty” et on la rétablit ensuite.

    Ce qui nous donne :

    // À PLACER EN ÉVÈNEMENT WILL PRINT (SERA IMPRIMÉ)
    // stockage de la variable "dirty"
    var bSale = this.dirty;
    // verrouillage de toutes les listes
    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "combobox") {oFld.readonly = true;}
    }

    // À PLACER EN ÉVÈNEMENT DID PRINT (A ÉTÉ IMPRIMÉ)
    // déverrouillage de toutes les listes
    for (var i = 0; i < this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == "combobox") {oFld.readonly = false;}
    }
    // rétablissement de la variable "dirty"
    this.dirty = bSale;

    #74081
    davidletellier
    Participant

    Merci pour les explications et l’astuce Merlin, grâce à toi mon document fonctionne parfaitement ! 🙂

    #74082
    Merlin
    Maître des clés

    🙂

    #74086
    davidletellier
    Participant

    Hello,

    Je me permets de solliciter à nouveau votre aide car après pas mal de recherches, je bloque sur un nouveau problème.

    Le document est top, il me reste à créer un bouton de sauvegarde. Le but est de pouvoir créer une copie “aplatie” du document avec un acrobat reader afin de l’envoyer par email sans que le destinataire ne puisse modifier les champs du bon de commande/devis. Idéalement le document initial reste inchangé (si besoin de le modifier par la suite).

    J’ai créé un bouton sur lequel j’ai collé un script que j’ai trouvé dans un autre document mais ça ne fonctionne pas.

    if (this.getField(“Nom”).value==””) {

    app.alert({ cMsg: “Veuillez saisir un \”Nom\” afin de pouvoir enregistrer le document.”, cTitle: “ATTENTION”, nIcon: 0});
    } else {
    for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).readonly=true;
    this.getField(“raz_txtprix”).display = display.hidden;
    this.getField(“raz_txtdoc”).display = display.hidden;

    var NomDuFichier=””+this.getField(“Nom”).value+”.pdf”;

    try {
    Save_facture(NomDuFichier);
    } catch(e) {
    app.alert(“Le plugin n’a pas fonctionné !”,1)
    }
    for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).readonly=false;
    app.alert(“Document sauvegardé”, 3);
    }

    Si quelqu’un peut m’expliquer pourquoi ça ne fonctionne pas, ce serait vraiment top !

    • Cette réponse a été modifiée le il y a 4 semaines et 1 jour par davidletellier.
    • Cette réponse a été modifiée le il y a 4 semaines et 1 jour par davidletellier.
    #74089
    Merlin
    Maître des clés

    Acrobat Reader (et Foxit Reader aussi) ne permet pas d’aplatir les champs, c’est à dire de les fusionner avec la couche graphique. Donc tu as bien fait de choisir de les verrouiller. Ça ça fonctionne.

    Par-contre, sécurité oblige, il n’est pas possible de nommer et d’enregistrer un PDF depuis un script de document. Tout ce qu’on peut faire c’est déclencher un Enregistrer sous et laisser l’utilisateur se débrouiller avec.

    Pour enregistrer et nommer un PDF il faut que le document fasse appel à un script d’application, c’est à dire un script préalablement installé dans le sous-dossier “JavaScripts” d’Acrobat (Reader ou Pro).

    Toutes les explications sont ici : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/

     

    #74090
    davidletellier
    Participant

    Bonjour Merlin,

    Et merci pour ta réponse, je vais creuser le sujet 🙂

    #74094
    bebarth
    Maître des clés

    bonjour,
    Il y a un exemple ici :

    Enregistrer sous… avec concaténation de champs

    @+
    😎

    #74095
    davidletellier
    Participant

    Bonjour bebarth,

    Merci pour l’info, je vais creuser ce sujet également 🙂

    Bonne journée !

    #74096
    davidletellier
    Participant

    Bonjour Merlin et bebarth,

    Un petit message pour vous remercier tous les deux de votre aide précieuse, j’ai réussi à faire tout ce que je souhaitais sur le document et il fonctionne parfaitement !

    Belle journée à vous 🙂

    #74097
    Merlin
    Maître des clés

    🙂

    Merci pour le retour.

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