|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
| Calcul prix TTC et gestion des remises |
| Iniciado por GB, 01,sep. 2020 09:25 - 3 respuestas |
| |
| | | |
|
| |
Miembro registrado 371 mensajes |
|
| Publicado el 01,septiembre 2020 - 09:25 |
Bonjour a tous
Pour un logiciel de chiffrage je souhaite mettre en place different calcul de remise :
- remise pour chaque ligne : fonctionnement ok
- remise globale ttc permettant d arrondir le global ttc et ventilé dans les lignes.
Pour cette dernière action je n arrive pas a tomber sur mon montant rond :
Exemple :
Ttc = 4728,30 Arrondi souhaité a 4700 ttc soit 28,30 ttc de remise. Lorsque je ventil la remise (transformée en %) je tombe sur le montant mais a 20 ou 30 centimes près...
Avez vous une idée ?
Il faut peut etre resté sur une soustraction de remise plutot que passe par la multiplication d un % de remise ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 42 mensajes |
|
| Publicado el 01,septiembre 2020 - 11:05 |
Bonjour, je calcule le ratio entre le montant initial et le montant à obtenir (Attention je déduis les montant d'éco-participation qui ne peuvent pas être modifié par une remise) une fois toutes les lignes recalculées, je vérifie s'il y a une différence entre le montant obtenu et celui à obtenir. S'il y a différence, je modifie le montant de la dernière ligne du document afin d'obtenir le résultat voulu.
rRatio est un réel=0 mMntDepart est un monétaire=0 mMntEco est un monétaire=0 SI INTER_TTC=0 ALORS mMntDepart=Arrondi(txt_Saisie6,cFormatNum.me_NbDecimal) SINON mMntDepart=Arrondi(txt_Saisie8,cFormatNum.me_NbDecimal) FIN eInd est un entier=0 eTot est un entier=TableOccurrence(tbl_Lig_Fac,toTotal) eLig est un entier=0 POUR eInd=1 À eTot SI tbl_Lig_Fac.COL_Est_Comm[eInd]="E" ALORS SI INTER_TTC ALORS mMntEco+=tbl_Lig_Fac.COL_Net_TTC[eInd] SINON mMntEco+=tbl_Lig_Fac.COL_Net_HT[eInd] FIN FIN FIN mMntDepart-=mMntEco SI txt_Mnt_A_Obtenir=0 ALORS Erreur("Vous n'avez pas indiqué le montant à obtenir!") RepriseSaisie(txt_Mnt_A_Obtenir) FIN SI txt_Mnt_A_Obtenir<0 ET mMntDepart>0 ALORS Erreur("Vous ne pouvez pas obtenir un montant négatif à partir d'un total positif!") txt_Mnt_A_Obtenir=0 RepriseSaisie(txt_Mnt_A_Obtenir) FIN SI txt_Mnt_A_Obtenir>0 ET mMntDepart<0 ALORS Erreur("Vous ne pouvez pas obtenir un montant positif à partir d'un total négatif!") txt_Mnt_A_Obtenir=0 RepriseSaisie(txt_Mnt_A_Obtenir) FIN SI mMntDepart=0 ALORS Erreur("Vous ne pouvez pas obtenir un montant car le total du document est à zéro!") RepriseSaisie(tbl_Lig_Fac) FIN rRatio=(txt_Mnt_A_Obtenir-mMntEco)/mMntDepart
POUR TOUTE LIGNE eInd de tbl_Lig_Fac SI (tbl_Lig_Fac.COL_Est_Comm[eInd]="A" ET tbl_Lig_Fac.COL_Num_SS_Tot[eInd]=0) OU tbl_Lig_Fac.COL_Est_Comm[eInd]="G" ALORS tbl_Lig_Fac.COL_Mnt[eInd]=Arrondi(tbl_Lig_Fac.COL_Mnt[eInd]*rRatio,cFormatNum.me_NbDecimal+2) CalCul_Ligne(eInd) eLig=eInd FIN SI Modulo(eInd,5)=0 ALORS Jauge(eInd,eTot,"Recalcul en cours.") FIN FIN Jauge() SI INTER_TTC ALORS mMntDepart=Arrondi(txt_Saisie8,cFormatNum.me_NbDecimal) SINON mMntDepart=Arrondi(txt_Saisie6,cFormatNum.me_NbDecimal) FIN SI txt_Mnt_A_Obtenir<>mMntDepart ALORS mMntEco=txt_Mnt_A_Obtenir-mMntDepart SI 0<eLig<tbl_Lig_Fac..Occurrence ALORS SI tbl_Lig_Fac.COL_Qu[eLig]<>0 ALORS mMntEco=mMntEco/tbl_Lig_Fac.COL_Qu[eLig] tbl_Lig_Fac.COL_Mnt[eLig]+=mMntEco CalCul_Ligne(eLig) FIN FIN FIN txt_Mnt_A_Obtenir=0 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 371 mensajes |
|
| Publicado el 01,septiembre 2020 - 13:26 |
Merci de ta réponse, mais j'ai oublié quelques précisions :
Les calcul sur chaque ligne sont les suivants :
mes calculs sont les suivants : Prix public x coeff_achat = Pachat Pachat x coeff_vente = Pvente nb_poseur x Heure_pose x Main_d'oeuvre_horaire = Montant MO
P vente + Montant MO = Montant_unitaire_HT P_vente_unitaire HT x quanté = Montant HT
La dessus je rajoute ma TVA, (je stock le montant unitaire de la TVA)
La remise est calculée sur le Montant_unitaire_HT pour donner le montant_unitaire_HT_remisé puis le montant_HT_remisé
Du coup je pense arrondir au supérieur a 2 décimales tous mes calculs (champs monétaires)
Le problème rencontré :
Je veux remiser mon devis a 2000 TTC au lieu de 2100. Il y a donc 100 euros de remise.
Je pensais imputer cette remise par quantité unitaire de produit, puis la repasser en HT, puis calculer le % de remise équivalent.
Sauf qu'avec ça je ne retrouve pas mes 2000 mais plutot 1999,80 ou 2000,30 TTC
Comment faire pour trouver ce montant et que les données soient cohérentes (je calcul des écarts ensuite lors de mes bilans) |
| |
| |
| | | |
|
| | |
| |
| Publicado el 01,septiembre 2020 - 15:53 |
Pour ce genre de cas la meilleure approche qu'on ait c'est de réaliser 2 fois le traitement à la suite, la 2eme boucle réduit souvent l'écart.
Et si écart il reste l'appliquer tel quel à la ligne qui a une quantité à 1 et qui a le plus grand montant (0.20 supprimé/ajouté sur un montant élevé ça passe mieux que sur un montant faible).
En général on est alors pas mal mais ce n'est pas du 100%
Pour les cas restant on ajoute une ligne "arrondi commercial" du montant en trop si l'utilisateur confirme cet ajout. Dans certains cas il n'y a pas de solution "mathématique" possible faut bien faire comme on peut ^^
eric l.
> Le 01/09/2020 à 11:26, GB a écrit :
Merci de ta réponse, mais j'ai oublié quelques précisions :
Les calcul sur chaque ligne sont les suivants :
mes calculs sont les suivants : Prix public x coeff_achat = Pachat Pachat x coeff_vente = Pvente nb_poseur x Heure_pose x Main_d'oeuvre_horaire = Montant MO
P vente + Montant MO = Montant_unitaire_HT P_vente_unitaire HT x quanté = Montant HT
La dessus je rajoute ma TVA, (je stock le montant unitaire de la TVA)
La remise est calculée sur le Montant_unitaire_HT pour donner le montant_unitaire_HT_remisé puis le montant_HT_remisé
Du coup je pense arrondir au supérieur a 2 décimales tous mes calculs (champs monétaires)
Le problème rencontré :
Je veux remiser mon devis a 2000 TTC au lieu de 2100. Il y a donc 100 euros de remise.
Je pensais imputer cette remise par quantité unitaire de produit, puis la repasser en HT, puis calculer le % de remise équivalent.
Sauf qu'avec ça je ne retrouve pas mes 2000 mais plutot 1999,80 ou 2000,30 TTC
Comment faire pour trouver ce montant et que les données soient cohérentes (je calcul des écarts ensuite lors de mes bilans) |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|