abracadabraPDF › Forums › PDF – Général › Calcul automatique du tarif en fonction du pourcentage. – RÉSOLU
- Ce sujet est vide.
- CréateurSujet
- 9 juillet 2013 à 15:58 #44591
adrith
ParticipantBonjour,
Voici mon problème, j’ai un champ avec un prix fixe déjà renseigné, puis un champ pourcentage et un champ prix.
Je voudrais que si l’on rentre un pourcentage, ça calcul le prix en fonction du prix fixe, et inversement, si on rentre le prix, ça calcul alors le pourcentage.
Je me prend la tête avec ce truc :Euuuh:
Vous croyez que c’est possible de faire ça ?Merci
- CréateurSujet
- AuteurRéponses
- 9 juillet 2013 à 17:28 #55309
Merlin
Maître des clésBonjour,
Quelque chose comme une bête règle de 3 ?
Comme expliqué ici : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/calculs-en-javascript-et-en-notation-simplifiee/
Et mis en pratique ici : http://abracadabrapdf.net/pdf-de-demo/formulaires/bon-de-commande-modele/
:Smiley03:Alors la réponse est oui.
:soleil:10 juillet 2013 à 13:09 #55310adrith
ParticipantBonjour,
Merci Merlin.
J’ai mis en pratique les infos glanée dans les 2 liens, mais j’ai un soucis, je m’explique:J’ai donc 3 champs:
– champ 1 vide qui contient un pourcentage
– champ 2 vide qui contient un prix
– champ 3 en lecteur seule avec le prix de base
Le but étant que si on rentre un pourcentage dans le champ 1, ça calcul le pourcentage du prix de base et ça marque ce prix dans le champ 2.
Mais aussi, si je modifie le prix dans le champ 2, alors ça remet à jour le pourcentage dans le champ 1. J’espère que c’est clairJ’ai donc mis ce code en script de calcul personnalisé dans le champ 1:
var champ2 = this.getField(“champ2”);
var champ3 = this.getField(“champ3”);
event.value = champ2.value * 100 / champ3.value;Et celui-ci en script de calcul personnalisé dans le champ 2:
var champ1 = this.getField(“champ1”);
var champ3 = this.getField(“champ3”);
event.value = champ1.value * champ3.value / 100;Si je mets une valeur dans le champ 1, le prix est bien calculé dans le champ 2. Mais dès que je touche au champ 2, il ne met pas à jour le champ 1 mais me rechange ma valeur du champ 2.
Vous avez une astuce pour gérer ça, je ne vois pas ? :doute:
J’ai mis le cas concret dans le petit fichier joint.
Merci pour votre aide[attachment deleted by admin]
12 juillet 2013 à 09:06 #55311adrith
ParticipantBonjour Merlin,
J’ai posé une colle :Ooops:
Sérieusement vous avez vu le problème que je rencontre ? C’est bizarre que le calcul ne fonctionne que dans un sens. Ou plutôt qu’il y a une cellule qui est prioritaire sur l’autre.12 juillet 2013 à 14:35 #55312Merlin
Maître des clésBonjour,
C’est “normal” : l’ordre de calcul reste primordial…
Alex avait fait un exemple de ce genre avec un calcul à double entrée, il est quelque part sur le forum mais je le retrouve pas.
:joker:
12 juillet 2013 à 20:07 #55313adrith
Participantça ne serait pas ce post dont vous parlez ?
http://abracadabrapdf.net/forum/index.php/topic,1483.msg7134.html
je n’ai pas regardé encore en détail mais ça y ressemble à ce que je veux faire :Smiley01:13 juillet 2013 à 09:21 #55314Merlin
Maître des clésC’est exactement ça !
:bravo:15 juillet 2013 à 15:03 #55315adrith
ParticipantBonjour Merlin,
Bon j’ai réussi tant bien que mal à appliquer dans mon contexte l’exemple d’Alex. Nickel.
J’ai 2 questions complémentaires sur mon doc en PJ:1) en mettant par exemple 3 dans le prix, ça affiche 97 %. OK. J’ai bien fixé à 0 chiffre après la virgule mais quand on clic ensuite dans la cellule 97, ça réaffiche tous les nombres (96,77). Pourquoi ? Est-ce normal et y a t-il un moyen de contrer ça ?
2) ensuite, et c’est le plus important. J’aimerais maintenant dupliquer ces 3 champs et pouvoir utiliser la convention parent/enfant afin d’avoir qu’une seule fonction calcul() et qu’elle fonctionne sur tout le document (que j’ai 2, 3 ou même 10 fois le groupe de 3 champs). Je galère pas mal mais sans succès. Est-ce que c’est possible ?
Merci pour tout.
function Calcul()
{if(this.event.target.name==”p02.btn1.champ08″&pourcent)
{
this.getField(“p02.btn2.champ08”).value=(this.event.value*this.getField(“p02.btn4.champ08”).value)/100;
}
if(this.event.target.name==”p02.btn2.champ08″&!pourcent)
{
this.getField(“p02.btn1.champ08”).value=(this.event.value*100)/this.getField(“p02.btn4.champ08”).value;
}}
[attachment deleted by admin]
15 juillet 2013 à 16:52 #55316Merlin
Maître des clésSalut,
1- Il faut utiliser Math.round() en orange ci-dessous.
2- Au lieu d’utiliser directement les noms de champs le mieux est de les placer en variable dans la fonction :
function CalculAmoi()
{
champPourcent = this.getField(“p02.btn1.champ08“);
champPrix = this.getField(“p02.btn2.champ08“);
champPrixFix = this.getField(“p02.btn4.champ08“);
if(acTif)
{
champPrix.value = (event.value*champPrixFix.value)/100;
}
else if(!acTif)
{
champPourcent.value = Math.round((event.value*100)/champPrixFix.value);
}
}Ce qui permet éventuellement de ne pas déclarer les variables avec la fonction, mais avant : ainsi c’est chacun des champs qui déclare ses propres variables avant d’appeler la fonction et c’est une seule et même fonction qui est utilisée par tous les champs !
(Ci-joint).function CalculAmoi()
{
if(acTif)
{
champPrix.value = (event.value*champPrixFix.value)/100;
}
else if(!acTif)
{
champPourcent.value = Math.round((event.value*100)/champPrixFix.value);
}
}:Smiley01:
[attachment deleted by admin]
18 juillet 2013 à 07:51 #55317adrith
ParticipantBonjour,
Un grand Merci Merlin. C’est parfait et ça m’a fait gagner bcp de temps.
:bravo: :bravo:Bonne journée.
- AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.