Donnez vie à vos documents numériques !
 

Changer "simplement" des tarifs dans un formulaire

abracadabraPDF Forums PDF – Général Changer "simplement" des tarifs dans un formulaire

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45473
    KROMS
    Membre

    Bonjour à tous,

    Je suis nouvelle sur le forum,  et j’ai créé mon premier formulaire toute seule la semaine dernière seulement  :extra:

    Je n’ai pas assez de recul pour formuler simplement ma question et je demande votre indulgence.  Si vous pouviez m’indiquer la bonne direction pour bien orienter mon travail, ce serait GENIAL !

    Disons que j’ai 10 prix unitaires pour un produit donné (cf exemple)
    Si le client indique une quantité supérieure à 10, alors le tarif affiché en ligne 2 change automatiquement
    Le prix total est à priori calculé avec la formule trouvée sur le site  (merci beaucoup)

    var a = this.getField(“Q1”).value;
    if (a {event.value = a*=36;}
    else
    {event.value = a*32;}

    Je vais devoir dupliquer cette méthode sur une centaine de produits et les tarifs vont changer au cours de l’année….

    Suis-je obligée de nommer de manière spécifique les champs quantité et prix total pour les produits suivant ? est-ce que par exemple il existerait des possibilités de nommage “relatives” ?

    Est-il possible “d’importer” automatiquement des “grilles” de tarifs sans avoir à modifier automatiquement les scripts de validation ?

    Je m’aperçois que mes explications sont assez confuses. Mais si vous aviez la gentillesse de me guider, je vous en serais très très très reconnaissante !

    Y’aurait-il une solut

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

    Bonjour.

    Dans ce cas il y a plus simple que le script ci-dessus et que celui que je viens de poster dans l’autre sujet.

    On peut utiliser un script pour modifier la valeur des champ Prix.
    Ainsi le champ Total n’a plus qu’à faire toujours la même multiplication du champ Prix par le champ Quantité.

    On pourrait placer un script de calcul dans les champs Prix, mais ça ajouterait beaucoup de calculs à faire à chaque modification d’un champ, et surtout tu as déjà suffisamment de champs à gérer dans l’ordre de calcul.

    Donc on va utiliser un script de validation dans les champs Quantité, c’est-à-dire que c’est la modification du champ quantité qui va “pousser” la nouvelle valeur vers le champ Prix correspondant.
    Ce qui sera plus économe en temps processeur et plus réactif que d’effectuer un recalcul systématiques dans tous les champs.

    A placer en script de validation dans le champ Quantité :

    Code:
    var oPrix = this.getField(“P1”);
    if (event.value >= 11) {oPrix.value = 36;}
    else {oPrix.value = 32;}
    #61112
    Merlin
    Maître des clés

    PS : avec un peu de recul, je m’aperçois que pour bien comprendre ce que j’explique ci-dessus il vaut mieux lire ça d’abord :
    http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

    Jusqu’à la fin (ce n’est pas très long).
    :idee:

    #61113
    KROMS
    Membre

    Bonjour Merlin et merci de ta réponse !

    J’étais arrivé grosso modo  à la même conclusion mais j’avait appliqué la validation sur le prix et non sur la quantité.
    Si ta solution permet de gagner du temps en terme de recalcul des données je prends avec joie et reconnaissance !

    Tant qu’à continuer à enchanter ma journée, peux-tu m’indiquer si on peut directement utiliser les numéros de ligne et de colonne dans une formule ? Cela me permettrait d’économiser environ 300 nommage de champs et 300 formules …

    #61114
    KROMS
    Membre

    rebonjour à tous les magiciens

    J’ai regardé le bon de commande des “Gourmandines” en téléchargement sur le site et qui m’a complètement bluffée !
    http://abracadabrapdf.net/pdf-de-demo/formulaires/les-gourmandines/

    Je lis avec le plus grand intérêt que “Il a été conçu de façon à ce que les prix puissent être facilement actualisés directement par Les Gourmandines. Ce qui le rend pérenne, ce n’est pas un formulaire one-shot.

    Comment les magiciens s’y sont-ils pris ???? Y’aurait-il un petit bout de code pour m’éclairer ?

    Merci à tous et très belle journée ensoleillée !

    #61115
    Merlin
    Maître des clés

    Comment les magiciens s’y sont-ils pris ??? Y aurait-il un petit bout de code pour m’éclairer ?

    C’est simple, dans le formulaire les Gourmandines le prix est la valeur par défaut (onglet Options) du champ.
    Ainsi mon client peut changer ses prix sans rien modifier d’autre et sans devoir passer par moi à chaque fois.

    #61116
    Merlin
    Maître des clés

    Tant qu’à continuer à enchanter ma journée, peux-tu m’indiquer si on peut directement utiliser les numéros de ligne et de colonne dans une formule ? Cela me permettrait d’économiser environ 300 nommage de champs et 300 formules…

    Pour commencer il faut que tu t’intéresses de près à la Convention de dénomination des champs formulaires et à la duplication rapide des champs :
    http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/

    Ensuite on parlera de code JavaScript et des boucles (de programmation)…  :geek:

    #61117
    KROMS
    Membre

    Waaahaaaa super ! merciiiii  :bravo:

    Mais reste à résoudre le problème du report des formules sur les copies  !

    #61118
    KROMS
    Membre

    Rebonjour à tous,

    Après avoir passé plusieurs heures à chercher encore et encore, je ne parviens pas à trouver de code ou de boucle pour adapter les formules de calcul  :mur:

    Un peu d’aide SVP ???? Un petit tuto pour m’apprendre à modifier automatiquement les totaux ?

    Merciiiiii

    #61119
    Merlin
    Maître des clés

    Tous les grands magiciens sont actuellement en vacances et moi je pars tout à l’heure sans avoir le temps de te répondre.  :soleil:
    Patience…  :Smiley03:

    Mais la réponse est déjà plusieurs fois dans le forum, cherche en particulier les réponses de Bebarth et d’Alex.
    Ce sont les grands spécialistes es-boucles.

    #61120
    KROMS
    Membre

    Alors bonnes vacances Merlin !
    Peux-tu simplement m’indiquer les mots clés qui me feront aboutir ?
    Moi aussi j’aimerais partir en vacances …. vendredi si j’arrive à livrer !!!

    #61121
    Merlin
    Maître des clés

    Voir :
    http://abracadabrapdf.net/forum/index.php/topic,2898.msg16395.html#msg16395
    &
    http://abracadabrapdf.net/forum/index.php/topic,2888.0.html

    Mais en fait, tout bien réfléchi, tu n’as pas besoin de boucle : il suffit de capter le dernier chiffre du nom du champ (celui qui est après le point) qui fait le total et de le réutiliser pour lui dire quels champs Prix et Quantité il faut utiliser.

    Ce qui se traduit par :

    Code:
    var num=event.target.name.replace(/sousTotal./,””);
    event.value=this.getField(“tarif.”+num).value * this.getField(“quantite.”+num).value;

    A placer en script de calcul dans chaque champ sous-total (donc à faire avant de dupliquer le champ pour ne pas avoir à refaire 100 fois la même chose…).  :geek:

    L’autre avantage quand on crée et duplique les champs dans l’ordre logique de calcul c’est que du coup l’ordre de calcul est correct d’emblée.  :Smiley03:

    Exemple ci-joint (dans lequel il y a aussi un chiffre à gauche du point dans le nom des champs puisqu’il y a plusieurs rangées).

    #61122
    KROMS
    Membre

    Hello Merlin, c’est absolument MERVEILLEUX !
    WAAAAAhAAAAAAAA !!!!

    Très bonnes vacances !!!!!

    #61123
    Merlin
    Maître des clés

    À toi aussi.
    :soleil:

    #61124
    KROMS
    Membre

    dernière question :
    Le tarif n’a pas été adapté… J’ai tenté ce code mais il ne marche pas

    var res = event.target.name.replace(/quantite1./,””);
    var b = this.getField(“quantite1.”+res).value;
    if (b {event.value = 10;}
    else
    {event.value = 100;}

    Une idée ?

    Merci pour tout

    #61125
    bebarth
    Maître des clés

    bonjour,
    en vacances mais de passage, je ne comprends pas bien ce que tu veux faire !
    si la quantité est si c’est le cas il faut rajouter dans ton script de validation :
    if (event.value else {event.value = 100}
    sinon explique ce que tu désires. je devrais pouvoir te répondre jusqu’à la fin de la semaine.
    @+
    :bonjour:

    #61126
    KROMS
    Membre

    Bonjour c’est exactement ça ! Les prix sont totalement fictifs comme tu l’imagines bien, c’est juste que ça me permet de repérer les erreurs….

    j’ai bien tenté ce code mais ça ne marche toujours pas ;-((  :mur:

    var res = event.target.name.replace(/quantite1./,””);
    event.value = this.getField(“quantite1.”+res).value;
    if (event.value else {event.value = 100}

    #61127
    KROMS
    Membre

    par contre ca marche parfaitement avec

    var res = event.target.name.replace(/quantite1./,””);
    event.value = this.getField(“quantite1.”+num).value;
    if (event.value else {event.value = 100}

    :bravo: :bravo: :bravo: :bravo: :bravo: :bravo:
    et merci  !!!!

    #61128
    bebarth
    Maître des clés

    …tant mieux, mais à mon avis les 2 premières lignes ne servent à rien !


    event.value = this.getField(“quantite1.”+num).value;

    …à quoi correspont “num” ici ???

    L’exemple que t’a donné Merlin sert à récupérer le numéro d’un champ pour faire une opération avec ce muméro. Ici tu travailles sur le même champ.
    @+
    :bonjour:

    #61129
    KROMS
    Membre

    en fait ça ne  marche pas

    C’est à dire que mon champ tarif affiche toujours la valeur 100 mais jamais la valeur 10  :Euuuh: :Euuuh: :Euuuh:

    J’ai essayé sur tes conseils le script :

    event.value = this.getField(“quantite1.”+num).value;
    if (event.value else {event.value = 110 ;}

    num étant la variable déclarée dans le champ prix…

    #61130
    KROMS
    Membre

    finalement en changeant le nom de la variable ça a l’air de marcher :

    var k=event.target.name.replace(/tarif1./,””);
    event.value = this.getField(“quantite1.”+k).value;
    if (event.value else {event.value = 110 ;}

    Est-ce que le bug était lié au fait que j’avais déjà utilisé dans d’autres formulaires semblables ????
    peut-être que c’était lié au fait que la variable num précédemment “utilisée” était déclarée plus tard dans l’ordre de calcul…
    Vous avez déjà vu ça ?

    reste maintenant à trouver comment écrire la somme de tous les champs sousTotal et ça me parait loin d’être gagné

    J’ai bien vu qu’Alex avait posé le script ci-dessous  qui fonctionne sur un masque de nom de champ, mais il somme tout et pas seulement la ligne !!!!
    console.clear();
    teteNom=”Montant”;
    indexField=0;
    indexTerme=0;
    total=0;
      while(indexField  {
      //Recupere le nom du champ.
      nameField=this.getNthFieldName(indexField);
          if(nameField.substring(0,teteNom.length)==teteNom)
          {
          indexTerme=indexTerme+1;
          console.println(indexTerme+”-“+nameField+”-valeur=”+this.getField(nameField).value)
          total=total+1*this.getField(nameField).value;
          }
      indexField=indexField+1;
      }
    console.println(“Total=”+total)
    this.event.value=total;

    #61131
    bebarth
    Maître des clés

    bonsoir,
    Je pense que j’ai pris le problème précédent en cours et que je ne l’ai pas compris. Il aurait peut-être fallu que je reprenne le post depuis le début…

    en ce qui concerne la somme de tous les champs “sousTotal”, voici ce que je te propose en script de calcul :

    var nomchamp=””;
    var total=0;
    for (var i = 0; i {var nomchamp=this.getNthFieldName(i);
    var string = nomchamp,
        substring = “sousTotal”;
    if(string.indexOf(substring) > -1)
    {var f = this.getField(nomchamp).value;
    var total=total+f}
    }
    event.value=total;

    @+
    :bonjour:

    #61132
    KROMS
    Membre

    Bonjour à tous c’est vraiment impeccable et merci beaucoup !

    J’ai finalisé mon document et je tombe sur un bug hallucinant : tous les utilisateurs MAC, même avec un Reader peuvent modifier en écriture les montants et les prix. :mur: :jerisjaune: :doute:
    C’est un problème connu ? Avec une solution connue ?

    Merci de votre aide

    #61133
    Merlin
    Maître des clés

    C’est un problème archi-connu mais ça n’a rien d’un bug, c’est “by design” comme ils disent…
    ==> http://abracadabrapdf.net/ressources-et-tutos/pdf-mac/lecteurs-pdf-mac/

    Pour forcer l’ouverture d’un formulaire PDF dans Acrobat Reader il faut utiliser une astuce.
    On place en premier plan un grand champ de formulaire qui recouvre toute la page et qui affiche un avertissement du genre : “Ce PDF requiert Acrobat Reader pour fonctionner correctement”.

    Et on ajoute un JavaScript qui s’exécute à l’ouverture du formulaire et qui est chargé de masquer ce champ “masque”.

    Donc si le formulaire est ouvert avec Acrobat (Reader ou Pro) le champ est masqué automatiquement et l’utilisateur ne s’aperçoit de rien.
    Si le formulaire est ouvert dans un Reader qui ne supporte pas JavaScript, le masque reste apparent et prévient l’utilisateur.

    L’explorateur de Windows et le Finder de Mac OS afficheront tous les deux le masque comme vignette du formulaire.

    Exemple :

    #61134
    KROMS
    Membre

    Par le plus grand des hasards, est-ce que ça se trouverait dans abracadabraScripts ? Je voudrais tellement partir en vacances et je suis encore coincée au bureau ;-((

    #61135
    KROMS
    Membre

    Bonsoir,

    N’ayant pas de Mac, j’aimerais bien savoir si quelqu’un avec un MAC mais pas de Reader, pouvait tester…
    ou alors quelqu’un qui s’y connait m’indique si c’est la bonne application de la bonne méthode ;-)

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