IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Calcul sans la Tva avec Format D6 et Win10


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut Calcul sans la Tva avec Format D6 et Win10
    Bonjour à toutes et à tous,

    En reprenant des anciennes applications faites avec D3 (cela remonte à loin !), en modifiant un peu le code, depuis un prix Tvac calculer le prix hors Tva.

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
    A: Real;
    B: Real;
    C: Real;
    begin
     
     A:= StrToFloat(edttc.text);  //Prix Tva comprise 57900
     B:= StrToFloat(edtaxe.text); //Tva 21%
     C:= StrToFloat(edtaxeBis.text); //Tva 6%
     
     Edresultat.Text:=Format('%m',[A *100 /(100 +B)]);  //Uniquement 2 décimales = 47.851,24 €
    end;
    J'ai voulus avec le nombre repris dans Edresultat et un 2ième champ pour la Tva faire l'inverse et j'obtiens une erreur "N'est pas une valeur en virgule flottante correcte"

    Est ce à cause du "." ou "," ou du sigle € ?

    Si quelqu'un à une idée.

    Merci d'avance,

    @+,

    cincap

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour Cincap,

    le code est correct. Pas de problème chez moi. Si je rentre : 57900 0,21 0,06 j'obtiens 57 778,66 €

    as tu bien la , en séparateur décimal ?

    Qu'appelles tu faire l'inverse ?

    A+
    Charly

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Ah oui, si tu reprend EdResultat.Text pour un autre calcul, il faut surement éliminer le € et les espaces avant de convertir en real.

    A+
    Charly

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Pour réutiliser EdResultat.txt, tu peux faire ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    procedure TF_Princ.Button3Click(Sender: TObject);
    Var
      R, R1       :  Real ;
      Chaine      : String ;
      n           : Integer ;
    begin
      Chaine := EdResultat.Text ;
      n :=  Pos('€', Chaine) ;
      If  n > 0 Then Delete(Chaine, n, 1) ;
      n := Pos(' ', Chaine) ;
      While n > 0 Do
        Begin
          Delete(Chaine, n, 1) ;
          n := Pos(' ', Chaine) ;
        End ;
      n := Pos(ThousandSeparator, Chaine) ;
      While n > 0 Do
        Begin
          Delete(Chaine, n, 1) ;
          n := Pos(ThousandSeparator, Chaine) ;
        End ;
      EdTtc.Text := Chaine ;
      R1 := StrToFloat(EdTtc.Text) ;
      R1 := 2 * R1 ;
      ShowMessage(FloatToStr(R1)) ;
    end;
    A+
    Charly

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Charly910, Comment va malgré ce confinement et merci de ta suggestion.

    Pour répondre a ta question :

    as tu bien la , en séparateur décimal ?
    Bien entendu à l'exécution de la fiche mais c'est mon format qui indique l'erreur.

    Je vais tester ton code et te dirai quoi.

    Voila, j'ai testé et je récupère bien le montant mais je ne sais pas lui appliquer les 6% car j'obtiens une erreur.

    En résumé je rentre le montant Tvac puis le taux et j'obtiens le résultat sans Tva, avec ce résultat je dois lui ajouter 6% pour obtenir le montant Tvac avec un autre taux.

    Donc un Tedit pour le montant Tvac, 1 Tedit pour le taux d'extraction et 1 Tedit pour le taux d'ajout, 1Tedit pour le résultat sans Tva et 1 Tedit pour le résultat avec la nouvelle Tva.

    @+,

    cincap

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Charly910, avec ta solution et la modification de mon calcul c'est ok.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Edresultat.Text:=Format('%m', [A *B /100]);
    Je vais essayer de faire tout en un.

    Encore merci,Bon Week-End,

    Je ferme ce topic.

    @+,

    cincap

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    voilà qui montre l'importance de ne pas mélanger l'interface utilisateur et les traitements

    tu devrais

    1) extraire les 3 valeur des TEdit

    2) faire une fonction de changement de TVA

    3) pousser les 2 résultats dans des TEdit

    l'avantage, c'est que tu peux vérifier chaque étape indépendamment des autres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function GetMontant(Edit: TEdit): Currency;
    function GetTVA(Edit: TEdit): Single;
    procedure ChangeTVA(var TTC: Currency; TVA1, TVA2: Single; out HT: Currency);
    procedure SetMontant(Edit: TEdit; Value: Currency);
    procedure SetTVA(Edit: TEdit; TVA: Single);
    utiliser des Edit au lieu de String ça permet éventuellement de donner le focus, mettre un Hint expliquant l'erreur ou ce genre de choses

    mais tu peux ajouter des fonctions intermédiaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function GetMontant(Edit: TEdit): Currency;
    begin
      if StrToMontant(Edit.Text, Result) = False then
      begin
        ShowMessage('Montant invalide');
        Edit.Focus();
        Abort; // fin de traitement
      end;
    end;
    et tu as alors une fonction StrToMontant facile à tester

    je fais souvent des choses comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    unit Unit1;
    ...
    {$IFDEF DEBUG}
    procedure test;
    begin
       Assert(StrToMontant('2.25') = 2.25);
       Assert(StrToMontant('2,25') = 2.25);
       Assert(StrToMontant('2.25€') = 2.25);
       Assert(StrToMontant('2.25 €') = 2.25);
       Assert(StrToMontant(',25 €') = 0.25);
    end;
     
    initialization
      test;
    {$ENDIF}
    end.
    et dès que tu as un cas d'erreur tu l'ajoutes dans la fonction test() et tu sais que ça ne se produira plus jamais...c'est du test unitaire façon simplifiée et automatique
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Paul TOTH, merci pour tes suggestions, j'en prend bonne note comme d'habitude.

    Je vais essayer de refaire cette application avec plusieurs solutions.

    Bonne fin de journée.

    Et bon Week-End à tous.

    @+,

    cincap

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul tva avec JavaScript
    Par chexna dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/01/2017, 21h25
  2. Réponses: 2
    Dernier message: 20/03/2014, 08h36
  3. [AC-2010] TVA avec champ calculé
    Par scoobydoos dans le forum Modélisation
    Réponses: 7
    Dernier message: 08/11/2010, 10h39
  4. Réponses: 6
    Dernier message: 04/07/2008, 13h59
  5. Export Excel avec format sans Excel
    Par Seb.26 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 07/02/2007, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo