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 éprouvé
    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 émérite
    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 émérite
    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 émérite
    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 éprouvé
    @ 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 éprouvé
    @ 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
    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 éprouvé
    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

###raw>template_hook.ano_emploi###