abracadabraPDF › Forums › PDF – Général › Changer "simplement" des tarifs dans un formulaire
- Ce sujet est vide.
-
CréateurSujet
-
2 août 2016 à 09:59 #45473
KROMS
MembreBonjour à 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 <= "10")
{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
-
CréateurSujet
-
AuteurRéponses
-
2 août 2016 à 13:06 #61111
Merlin
Maître des clésBonjour.
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;}2 août 2016 à 13:14 #61112Merlin
Maître des clésPS : 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:2 août 2016 à 14:52 #61113KROMS
MembreBonjour 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 …
2 août 2016 à 15:12 #61114KROMS
Membrerebonjour à 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 !
2 août 2016 à 16:57 #61115Merlin
Maître des clésComment 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.2 août 2016 à 17:01 #61116Merlin
Maître des clésTant 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:
2 août 2016 à 17:37 #61117KROMS
MembreWaaahaaaa super ! merciiiii :bravo:
Mais reste à résoudre le problème du report des formules sur les copies !
3 août 2016 à 11:53 #61118KROMS
MembreRebonjour à 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
3 août 2016 à 12:13 #61119Merlin
Maître des clésTous 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.3 août 2016 à 12:47 #61120KROMS
MembreAlors 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 !!!3 août 2016 à 13:44 #61121Merlin
Maître des clésVoir :
– http://abracadabrapdf.net/forum/index.php/topic,2898.msg16395.html#msg16395
&
– http://abracadabrapdf.net/forum/index.php/topic,2888.0.htmlMais 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).
3 août 2016 à 13:59 #61122KROMS
MembreHello Merlin, c’est absolument MERVEILLEUX !
WAAAAAhAAAAAAAA !!!!Très bonnes vacances !!!!!
3 août 2016 à 14:00 #61123Merlin
Maître des clésÀ toi aussi.
:soleil:3 août 2016 à 17:22 #61124KROMS
Membredernière question :
Le tarif n’a pas été adapté… J’ai tenté ce code mais il ne marche pasvar res = event.target.name.replace(/quantite1./,””);
var b = this.getField(“quantite1.”+res).value;
if (b <= "10")
{event.value = 10;}
else
{event.value = 100;}Une idée ?
Merci pour tout
3 août 2016 à 22:04 #61125bebarth
Maître des clésbonjour,
en vacances mais de passage, je ne comprends pas bien ce que tu veux faire !
si la quantité est <= 10 elle est égale à 10 sinon à 100 ???
si c’est le cas il faut rajouter dans ton script de validation :
if (event.value <= 10) {event.value = 10}
else {event.value = 100}
sinon explique ce que tu désires. je devrais pouvoir te répondre jusqu’à la fin de la semaine.
@+
:bonjour:4 août 2016 à 06:39 #61126KROMS
MembreBonjour 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 <= 10) {event.value = 10}
else {event.value = 100}4 août 2016 à 06:44 #61127KROMS
Membrepar contre ca marche parfaitement avec
var res = event.target.name.replace(/quantite1./,””);
event.value = this.getField(“quantite1.”+num).value;
if (event.value <= 10) {event.value = 10}
else {event.value = 100}:bravo: :bravo: :bravo: :bravo: :bravo: :bravo:
et merci !!!!4 août 2016 à 08:11 #61128bebarth
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:4 août 2016 à 08:27 #61129KROMS
Membreen 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 <= 10) {event.value = 10 ;}
else {event.value = 110 ;}num étant la variable déclarée dans le champ prix…
4 août 2016 à 11:40 #61130KROMS
Membrefinalement 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 <= 10) {event.value = 10 ;}
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;4 août 2016 à 22:03 #61131bebarth
Maître des clésbonsoir,
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 < this.numFields; 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:5 août 2016 à 10:17 #61132KROMS
MembreBonjour à 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
5 août 2016 à 10:55 #61133Merlin
Maître des clésC’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 :
5 août 2016 à 17:26 #61134KROMS
MembrePar 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 ;-((
5 août 2016 à 18:46 #61135KROMS
MembreBonsoir,
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éthode6 août 2016 à 14:32 #61136bebarth
Maître des clésbonjour,
Les calques se situent au dessous des champs et n’empêcheront donc pas les modifications. Ce n’est donc pas un calque qu’il faut mettre mais un champ “visible” au dessus des autres et un script qui se lance à l’ouverture et qui cache ce/ces champs si le fichier est ouvert avec Adobe Reader ou Acrobat :
if (app.viewerVariation == “Reader” || app.viewerVariation == “Full”) {this.getField(“cache”).display=display.hidden};
Bonnes vacances & @+
:bonjour:7 août 2016 à 11:40 #61137Merlin
Maître des clésN’ayant pas de Mac, j’aimerais bien savoir si quelqu’un avec un MAC mais pas de Reader, pouvait tester…
Voilà ce que ça donne vu dans Aperçu et vu dans le Finder (Explorateur de fichiers).
Effectivement, utiliser un calque est un piège puisque les champs de formulaires apparaissent toujours comme flottants par-dessus, mais au moins, tant qu’il reste partiellement lisible, le message à le mérite d’être clair et de ne laisser aucun doute à l’utilisateur. :Smiley15:
7 août 2016 à 11:44 #61138Merlin
Maître des clésCette alerte ne sert à rien puisque si l’utilisateur la voit c’est qu’il a déjà ouvert le document avec Acrobat (Reader ou Pro).
Elle est donc déconcertante et plutôt contre-productive.:geek:
7 août 2016 à 12:31 #61139Merlin
Maître des clésif (app.viewerVariation == “Reader” || app.viewerVariation == “Full”) {this.getField(“cache”).display=display.hidden};
En réalité on ne veut pas forcer l’ouverture avec Acrobat (Reader ou Pro), on veut forcer l’ouverture avec un Reader qui interprète le JavaScript… Et Acrobat n’est pas le seul, le plus connu est Nuance PDF Converter mais il n’est pas le seul.
– http://shop.nuance.fr/store/nuanceeu/fr_FR/pd/ThemeID.26429600/productID.305547300/PDF-Converter-pour-Mac-v4
– http://shop.nuance.fr/store/nuanceeu/fr_FR/DisplayCategoryProductListPage/ThemeID.26429600/categoryID.13534800/Solutions-PDFDonc on peut utiliser plus simplement :
Code:this.getField(“cache”).display=display.hidden;Par-contre ce qui est embêtant avec un champ “masque” c’est qu’il ne faut pas oublier de le remettre en “visible” avant chaque enregistrement du document…
Problème qui ne se pose pas avec un calque “masque”.:Smiley15:
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.