Arf !
Tu l'as appelé opbjp1 dans les param et j'ai copié/collé bêtement :aie:
Version imprimable
Arf !
Tu l'as appelé opbjp1 dans les param et j'ai copié/collé bêtement :aie:
Non ca s'est bon je m'en suis rendu compte aussi....
mais maintenant je me bat avec objprix has no properties.......:cry:
La condition que je te parle est if valeur = "1", ou je pense ne pas en avoir besoin vu qu'il prend la valeur du value.
Si ton input p1 correspond bien (cf. 2 post au-dessus), c'est que l'id est peut-être dupliqué (ou que tu l'as appelé pI => "i" maj.), bref, vérifie ça car il n'y a pas de raison qu'il ait "moins de propriété" que les 2 autres ;)
Pas pour rien que j'ai tout virer ;)
A+
Merci ca commence a venir je pense.....
Alors voila la fonction
Citation:
function calcul(obj, objp1, objp2, objprix)
{
var pu = parseFloat(objp1.value);
var qt = parseFloat(objp2.value);
var tva = Math.round(pu * parseFloat(obj.value, 10) * 100) / 100;
var ttc = pu + tva;
objprix.value = ttc * qt ;
}
La fonction de calcul :
Citation:
function calcul_form() {
// le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
with (document.forms.form1) {
p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
p2.value = parseInt(q2.value, 10)* parseFloat(pu2.value, 10) ;
p3.value = q3.value * pu3.value ;
total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
// Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
// et non pas une concaténation de chaînes de caractères
}
Et enfin le code HTML :
Citation:
<TH><INPUT TYPE="text" size="75">
<TH><INPUT TYPE="text" id="pu1" NAME="pu1" SIZE="3" MAXLENGTH="4" >
<TH><INPUT TYPE="text" id="q1" NAME="q1" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
<TH><INPUT TYPE="text" id="p1" NAME="p1" SIZE="8" MAXLENGTH="4" >
<TH><select name="valeur" onchange="calcul(this, document.getElementById('pu1'), document.getElementById('q1'), document.getElementById('objp1') )">
<option value="#">TVA Appliquée</option>
<option value="0.196">TVA à 19.6 %</option>
<option value="0.055">TVA à 5.5 %</option>
<TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
<TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
<TR BGCOLOR="#CCCCCC">
<TH><INPUT TYPE="text" size="75">
<TH><INPUT TYPE="text" id="pu2" NAME="pu2" SIZE="3" MAXLENGTH="4" >
<TH><INPUT TYPE="text" id="q2" NAME="q2" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
<TH><INPUT TYPE="text" id="p2" NAME="p2" SIZE="8" MAXLENGTH="4" >
<TH><select name="valeur" onchange="calcul(this, document.getElementById('pu2'), document.getElementById('q2'), document.getElementById('objp2') )">
<option value="#">TVA Appliquée</option>
<option value="0.196">TVA à 19.6 %</option>
<option value="0.055">TVA à 5.5 %</option>
<TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
<TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
Donc le calcul form ne sert plus a rien??????
p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
Il me sert a calculer le prix total des objets c'est a dire:
p1 = prix total sur une référence
q1 = quantité de cette reference
pu1 = prix unitaire de cette reference.
Ne pense tu pas qu'on s'embrouille selon les termes......
Ou plus précisement c'est moi qui t'embrouille l'esprit....:mrgreen:
On va le faire en français :mouarf:
Si c'est pour calculer, pour chaque article, le prix TTC * la quantité, c'est déjà fait dans calcul().
Dans calcul_form(), logiquement, il te reste à calculer le total de la facture, c'est à dire la somme de tous les prix calculés par calcul()
C'est bon comme ça ? :D
A+
C'est pas tout a fait ça :
Donc :
1) Je rentre l'intitulé de l'article
2) Je rentre le prix unitair HT
3) Je rentre la quantité
4) Calcul du prix total HT
5) Choisis le taux de tva selon un select ( 5.5 ou 19.6)
6) Taux appliqué sur le prix total (4)
7) Prix total + TVA
Voila j'espère avoir été clair, on peut mieu se comprendre maintenant......;)
Ca ne fait rien........ lorsque j'enleve l'appel a form1
form1 ????
Tu mélanges pas 2 conversations là ?
Oups excuse moi
Ca me calcule mais je n'est pas la tva....:cry:
Donc ca me calcul lprix unitaire * quantité donc le prix total HT:mrgreen:
Tu parles bien de cette fonction
MerciCitation:
function calcul_form() {
// le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
with (document.forms.form1) {
p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
p2.value = parseInt(q2.value, 10)* parseFloat(pu2.value, 10) ;
p3.value = q3.value * pu3.value ;
total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
// Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
// et non pas une concaténation de chaînes de caractères
}
Non, puisque je t'ai demandé de virer l'appel, pour voir ...
Ca donne quoi, ça ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 function calcul(obj, objp1, objp2, objprix) { var pu = parseFloat(objp1.value); var qt = parseFloat(objp2.value); var tva = Math.round(pu * parseFloat(obj.value, 10) * 100) / 100; alert(tva); var ttc = pu + tva; objprix.value = ttc * qt ; }
Pour le total global, ça sera sûrementEDIT : mais pas sur le onload du <body> :nono:Code:
1
2
3
4
5 function calcul_form() { with (document.forms.form1) { total.value = p1.value *1 + p2.value *1 + p3.value *1 ; } }
A+
... et à demain, parce que là je vais pas tarder :mouarf:
Bonjour:
ME donne la TVA mais sur le prix unitaire hors moi je la veux sur le prix total HT.Citation:
function calcul(obj, objp1, objp2, objprix)
{
var pu = parseFloat(objp1.value);
var qt = parseFloat(objp2.value);
var tva = Math.round(pu * parseFloat(obj.value, 10) * 100) / 100;
alert(tva);
var ttc = pu + tva;
objprix.value = ttc * qt ;
}
Merci
Et concernant le calcul form() je le charge a quel moment.
Merci
C'est bon pour la TVA sur le prix total, j'ai rajouté qt
Et ca fonctionne ca me calcul ce qu'il faut. Comment faire pour que l'alerte s'affiche dans la case Taux appliqué.Citation:
var tva = Math.round(pu * qt * parseFloat(obj.value, 10) * 100) / 100;
Je pensais que cela suffisait.:roll:Citation:
<TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
Ah oui, y avait une boulette, là :aie:Tu peux l'ajouter au onchange des input (après calcul() ) ou en faire un bouton ...Code:
1
2
3
4
5
6
7
8
9
10
11 function calcul(obj, objp1, objp2, objprix) { var pu = parseFloat(objp1.value); var qt = parseFloat(objp2.value); var tva = Math.round((pu*qt) * parseFloat(obj.value, 10) * 100) / 100; alert(tva); var ttc = (pu*qt) + tva; objprix.value = ttc; }
A+
Alors petit recapepet:
Code JS :
Citation:
unction calcul(obj, objp1, objp2, objprix)
{
var pu = parseFloat(objp1.value);
var qt = parseFloat(objp2.value);
var tva = Math.round((pu*qt) * parseFloat(obj.value, 10) * 100) / 100;
alert(tva);
var ttc = (pu*qt) + tva;
objprix.value = ttc
}
function test_champ(champ) {
expr_reg = /^\d*$/ ;
// Ci-dessus : expression régulière qui match 0,1 ou plusieurs chiffres ;
// de cette façon on vérifie que l'utilisateur entre bien un nombre entier
if ( expr_reg.test(champ.value) ) {
// c'est bien un nombre entier
calcul_form() ;
} else {
// ce n'est pas un nombre entier
alert ("Ce n'est par un nombre entier !") ;
document.form1.elements[champ.name].value = "" ; // on efface la valeur entrée erronée
calcul_form() ;
}
}
function calcul_form() {
// le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
with (document.forms.form1) {
p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
p2.value = parseInt(q2.value, 10)* parseFloat(pu2.value, 10) ;
//p3.value = q3.value * pu3.value ;
total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
// Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
// et non pas une concaténation de chaînes de caractères
}
}
function champ_verrouille(champ,valeur) {
// Remarque : en HTML 4.0, il existe un attribut "read-only" pour la
// balise <INPUT TYPE=text> qui interdira de modifier un champ
// mais ce que je fais ci-dessous est beaucoup plus sûr !!!
// alert ("Ce champ de peut pas être modifié !") ;
document.form1.elements[champ.name].value = valeur ; // on remet "valeur" initiale dans champ
}
function soumettre_form() {
if ( document.forms.form1.total.value == 0 ) {
alert ("Vous n'avez rien commandé !\n => commande non soumise") ;
return false ;
} else {
// Les 2 lignes ci-dessous devraient être activées pour réellement passer le form. à script CGI
// document.form1.method = "POST" ;
// document.form1.action = "http://dgrwww.epfl.ch/cgi-bin/uncgi/mail_form.sh?mailto=Jean-Daniel.Bonjour@epfl.ch" ;
document.write ("<H3 ALIGN=center>Commande passée\n pour un montant de " +
document.forms.form1.total.value + " Frs</H3>") ;
document.close () ;
return true ;
}
}
// -->
</SCRIPT>
Code HTML
Citation:
</HEAD>
<BODY BGCOLOR="white" >
<table width="100%">
<!--utilisation d'un tableau qui occupera toute la page-->
<tr>
<td>
<table width="100%" align="center" border=1>
<tr>
<td align="center">
VILLE DE DIVION<BR>
1, rue Pasteur<BR>
BP9<BR>
Tel : 0321645570<BR>
Fax : 0321645583<BR>
Mel : contact@ville-divion.fr<BR>
Mel : achatpublic@ville-divion.fr<BR>
</td>
<td align="center">
<FORM NAME="form1">
Nom du fournisseur :
<INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGth="20">
<BR>
Adresse du fournisseur :
<INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
<BR>
Ville :
<INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
<BR>
FAX :
<INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
<BR>
LIEU DE LIVRAISON
<SELECT NAME="LIEU"
<OPTION VALUE="st">Service technique
<OPTION SELECTED VALUE="m">Mairie
<OPTION VALUE="elc">Education Loisirs et Citoyenneté
</SELECT>
</td>
<td align="center">
<?php
echo "Date du jour : ".date("d-m-Y")."<br>";
//affiche la date du jour d'utilisation du serveur par le client
?>
<BR>Action</BR>
<INPUT TYPE="checkbox" NAME="Livraison"> Livraison
<INPUT TYPE="checkbox" NAME="Retrait"> Retrait
<INPUT TYPE="checkbox" NAME="Autre"> Autre
<INPUT TYPE="checkbox" NAME="Transmission" CHECKED> Transmettre au fournisseur
</td>
<tr>
<td colspan=4 align="center">
Ne seront reconnus par le Ville de Divion que les services faits en exécution d’un bon de commande régulier dûment numéroté, visé et signé par le responsable achat
</td>
</tr>
<TABLE width="100%" BORDER="1" CELLSPACING="0" BGCOLOR="#FFFFAA" >
<TR BGCOLOR="#CCCCCC">
<TH WIDTH=70%><B>Réference fournisseur et désignation</B>
<TH >Prix unitaire HT
<TH>Quantité
<TH>Prix total HT
<TH>TVA
<TH>Taux appliqué
<TH>Prix Total TTC
</TR>
<TH><INPUT TYPE="text" size="75">
<TH><INPUT TYPE="text" id="pu1" NAME="pu1" SIZE="3" MAXLENGTH="4" >
<TH><INPUT TYPE="text" id="q1" NAME="q1" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
<TH><INPUT TYPE="text" id="p1" NAME="p1" SIZE="8" MAXLENGTH="4" >
<TH><select name="valeur" onchange="calcul(this, document.getElementById('pu1'), document.getElementById('q1'), document.getElementById('objp1') )">
<option value="#">TVA Appliquée</option>
<option value="0.196">TVA à 19.6 %</option>
<option value="0.055">TVA à 5.5 %</option>
<TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
<TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
<TR BGCOLOR="#CCCCCC">
<TH><INPUT TYPE="text" size="75">
<TH><INPUT TYPE="text" id="pu2" NAME="pu2" SIZE="3" MAXLENGTH="4" >
<TH><INPUT TYPE="text" id="q2" NAME="q2" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
<TH><INPUT TYPE="text" id="p2" NAME="p2" SIZE="8" MAXLENGTH="4" >
<TH><select name="valeur" onchange="calcul(this, document.getElementById('pu2'), document.getElementById('q2'), document.getElementById('objp2') )" onchange ="calcul_form()">
<option value="#">TVA Appliquée</option>
<option value="0.196">TVA à 19.6 %</option>
<option value="0.055">TVA à 5.5 %</option>
<TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
<TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
</BODY>
Ceci est la totalité du code pour l'instant:roll:
Avec ce code le calcul de tva ne s'inscrit pas dans mon formulaire mais l'alerte fonctionne.
Je vais essayer de voir pour que cela s'inscrive dans le champs "Taux appliqué"
MErci
L'id je le rajoute dans le INPUT ou dans la fonction, j'ai essayé ça mais ça ne fonctionnne pas :
avecCitation:
document.getElementById('tva') = Math.round((pu*qt) * parseFloat(obj.value, 10) * 100) / 100;
Je vais me pencher la dessus......Citation:
<TH><input id="tva" type="text" value="" maxlength="15" SIZE="5" />
j'ai bien fait car ca fonctionne mais j'ai une erreur de type:
Citation:
Élément référencé par son ID/NAME dans le contexte global. Utilisez la propriété standard du W3C « document.getElementById() » à la place.
Toute compte fait ca ne fonctionne pas lorsque je fais pour le deuxième l'id n'est pas unique........:cry:
Rends-le unique :roll:
Je ne peux pas vu que mon formulaire doit inscrire plusieurs fois la tva ( sur des article différents p1 p2 etc) pour chaque ligne de mon formulaire a moibs que je ne m'embrouille trop....:cry:
quel deuxième possibilité...
As tu essayé de le tester le formulaire en local ??? si ce n'est trop te demandé
Je ne vois pas du tout :cry: :aie: mais je m'accroche comme tu peux le voir:mrgreen:
Alors si je fait :
Avec cette fonction :Citation:
<TH><INPUT TYPE="text" size="75">
<TH><INPUT TYPE="text" id="pu1" NAME="pu1" SIZE="3" MAXLENGTH="4" >
<TH><INPUT TYPE="text" id="q1" NAME="q1" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
<TH><INPUT TYPE="text" id="p1" NAME="p1" SIZE="8" MAXLENGTH="4" >
<TH><select name="valeur" onchange="calcul(this, document.getElementById('pu1'), document.getElementById('q1'), document.getElementById('objp1') )" onchange ="calcul_form()">
<option value="#">TVA Appliquée</option>
<option value="0.196" >TVA à 19.6 %</option>
<option value="0.055">TVA à 5.5 %</option>
<TH><input name="tva"id="tva" type="text" value="" maxlength="15" SIZE="5" />
<TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
<TR BGCOLOR="#CCCCCC">
<TH><INPUT TYPE="text" size="75">
<TH><INPUT TYPE="text" id="pu2" NAME="pu2" SIZE="3" MAXLENGTH="4" >
<TH><INPUT TYPE="text" id="q2" NAME="q2" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
<TH><INPUT TYPE="text" id="p2" NAME="p2" SIZE="8" MAXLENGTH="4" >
<TH><select name="valeur" onchange="calcul(this, document.getElementById('pu2'), document.getElementById('q2'), document.getElementById('objp2') )" onchange ="calcul_form()">
<option value="#">TVA Appliquée</option>
<option value="0.196">TVA à 19.6 %</option>
<option value="0.055">TVA à 5.5 %</option>
<TH><input name="tva" id="tva1" type="text" value="" maxlength="15" SIZE="5" />
<TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
Citation:
function calcul(obj, objp1, objp2, objprix)
{
var pu = parseFloat(objp1.value);
var qt = parseFloat(objp2.value);
document.getElementById('tva').value = Math.round((pu*qt) * parseFloat(obj.value, 10) * 100) / 100;
document.getElementById('tva1').value = Math.round((pu*qt) * parseFloat(obj.value, 10) * 100) / 100;
document.getElementById('ttc').value = (pu*qt) + tva;
objprix.value = ttc
ca ne fonctionne pas la valeur se met toujours dans la meme colonne, j'y suis presque ?????
Et si je rajoute un id au ttc cela m'affiche le prix TOTAL HT dans la case TTC, je pense qu'il y encore un souci de ce coté la.
Bon toujour la meme erreur, le résultat s'inscrit dans les deux cases du formulaire et non sur la ligne en question????:roll: