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

Bases de données Delphi Discussion :

Problème avec QRExpr.


Sujet :

Bases de données Delphi

  1. #1
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut Problème avec QRExpr.
    Bonjour à tous.

    Alors voila je ne suis pas trés à l'aise avec Delphi mais malheureusement j'ai une application existante à modifier, excusez-moi donc si mes termes ne sont pas justes car je débute ce langage depuis 3 jrs.

    Mon application à pour résultat l'impression, j'ai donc à ce que j'ai compris un quickreport qui s'appel etat.pas
    Dans cet apercu j'ai isolé les champs que je doit modifier et ce sont des QRExpr.
    Les expressions sont simple c'est SUM(etat_ligne.Prix) pour QRExpr1 et SUM(etat_ligne.MtComm) pour QRExpr2.

    Ce que je désire c'est que si QRExpr1 est inférieur à 20000, c'est que
    QRExpr2 recoie une reduction de 500.
    Je pense donc que je doit intervenir sur l'expression suivante :
    SUM(etat_ligne.MtComm) de QREXpr2, et dans ma tête ma syntaxe serai :

    if SUM(etat_ligne.Prix)< 20000
    alors le champ 2 vaut SUM(etat_ligne.MtComm)-500

    Seulement je trouve pas mon bonheur pour mettre un if dans une expression, quelqu'un aurait'il deja eu ce cas de figure et trouver une solution ( de façon simple car changer juste l'expression est simple le reste je suis perdu).

    Si par hazard il faut plus d'informations je tacherai d'être plus précis, mais malheureusement je ne connais pas Delphi et je n'est aucun cahier des charges ou notes sur le logiciel en question ( fait en 94 et bidoullier depuis par 4 personnes avant moi) donc soyez indulgent

    Merci
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    bonjour,

    C'est plus une question Quickreport que Delphi , donc voir (rechercher) aussi dans Ce Forum

    une piste non testée
    Code QrExpr2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(SUM(etat_ligne.Prix)< 20000,SUM(etat_ligne.MtComm),SUM(etat_ligne.MtComm)-500)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Tout d'abord merci pour cette réponse, et désolé de ne pas mettre mis sur la bonne section.
    Pour la recherche j'avais pris tout les forums ( 22 résultats ) et je n'avait pas trouver mon bonheur.

    Enfin votre intervention ma permis d'avancer à moitié sur le souci, l'expression proposé est bonne seulement un problème en découle :

    A la fin de mon apercu ( x pages ) je fait un total, seulement ce total reste le même avec ou sans la nouvelle expression, pourtant dans les lignes/bande la modification apparait trés bien.
    Ce coup-ci si mes recherches sont bonnes c'est un TQRLabel, j'ai donc suivi son nom un peu partout ( méthode pas trés pro mais utile :p )
    et je suis tombé sur ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imprime.tot_com.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_ComSomMontant.Value+Data.Etat_FraisSomCom.Value);
    A ce que j'en comprend dans mon main.pas, je crée mon objet etat.pas qui porte le nom Imprime, je vais sur le label tot.com.Caption, et je lui donne la valeur d'un truc que là j'explique pas trop.
    Est-ce qu'il serai possible de faire une sorte d'addition des mes sous-totaux ( ceux de chaque bande ) ou enfin une expression qui fait ca tout seul.

    Je verrai bien faire une boucle qui additionne pour chaque ligne mais j'ai du mal à trouver ou la placé vu qua la base c'est deja un SUM() de quelquechose.

    Des idées ?
    Cordialement.

    HS : je n'est pas trouvé comment déplacer mon sujet de section.
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    l'expression proposé est bonne
    j'en suis ravi

    A la fin de mon apercu ( x pages ) je fait un total, seulement ce total reste le même avec ou sans la nouvelle expression, pourtant dans les lignes/bande la modification apparait trés bien.
    Ce coup-ci si mes recherches sont bonnes c'est un TQRLabel, j'ai donc suivi son nom un peu partout ( méthode pas trés pro mais utile et je suis tombé sur ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imprime.tot_com.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_ComSomMontant.Value+Data.Etat_FraisSomCom.Value);
    pas étonnant , ça vient d' autres tables ou Querys
    Data.Etat_Total_Suppl_ComSomMontant.Value<>Sum(Data.Etatetat_ligne.MtComm)

    une sorte d'addition des mes sous-totaux , enfin une expression qui fait ca tout seul.
    la même à peu de chose pres. je dirais :
    Code QRExprTotal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM(etat_ligne.Prix)+IF(SUM(etat_ligne.Prix)< 20000,SUM(etat_ligne.MtComm),SUM(etat_ligne.MtComm)-500)
    Mais rassure-moi l'expression est bien remise à zéro après edition pour les lignes détails ?

    cependant difficile de répondre car il faudrait savoir à quoi correspond ce calcul ?
    Etat_Total_Suppl_ComSomMontant.Value+Etat_FraisSomCom.Value
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Alors justement je suis entrain de perdre pied dans l'application et j'ai du mal à voir le déroulement des choses.
    Je vais donc citer plus de code.

    J'ai donc dans mon main ceci :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    procedure TAccueil.BitBtn3Click(Sender: TObject);
     
    Var types : string;
        valeur, Montant : real;
        Sort : Boolean;
    begin
      Application.CreateForm(Timprime, imprime); //Evite Problème si aucune imprimante est déclarée
    Data.Sel_param.Params[0].Value := 'dat_deb';//Recherche de la date de début dans paramètres
    Data.Sel_param.Open;
    Imprime.MINI.Caption:=Data.Sel_Paramvaleur.Value;
    Data.Sel_Param.Close;
    Data.Sel_param.Params[0].Value := 'dat_fin';//Recherche de la date de fin dans paramètres
    Data.Sel_param.Open;//ouverture de la requete etat_ligne
    Imprime.MAXI.Caption:=Data.Sel_Paramvaleur.Value;
    Data.Sel_Param.Close;
     
     
    Data.representant.Close;//fermeture de la table representant
    Data.Representant.Open;//ouverture de la table representant
    While not Data.Representant.Eof do//tant que l'on est pas en fin de table
    Begin
    Data.etat_ligne.Close;//fermeture de la requete etat_ligne
    Data.Etat_Frais.Close;//fermeture de la requete etat_frais
    Data.Etat_Total_Suppl_Frais.Close;//fermeture de la requete etat_total_suppl_frais
    Data.Etat_Total_Suppl_Com.Close;//fermeture de la requete etat_total_suppl_com
    Data.Tab_Reduc_Frais.Close;//fermeture de la table Tab_Reduc_Frais
    Data.Etat_Cumul.Close;//fermeture de la requete etat_cumul
     
    Data.etat_ligne.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete etat_ligne prend la valeur du numéro de représentant de la table representant
    Data.etat_ligne.Open;//ouverture de la requete etat_ligne
    //Form1.Showmodal;
     
    Data.etat_Frais.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete etat_frais prend la valeur du numéro de représentant de la table representant
    Data.Etat_Frais.Open;//Ouverture de la requete etat_Frais
     
    Data.Etat_Total_Suppl_Com.Params[0].Value := Data.representantrepr_num.Value;//le parametre 0 de la requete Etat_Total_Suppl_Com prend la valeur du numéro de représentant de la table representant
    Data.Etat_Total_Suppl_Com.Open;//ouverture de la requete etat_total_suppl_com
     
    Data.Etat_Total_Suppl_Frais.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete etat_total_suppl_frais prend la valeur du numéro de représentant de la table representant
    Data.Etat_Total_Suppl_Frais.Open;//ouverture de la requete etat_total_suppl_frais
     
    Data.Tab_Produit.Close;
    Data.Tab_Produit.Open;
    Data.Etat_Cumul.Params[0].Value := Data.Tab_ProduitComm.Value;
    Data.Tab_Produit.Close;
    Data.Etat_Cumul.Params[1].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete Etat_Cumul prend la valeur du numéro de représentant de la table representant
    Data.Etat_Cumul.Open;//fermeture de la requete etat_cumul
     
    Data.Tab_Reduc_Frais.Open;//ouverture de la table Tab_Reduc_Frais
     
    Supplement(Data.representantRepr_num.Value);//appel de la fonction supplement avec en parametre un numero de representant
              //Calcul des Frais et Totaux
              valeur := Data.Tab_Reduc_FraisValeur.Value;
              types := Data.Tab_Reduc_FraisType.Value;
              sort := False;
              While sort=False do
              Begin
                   Valeur := Data.Tab_Reduc_FraisValeur.Value;
                   Types := Data.Tab_Reduc_FraisType.Value;
                   Montant := Data.Tab_Reduc_FraisFrais.Value;
                   if Data.Tab_Reduc_FraisFrais.Value > Data.Etat_FraisSomPrix.Value then sort := true
                   else if Data.Tab_Reduc_Frais.Eof then sort := true
                        else Data.Tab_Reduc_Frais.Next;
              End;
              If (Data.Tab_Reduc_FraisFrais.Value<Data.Etat_FraisSomPrix.Value)and(Data.Tab_Reduc_Frais.Eof) then
              Begin
                   Imprime.Band_Frais.Enabled := False;
                   Imprime.Frais.Caption := '';
              End
              Else Begin
                   Imprime.Band_Frais.Enabled := True; 
                   Imprime.Band_Frais.Enabled := False;
                   If Data.Tab_Reduc_FraisType.Value='Valeur'then Imprime.Frais.Caption := Data.Tab_Reduc_FraisValeur.AsString
                   else Imprime.Frais.Caption := FormatFloat('0.00',Data.Etat_FraisSomFrais.Value*(1-Data.Tab_Reduc_FraisValeur.Value/100));
              End;
     
              If Imprime.Frais.Caption<>''then
                   Imprime.tot_frais.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_FraisSomMontant.Value+StrToFloat(Imprime.Frais.Caption))
              else Imprime.tot_frais.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_FraisSomMontant.Value+Data.Etat_FraisSomFrais.Value);
              Imprime.tot_com.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_ComSomMontant.Value+Data.Etat_FraisSomCom.Value);
     
             // Imprime.Cumul.Caption := FormatFloat('0.00',Data.RepresentantRepr_Cumul.Value);
    if not (Data.Etat_Ligne.Eof) then imprime.QuickRep1.Preview;//si la table Etat_Ligne n'est pas vide on fait un preview du quickreport
     
    Data.etat_ligne.Close;//fermeture des requetes
    Data.Etat_Frais.Close;
    Data.Etat_Total_Suppl_Com.Close;
    Data.Etat_Total_Suppl_Frais.Close;
    Data.Tab_Reduc_Frais.Close;
    Data.etat_Supplement.Close;
    Data.Etat_Cumul.Close;
     
    Data.Representant.Next;//on passe à l'enregistrement suivant(representant suivant)
    End;//Fin while not representant.eof
    Data.Representant.Close;//fermeture de la table representant
    end;
    A ce que j'en ai compris on fait une boucle pour chaque représentant, cette boucle appel un TQuery, qui se nomme etat_ligne, donc là si je suit correctement pour chaque représentant j'ai une table ( on vas dire ) etat_ligne.
    Déja à ce niveau je coince car dans mon impression, pour chaque représentant j'ai x pages, mais c'est page sont organisé je dirai par vente, mon souci c'est que pour moi une table ne marche que par ligne, et vu qu'il me là remplie avec 1 représentant, comment il découpe par vente pour ce représentant .

    Je mets aussi une image du resultat c'est la premiere page et la dernière ,ce que je comprend pas c'est comment marche les données dans ses tables, et je ne voie pas de second paramètres pour trier par vente mes lignes de état_ligne.

    Merci
    Cordialement

    PS : je rajoute le code des TQuery en question
    etat_ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Vente.Mt_Comm, Vente.Ref, Vente.Ref_Com, Vente.Design, Vente.DateVente, Vente.Qte, Vente.Remise, Vente.Comm, Vente.Frais, Vente.Piece, Vente.Client, Vente.Representant, Vente.Prix, Client.Cli_nom, Representant.Repr_nom
    FROM "vente.DB" Vente
       INNER JOIN "client.db" Client
       ON  (Vente.Client = Client.Cli_num)  
       INNER JOIN "representant.db" Representant
       ON  (Representant.Repr_num = Vente.Representant)  
    Where Representant= :Repr
    and bou="false"
    ORDER BY Vente.Piece
    Etat_Total_Suppl_Frais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select SUM(frais) SomMontant
    From Supplement
    Where Num_Repr= :Repr
    Etat_Total_Suppl_Comm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select SUM(commission) SomMontant
    From Supplement
    Where Num_Repr= :Repr
    Images attachées Images attachées   
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select SUM(commission) SomMontant
    From Supplement
    Where Num_Repr= :Repr
    c'est quoi cette table supplement (une vue ?) , une table crée spécialement ? peut-être quelquechose dans la fonction Supplement(Data.representantRepr_num.Value)

    en tout cas il est certain que si la commission est stockée dans une table
    Code Expression : Sélectionner tout - Visualiser dans une fenêtre à part
    IF(SUM(etat_ligne.Prix)< 20000,SUM(etat_ligne.MtComm),SUM(etat_ligne.MtComm)-500)
    l'expression elle ne modifie pas ce 'stockage', juste la valeur imprimée

    un autre endroit où regarder la form Imprime qui contient le QReport peut être une evenement AfterPrint de la bande détail

    Bref il faut trouver comment est 'alimentée' cette table supplément et si possible modifier la valeur de la commission en fonction
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Alors Supplement est une table dans un fichier datamod, il y en as beaucoup même.
    De tête elles sont alimentées par une bdd SAGE, en faite lorsque que l'on utilise le logiciel on a un bouton récupération qui permet de copier les données en local, on ma dit que vu qu'il etait pas judicieux de travailler directement sur SAGE cette solution fut prise.
    Bon j'ai essayé de faire une récupération mais ca na pas marché, j'ai donc pris les données locale du client pour pouvoir au moins voir comment marché ce logiciel.

    Dans etat.pas qui représentent mon document imprimer je n'ai que ca en procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure Timprime.QRExpr9Print(sender: TObject; var Value: String);
    begin
      tmp_frais:=Value;
    end;
     
    procedure Timprime.tot_fraisPrint(sender: TObject; var Value: String);
    begin
      Value:=FormatFloat('0.00',Accueil.complement+strToFloat(tmp_frais));
    end;
    Ensuite oui j'ai vaguement pensé à intervenir directement sur la base pour calculé les commissions, mais pour moi à ce niveau 2 problèmes ce pose.
    Le premier est comment modifier le bon truc, car comme le montre les images, je doit enlever 500 que sur les sous-totaux, je fut surpris en voyant cette histoire de multiligne, je ne voie deja pas comment un SUM(etat_ligne) peut marcher, enfin comment il marche avec 3 lignes puis 2 suivi de 4.
    moi je voyais ca de façon
    1:client,date,prix,comm
    2:client,date,prix,comm
    3:client,date,prix,comm
    4:client,date,prix,comm
    Et là je voie dans le logiciel que ligne 1 et 2 sont ensemble mais à part de 3 et 4.
    Le second est plus au niveau logique, c'est que si je déclenche la procédure qu ivas calculer les réductions, mais qu'une erreur de saisie est faite ( on peut modifier des choses par cette applications mais lesquels ), à ce moment là le risque est de réduire 2 fois la commition, au plaisir du patron mais pas du commercial.

    En tout cas merci de votre aide, car je me doute bien qu'il n'ai pas aisé de me répondre vu que de base je ne maitrise ni Delphi, ni même le fonctionnement du logiciel.
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  8. #8
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Je reviens à la charge Supplement semble bien être une fonction et non une table, j'ai des références à supplement.db mais ca me semble pas venir de ca.

    Je vous donne donc le code de cette procédure
    j'ai retirer du code normalement il y'as 50 mtc, mais je dépassé la limite de caractère ^^"
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    Procedure Supplement(repr:integer);
    Begin
    Data.etat_Supplement.Close;//fermeture de la requete eta_supplement
     
    Data.etat_Supplement.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete prend la valeur les numéros de representant dans la table representant
    Data.etat_Supplement.Open;//ouverture de la requete etat_supplément
    Accueil.complement:=0;
    if Data.etat_Supplement.Eof then Imprime.Supplement.Enabled := False //on test si la table supplement est vide et si oui on cache la bande supplement dans le quickreport
    else Begin
         Imprime.Sup1.Caption := Data.Etat_SupplementLibelle.AsString;//Sup prend le libelle dans la table supplement
     
         if data.etat_supplementcommission.value=0 then
         Imprime.Mtc1.Caption := ''
         else
         Imprime.Mtc1.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
     
         if data.etat_supplementfrais.value=0 then
         Imprime.Mt1.Caption := ''
         else
         Imprime.Mt1.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);
         if(Imprime.Mt1.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt1.Caption);
     
         Imprime.Supplement.Height := 23;//on modifie la hauteur de la ligne
         Imprime.Supplement.Enabled := True;//on active la ligne supplément
         Data.Etat_Supplement.Next;//on passe à l'enregistrement suivant
     
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup2.Caption := Data.Etat_SupplementLibelle.AsString;//idem au-dessus
     
              if data.etat_supplementcommission.value=0 then
              Imprime.Mtc2.Caption :=''
              else
              Imprime.Mtc2.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
     
              if data.etat_supplementfrais.value=0 then
              Imprime.Mt2.Caption :=''
              else
              Imprime.Mt2.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt2.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt2.Caption);
     
              Imprime.sup2.Enabled := True;
              Imprime.Mtc2.Enabled := True;
              Imprime.Mt2.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup2.Enabled := False;
              Imprime.Mtc2.Enabled := False;
              Imprime.Mt2.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup3.Caption := Data.Etat_SupplementLibelle.AsString;
     
              if data.etat_supplementcommission.value=0 then
              Imprime.Mtc3.Caption :=''
              else
              Imprime.Mtc3.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
     
              if data.etat_supplementfrais.value=0 then
              Imprime.Mt3.Caption :=''
              else
              Imprime.Mt3.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);  
         if(Imprime.Mt3.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt3.Caption);
     
              Imprime.sup3.Enabled := True;
              Imprime.Mtc3.Enabled := True;
              Imprime.Mt3.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup3.Enabled := False;
              Imprime.Mtc3.Enabled := False;
              Imprime.Mt3.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup4.Caption := Data.Etat_SupplementLibelle.AsString;
     
              if data.etat_supplementcommission.value=0 then
              Imprime.Mtc4.Caption :=''
              else
              Imprime.Mtc4.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
     
              if data.etat_supplementfrais.value=0 then
              Imprime.Mt4.Caption :=''
              else
              Imprime.Mt4.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt4.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt4.Caption);
     
              Imprime.sup4.Enabled := True;
              Imprime.Mtc4.Enabled := True;
              Imprime.Mt4.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup4.Enabled := False;
              Imprime.Mtc4.Enabled := False;
              Imprime.Mt4.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup5.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc5.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt5.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt5.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt5.Caption);
     
              Imprime.sup5.Enabled := True;
              Imprime.Mtc5.Enabled := True;
              Imprime.Mt5.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup5.Enabled := False;
              Imprime.Mtc5.Enabled := False;
              Imprime.Mt5.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup6.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc6.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt6.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt6.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt6.Caption);
     
              Imprime.sup6.Enabled := True;
              Imprime.Mtc6.Enabled := True;
              Imprime.Mt6.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup6.Enabled := False;
              Imprime.Mtc6.Enabled := False;
              Imprime.Mt6.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup7.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc7.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt7.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);  
         if(Imprime.Mt7.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt7.Caption);
     
              Imprime.sup7.Enabled := True;
              Imprime.Mtc7.Enabled := True;
              Imprime.Mt7.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup7.Enabled := False;
              Imprime.Mtc7.Enabled := False;
              Imprime.Mt7.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup8.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc8.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt8.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt8.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt8.Caption);
     
              Imprime.sup8.Enabled := True;
              Imprime.Mtc8.Enabled := True;
              Imprime.Mt8.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup8.Enabled := False;
              Imprime.Mtc8.Enabled := False;
              Imprime.Mt8.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup9.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc9.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt9.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt9.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt9.Caption);
     
              Imprime.sup9.Enabled := True;
              Imprime.Mtc9.Enabled := True;
              Imprime.Mt9.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup9.Enabled := False;
              Imprime.Mtc9.Enabled := False;
              Imprime.Mt9.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup10.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc10.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt10.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt10.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt10.Caption);
     
              Imprime.sup10.Enabled := True;
              Imprime.Mtc10.Enabled := True;
              Imprime.Mt10.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup10.Enabled := False;
              Imprime.Mtc10.Enabled := False;
              Imprime.Mt10.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup11.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc11.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt11.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);  
         if(Imprime.Mt11.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt11.Caption);
     
              Imprime.sup11.Enabled := True;
              Imprime.Mtc11.Enabled := True;
              Imprime.Mt11.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup11.Enabled := False;
              Imprime.Mtc11.Enabled := False;
              Imprime.Mt11.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup12.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc12.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt12.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);   
         if(Imprime.Mt12.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt12.Caption);
     
              Imprime.sup12.Enabled := True;
              Imprime.Mtc12.Enabled := True;
              Imprime.Mt12.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup12.Enabled := False;
              Imprime.Mtc12.Enabled := False;
              Imprime.Mt12.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup13.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc13.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt13.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);  
         if(Imprime.Mt13.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt13.Caption);
     
              Imprime.sup13.Enabled := True;
              Imprime.Mtc13.Enabled := True;
              Imprime.Mt13.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup13.Enabled := False;
              Imprime.Mtc13.Enabled := False;
              Imprime.Mt13.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup14.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc14.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt14.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt14.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt14.Caption);
     
              Imprime.sup14.Enabled := True;
              Imprime.Mtc14.Enabled := True;
              Imprime.Mt14.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup14.Enabled := False;
              Imprime.Mtc14.Enabled := False;
              Imprime.Mt14.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup15.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc15.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt15.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt15.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt15.Caption);
     
              Imprime.sup15.Enabled := True;
              Imprime.Mtc15.Enabled := True;
              Imprime.Mt15.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup15.Enabled := False;
              Imprime.Mtc15.Enabled := False;
              Imprime.Mt15.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup16.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc16.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt16.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt16.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt16.Caption);
     
              Imprime.sup16.Enabled := True;
              Imprime.Mtc16.Enabled := True;
              Imprime.Mt16.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup16.Enabled := False;
              Imprime.Mtc16.Enabled := False;
              Imprime.Mt16.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup17.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc17.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt17.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt17.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt17.Caption);
     
              Imprime.sup17.Enabled := True;
              Imprime.Mtc17.Enabled := True;
              Imprime.Mt17.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup17.Enabled := False;
              Imprime.Mtc17.Enabled := False;
              Imprime.Mt17.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup18.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc18.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt18.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt18.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt18.Caption);
     
              Imprime.sup18.Enabled := True;
              Imprime.Mtc18.Enabled := True;
              Imprime.Mt18.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup18.Enabled := False;
              Imprime.Mtc18.Enabled := False;
              Imprime.Mt18.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup19.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc19.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt19.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value); 
         if(Imprime.Mt19.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt19.Caption);
     
              Imprime.sup19.Enabled := True;
              Imprime.Mtc19.Enabled := True;
              Imprime.Mt19.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup19.Enabled := False;
              Imprime.Mtc19.Enabled := False;
              Imprime.Mt19.Enabled := False;
         end;
         if not Data.Etat_Supplement.Eof then
         Begin
              Imprime.Sup20.Caption := Data.Etat_SupplementLibelle.AsString;
              Imprime.Mtc20.Caption := FormatFloat('0.00',Data.Etat_Supplementcommission.Value);//Mt1 prend le montant correspondant au supplément
              Imprime.Mt20.Caption := FormatFloat('0.00',Data.Etat_Supplementfrais.Value);      
         if(Imprime.Mt20.Caption<>'')
           then Accueil.complement := Accueil.complement+strtofloat(Imprime.Mt20.Caption);
     
              Imprime.sup20.Enabled := True;
              Imprime.Mtc20.Enabled := True;
              Imprime.Mt20.Enabled := True;
              Imprime.Supplement.Height := Imprime.Supplement.Height+23;
              Data.Etat_Supplement.Next;
         End
         Else Begin
              Imprime.sup20.Enabled := False;
              Imprime.Mtc20.Enabled := False;
              Imprime.Mt20.Enabled := False;
         end;
    End;
    End;
    Parcontre j'insiste un peu mais pourquoi, au du moins comment le logiciel coupe mes ventes.
    Je viens encore de regarder la requete etat_ligne et je ne comprend pas comment ca marche.
    Dans mon apercu ca donne
    Ligne 1 : Pièce|Client|Cli_Nom|Ref_Com
    Ligne 2 : DateVente|Ref|Design|Prix/Qte|Qte|Prix|Remise|Comm|Mt_Comm|Frais|Prix*(Frais/100)
    Ligne 3 : pareil que deux.
    Ligne 4 : pareil que deux. ( et cela X fois et c'est le X fois mon souci )
    Ligne 5 |Sum(Prix)|Sum(Mt_Comm)|Sum(Frais/100).

    Par quel diable entre les lignes 1 et 5 ce fait ce découpage, car pour moi Sum(Mt_Comm) voudrai dire tu fait la somme de tout les Mt_Comm du représentant hors là ca fait la somme d'une seule vente.
    Delphi à l'air particulier à ce niveau.
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    non c'est pas Delphi , c'est le "Prime Programmeur"
    je ne lui jetterai pas la première pierre , des fois je suis tordu moi aussi

    pffft ce code de quoi devenir

    enfin à première vue je dirais que la fonction supplement n'a rien à voir avec le calcul de la commission . J'ai dans l'idée que le "Prime Programmeur" à créé 50 bandes ~= 50 lignes enfants et qu'il gére cet affichage à la mano par l'intermédiaire de la fonction supplément , ceci expliquant
    Par quel diable
    cela

    cela va demander des heures pour comprendre . Je te suggère une vieille methode : analyser la Sortie demandée (etat) , le découper (virtuellement ) pour ne faire apparaitre que les lignes où la Commission mtcom (modifiée ou non)
    apparait , ainsi que les différents cumuls
    en fait cela devrai revenir a oter tout le traitement fait par supplement

    car pour moi Sum(Mt_Comm) voudrait dire tu fais la somme de tout les Mt_Comm
    non pour moi cela veut dire la somme des mtComm de la ligne détail (ou enregistrement) de QR , pas des lignes supplémentaires (lignes enfants)

    nb : j'ai cru remarqué que en fin d'état il y avait des moyennes , j'ai bien l'impression que y'a un
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    J'ai eu une idée mais je ne sais pas comment la mettre en place.
    Est-ce qu'on peut pas faire en sorte d'alimenter un compteur à chaque impression des sous-totaux.
    Ce que je veux faire c'est que à chaque fois que j'ecrit mon sous-total SUM(etat_ligne.Mt_Comm) j'appel un procédure qui vas recalculer mon expression et que si on réduit, elle s'incrémente de 1.
    Comme cela ensuite lors du calcul des totaux finaux, je recupère la valeur qui calculé, et je réduit x fois 500, x étant le nombre d'incrément de ma procédure.

    Pour moi ca simplifierai le tout je ne touche pas l'existant je décale juste les calculs, seulement je ne voie pas trop la démarche au niveau de Delphi.
    Imaginons je stock ma procédure sur le fichier etat.pas, ma variable doit être dans le main.pas, et je doit la remettre à 0 à chaque changement de représentant.
    Enfin le plus tendu est de trouver l'évenement si il existe de l'écriture du sous-total genre un espèce de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    OnImprime.QRExprX{
    if SUM(etat_ligne.Prix) < 20000 then
    if SUM(etat_ligne.Prix) > 0 then
     mavariable dans main := mavariable+1;
    end
    end
    Des idées?
    Pour les moyennes oui à la fin il y'as des AVERAGE sur etat-ligne.X , ce qui justement vas me gener avec ma solution.
    Il faudrai travailler sur la table mais je ne voie pas ou trouver le sous-totaux et ou l'appliquer dans ma "table" etat_ligne.
    Car oui à l'affichage il y'as des Mt_Comm pour chaque ligne, mais comment je trouver si une ligne apparatient à tel ou tel vente.


    je commence à me prendre un sérieux mal de tête sur ce programme.
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    l'évenement existe bien sur , c'est au niveau de QRExpr2 donc dans l'unité contenant le Qreport , evenement : AfterPrint
    ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(etat_ligne.Prix)+IF(SUM(etat_ligne.Prix)< 20000,SUM(etat_ligne.MtComm),SUM(etat_ligne.MtComm)-500)
    ne marche pas ?
    bien sur dans le quickreport ,il faut remplacer (rajouter pour les tests),
    Imprime.tot_com qui doit etre un QrLabel par un QrExpr mais ça c'est simple
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Je viens d'ajouter un QRExpr de plus, mais il ne s'affiche pas à la fin.
    voici sont code j'ai merdé ou ? les autres sont stocké dans des QRshape je doit en faire aussi ?
    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
    27
    28
    29
          object QRExpr12: TQRExpr
            Left = 912
            Top = 8
            Width = 50
            Height = 17
            Frame.Color = clBlack
            Frame.DrawTop = False
            Frame.DrawBottom = False
            Frame.DrawLeft = False
            Frame.DrawRight = False
            Size.Values = (
              44.9791666666667
              2413
              21.1666666666667
              132.291666666667)
            Alignment = taLeftJustify
            AlignToBand = False
            AutoSize = False
            AutoStretch = False
            Color = clWhite
            ResetAfterPrint = False
            Transparent = False
            WordWrap = True
            Expression =
              'SUM(etat_ligne.Prix)+IF(SUM(etat_ligne.Prix)< 20000,SUM(etat_lig' +
              'ne.MtComm),SUM(etat_ligne.MtComm)-500)'
            Mask = '0.00'
            FontSize = 10
          end
    Je vais passer le WE sous Delphi et sans cheveux lol, en + mon idée de compteur semble compromise au vu des calculs de moyennes. a moins qu'au lieu de stocker l'indice d'incrément je stock en faite le total des sous_totaux au quel cas je fait l'average sur ma variable, et je colle tout en QRlabel.

    J'ai tenté votre Expression sur un champ ca n'affiche plus rien du coup.
    (oui j'ai sous-totaux, puis Totaux/Moyennes, et Totaux global les deux derniers sont les mêmes, sauf si il y as des supplément)
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par SirDarken Voir le message
    Je viens d'ajouter un QRExpr de plus, mais il ne s'affiche pas à la fin.
    voici son code j'ai merdé ou ? les autres sont stocké dans des QRshape je doit en faire aussi ?

    Je vais passer le WE sous Delphi et sans cheveux lol, en + mon idée de compteur semble compromise au vu des calculs de moyennes. a moins qu'au lieu de stocker l'indice d'incrément je stock en faite le total des sous_totaux au quel cas je fait l'average sur ma variable, et je colle tout en QRlabel.

    J'ai tenté votre Expression sur un champ ca n'affiche plus rien du coup.
    (oui j'ai sous-totaux, puis Totaux/Moyennes, et Totaux global les deux derniers sont les mêmes, sauf si il y as des supplément
    )
    moi aussi j'ai merdé
    l'expression serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF(SUM(etat_ligne.Prix)< 20000,SUM(etat_ligne.MtComm+etat_ligne.Prix),SUM(etat_ligne.MtComm+Etat_Ligne.Prix)-500)
    cependant quid ? quand MtComm<0

    pour les QRShape oublies pour l'instant , l'important c'est le résultat pas la présentation

    j'avais pas aimé l'idée d'un indice d'incrément , mieux vaut stocker les différentes valeur

    Je vais passer le WE sous Delphi et sans cheveux
    Chauve qui peut

    Mais je compatis , je viens de comprendre qu'en plus le QR était totalement généré par langage et pas 'dessiner sur une form'
    le PRIME est vraiment diabolique Bon WE
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Bon je vais reprendre le truc d'une autre manière.

    Je vais ajouter une table au Datamod ( déja ca marche pas il me dit que le fichier .db existe pas et pourtant il l'est ...)
    De la à chaque impression du sous-total je calcul, et si ca fait moins de 20000 je rajoute 500 au champs de ma nouvelle table.

    A la fin il me restera car modifié les expressions par exemple :
    AVERAGE(etat-ligne.MtComm-ma_table.montant).

    Pense-tu que ca pourrai fonctionner ? et surtout comment ajouter une table ? lol
    Ca m'evitera en plus de toucher au QR ce qui est pas plus mal au vu de ce que tu me dit, et puis il faudrai que je trouve une solution dite rapide.

    Edit :
    Dans mon main.pas j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      private
        { Déclarations privées }
      public      
        complement : extended;
        { Déclarations publiques }
      end;
     
    var
      Accueil: TAccueil;
      ReducMontant: integer;
     
    implementation
    Dans la procédure du clique du bouton:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    procedure TAccueil.BitBtn3Click(Sender: TObject);
    
    Var types : string;
        valeur, Montant : real;
        Sort : Boolean;
    begin
      Application.CreateForm(Timprime, imprime); //Evite Problème si aucune imprimante est déclarée
    Data.Sel_param.Params[0].Value := 'dat_deb';//Recherche de la date de début dans paramètres
    Data.Sel_param.Open;
    Imprime.MINI.Caption:=Data.Sel_Paramvaleur.Value;
    Data.Sel_Param.Close;
    Data.Sel_param.Params[0].Value := 'dat_fin';//Recherche de la date de fin dans paramètres
    Data.Sel_param.Open;//ouverture de la requete etat_ligne
    Imprime.MAXI.Caption:=Data.Sel_Paramvaleur.Value;
    Data.Sel_Param.Close;
    
    
    Data.representant.Close;//fermeture de la table representant
    Data.Representant.Open;//ouverture de la table representant
    While not Data.Representant.Eof do//tant que l'on est pas en fin de table
    Begin
    ReducMontant :=0;
    Data.etat_ligne.Close;//fermeture de la requete etat_ligne
    Data.Etat_Frais.Close;//fermeture de la requete etat_frais
    Data.Etat_Total_Suppl_Frais.Close;//fermeture de la requete etat_total_suppl_frais
    Data.Etat_Total_Suppl_Com.Close;//fermeture de la requete etat_total_suppl_com
    Data.Tab_Reduc_Frais.Close;//fermeture de la table Tab_Reduc_Frais
    Data.Etat_Cumul.Close;//fermeture de la requete etat_cumul
    
    Data.etat_ligne.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete etat_ligne prend la valeur du numéro de représentant de la table representant
    Data.etat_ligne.Open;//ouverture de la requete etat_ligne
    //Form1.Showmodal;
    
    Data.etat_Frais.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete etat_frais prend la valeur du numéro de représentant de la table representant
    Data.Etat_Frais.Open;//Ouverture de la requete etat_Frais
    
    Data.Etat_Total_Suppl_Com.Params[0].Value := Data.representantrepr_num.Value;//le parametre 0 de la requete Etat_Total_Suppl_Com prend la valeur du numéro de représentant de la table representant
    Data.Etat_Total_Suppl_Com.Open;//ouverture de la requete etat_total_suppl_com
    
    Data.Etat_Total_Suppl_Frais.Params[0].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete etat_total_suppl_frais prend la valeur du numéro de représentant de la table representant
    Data.Etat_Total_Suppl_Frais.Open;//ouverture de la requete etat_total_suppl_frais
    
    Data.Tab_Produit.Close;
    Data.Tab_Produit.Open;
    Data.Etat_Cumul.Params[0].Value := Data.Tab_ProduitComm.Value;
    Data.Tab_Produit.Close;
    Data.Etat_Cumul.Params[1].Value := Data.representantRepr_num.Value;//le parametre 0 de la requete Etat_Cumul prend la valeur du numéro de représentant de la table representant
    Data.Etat_Cumul.Open;//fermeture de la requete etat_cumul
    
    Data.Tab_Reduc_Frais.Open;//ouverture de la table Tab_Reduc_Frais
    
    Supplement(Data.representantRepr_num.Value);//appel de la fonction supplement avec en parametre un numero de representant
              //Calcul des Frais et Totaux
              valeur := Data.Tab_Reduc_FraisValeur.Value;
              types := Data.Tab_Reduc_FraisType.Value;
              sort := False;
              While sort=False do
              Begin
                   Valeur := Data.Tab_Reduc_FraisValeur.Value;
                   Types := Data.Tab_Reduc_FraisType.Value;
                   Montant := Data.Tab_Reduc_FraisFrais.Value;
                   if Data.Tab_Reduc_FraisFrais.Value > Data.Etat_FraisSomPrix.Value then sort := true
                   else if Data.Tab_Reduc_Frais.Eof then sort := true
                        else Data.Tab_Reduc_Frais.Next;
              End;
              If (Data.Tab_Reduc_FraisFrais.Value<Data.Etat_FraisSomPrix.Value)and(Data.Tab_Reduc_Frais.Eof) then
              Begin
                   Imprime.Band_Frais.Enabled := False;
                   Imprime.Frais.Caption := '';
              End
              Else Begin
                   Imprime.Band_Frais.Enabled := True; 
                   Imprime.Band_Frais.Enabled := False;
                   If Data.Tab_Reduc_FraisType.Value='Valeur'then Imprime.Frais.Caption := Data.Tab_Reduc_FraisValeur.AsString
                   else Imprime.Frais.Caption := FormatFloat('0.00',Data.Etat_FraisSomFrais.Value*(1-Data.Tab_Reduc_FraisValeur.Value/100));
              End;
    
              If Imprime.Frais.Caption<>''then
                   Imprime.tot_frais.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_FraisSomMontant.Value+StrToFloat(Imprime.Frais.Caption))
              else Imprime.tot_frais.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_FraisSomMontant.Value+Data.Etat_FraisSomFrais.Value);
              //Imprime.tot_com.Caption:=FormatFloat('0.00',Data.Etat_Total_Suppl_ComSomMontant.Value+Data.Etat_FraisSomCom.Value-ReducMontant);
              Imprime.Tot_Com.Caption:= IntToStr(ReducMontant);
    
             // Imprime.Cumul.Caption := FormatFloat('0.00',Data.RepresentantRepr_Cumul.Value);
    if not (Data.Etat_Ligne.Eof) then imprime.QuickRep1.Preview;//si la table Etat_Ligne n'est pas vide on fait un preview du quickreport
    
    Data.etat_ligne.Close;//fermeture des requetes
    Data.Etat_Frais.Close;
    Data.Etat_Total_Suppl_Com.Close;
    Data.Etat_Total_Suppl_Frais.Close;
    Data.Tab_Reduc_Frais.Close;
    Data.etat_Supplement.Close;
    Data.Etat_Cumul.Close;
    
    Data.Representant.Next;//on passe à l'enregistrement suivant(representant suivant)
    End;//Fin while not representant.eof
    Data.Representant.Close;//fermeture de la table representant
    end;
    et enfin dans ma page etat.pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure Timprime.QRExpr11Print(sender: TObject; var Value: String);
    begin
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
    Begin
            ReducMontant := ReducMontant+500;
    end
    else Begin
            ReducMontant := 8;
    end;
    Je voulais tester mais rien ne s'affiche dans mon caption me suis tromper ou ? car le Construire me donne plus d'erreurs.
    Enfin je doit dire que Delphi j'en suis à apprendre les variables donc bon.
    Une petite idée ?
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Désolé j'étais aux abonnés absents Hier
    et enfin dans ma page etat.pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure Timprime.QRExpr11Print(sender: TObject; var Value: String);
    begin
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
    Begin
            ReducMontant := ReducMontant+500;
    end
    else Begin
            ReducMontant := 8;
    end;
    Je voulais tester mais rien ne s'affiche dans mon caption me suis tromper ou ?
    Logique ici tu mets une valeur dans reducmontant mais de la 'form' Imprime mais celle-ci n'est modifiée pas de main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure Timprime.QRExpr11Print(sender: TObject; var Value: String);
    begin
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
           Main.ReducMontant := Main.ReducMontant+500;
    j'ai oter ReducMontant := 8; car nul et non avenu , reducmontant est un cumul et cette instruction le réinitialise
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Ne soit pas désolé pour hier, c'est déja fort sympathique de m'aider

    J'ai pas trop compris pourquoi mon pourquoi quand je veux donner une valeur à ReducMontant dans Imprime ca ne marche pas, la déclaration est faite dans le main, et justement quand je passe au dessus à partir de Imprime il me dit d'ou elle vient et à quelle ligne elle se trouve.
    Pour moi main contenant Imprime ca me semblai logique que j'ai accés à ReducMontant.
    Enfin bref à ce moment comment puis-je incrémenter ma variable à partir de Imprime ?
    En créant une procédure dans main appelé dans imprime comme ceci :
    main.Maproc(); ?

    Aussi vu que je sent arrivé le souci puis-je aisément utiliser ma variable dans mes expressions ? ( pour les calcules de moyennes , en gros AVER(montant-ReducMontant)).
    Ou à défaut puis-je mettre une procédure dans une expression ?

    Merci.

    Ah petite question comment je peux tester l'évenement d'impression de mon QRExpr ? ni a t'il pas un messagebox(); ou une sorte de echo(); qui me ferai voir déja si je passe ou pas dans mon évent.
    Là de mon travail j'ai le net mais pas le temps, et de chez moi j'ai le temps mais pas le net pour l'instant ( c'est long les déménagements).
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  17. #17
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par SirDarken Voir le message
    Pour moi main contenant Imprime ca me semblait logique que j'ai accès à ReducMontant.
    oui mais en mettant les points sur les i c'est mieux

    Citation Envoyé par SirDarken Voir le message
    Enfin bref à ce moment comment puis-je incrémenter ma variable à partir de Imprime ?
    Comme indiqué cela devrait fonctionné

    Citation Envoyé par SirDarken Voir le message
    Ah petite question comment je peux tester l'évenement d'impression de mon QRExpr ? ni a t'il pas un messagebox(); ou une sorte de echo(); qui me ferai voir déja si je passe ou pas dans mon évent.
    ShowMessage('ma procedure est appelée ');


    En fait ton problème vient du fait que le quickreport est fait 'a la main'
    et qu'il y a de forte chance que la création de l'evenement (Onprint) de l'expression ne soit pas déclaré

    si je regarde un de mes etats contenant des expressions modifiées dans un OnPrint j'obtiens, j'ai aussi mis en rouge le ResetAfterPrint pour rappel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    object unMontant : TQRExpr
      Tag=0
      Left=958
      Top=10 ......
    
      onPrint= MontantPrint
      ResetAfterPrint= True
      Expression='IF .....'
    voilà ce que donnerait le code de la fonction avec une trace (showmessage, tu risques vite d'en avoir marre de cliquer sur ok )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure Timprime.QRExpr11Print(sender: TObject; var Value: String);
    begin
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
           Main.ReducMontant := Main.ReducMontant+500;
    ShowMessage('Nouveau montant '+inttostr(Main.ReducMontant);
    si le message de s'affiche pas , c'est que la fonction n'est pas liée au QRExpr,
    Quelque par après la création du QrExpr il faut rajouter

    QRExpr11.OnPrint:=QRExpr11Print;

    Maintenant choisir de déclaré Reducmontant dans l'unité Main ou dans Imprime
    c'est ton choix . Je ne saisi pas toute la logique du programme, je ne comprends pas non plus pourquoi le QR est fait par programmation plutôt que par l'intermediaire d'une Form avec un Quickreport à l'intérieur , et de plus défini comme maitre-détail (ce qui éviterait ces x bandes visibles ou non , et beaucoup d'autres problèmes annexes)

    SUGGESTION : ne serait-il pas mieux de faire un nouvel état (indentique) que d'essayer de modifier l'existant. Une petite analyse pour bien étudier les fichiers puis une programmation plus simple (une seule forme contenant un Quickreport ,la sélection du representant etc ... et les boutons ) te permettrait peut-etre de ne pas devenir chauve avant l'age
    j'ai en effet l'impression que le PRIME PROGRAMMEUR a été cherché la petite bête, Ceci :
    Application.CreateForm(Timprime, imprime); //Evite Problème si aucune imprimante est déclarée
    l'oblige à tout se faire à la main , Aucune imprimante déclaré sur un poste qui veut faire une impression c'est quand même rare , d'ailleurs aucune imprimante déclarée sur un poste c'est rare non ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  18. #18
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Alors je viens de tester et je doit vraiment pas être doué ou chanceux.
    Je regarde mon objet QRExpr11 et j'ai ca
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
          object QRExpr11: TQRExpr
            Left = 837
            Top = 0
            Width = 78
            Height = 17
            Frame.Color = clBlack
            Frame.DrawTop = False
            Frame.DrawBottom = False
            Frame.DrawLeft = False
            Frame.DrawRight = False
            Size.Values = (
              44.9791666666667
              2214.5625
              0
              206.375)
            Alignment = taRightJustify
            AlignToBand = False
            AutoSize = False
            AutoStretch = False
            Font.Charset = DEFAULT_CHARSET
            Font.Color = clWindowText
            Font.Height = -13
            Font.Name = 'Arial'
            Font.Style = [fsBold]
            Color = clWhite
            OnPrint = QRExpr11Print
            ParentFont = False
            ResetAfterPrint = True
            Transparent = False
            WordWrap = True
            Expression =
              'IF(SUM(etat_ligne.Prix) >= 20000,SUM(etat_ligne.Mt_Comm),IF(SUM(' +
              'etat_ligne.Prix) > 0,SUM(etat_ligne.Mt_Comm) - 500,SUM(etat_lign' +
              'e.Mt_Comm)))'
            Mask = '0.00'
            FontSize = 10
          end
    J'ai donc tout comme il me faut à ce moment là.
    J'ai donc modifié un peu la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
    begin
           main.ReducMontant := main.ReducMontant+500;
           ShowMessage('Nouveau montant '+inttostr(Main.ReducMontant));
    end
    else
    begin
            ShowMessage('Erreur mais réussi ');
    end
    end;
    Mais je ne recoie jamais aucun message, je lance cosntruction je voie pas d'erreurs liées au modifs ( je sais même pas si c'est pris en comtpe du coup ), mais ce message ne veut pas venir.

    Ensuite pourquoi ne pas tout refaire, et bien c'est que en premier j'en serai pas capable je débute Delphi avec ce programme à débuguer.
    En second c'est un contrat de maintenance, et donc si je doit reprendre le tout ca vas être plus long et donc facturable, et vu déja le temps que je mets à comprendre Delphi, aieaie.
    Enfin effectivement si je n'arrive pas à résoudre le problème par cette méthode, on vas devoir préparer un devis et changer à ce moment toute la logique de cette chose.

    Edit:
    Je suis vraiment un idiot, en faite je faisait que Construire l'application et jamais Compiler ( y'avait une erreur en plus sur ca ), donc voila à présent je compile à chaque fois, et j'ai pu progresser énormément, je recoie le showmessage de mon else, donc le problème viens pour le moment que je passe pas dans ma boucle.
    (j'en est profité pour enlever tous mes tests car du coup en compilant je recevais pleins de showmessage )
    et il ne reste plus que ca dans mes procédures sur etat.pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure Timprime.QRExpr11Print(sender: TObject; var Value: String);
    begin
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
    begin
           main.ReducMontant := main.ReducMontant+500;
           Value:= IntToStr(500);
           ShowMessage('Nouveau montant '+inttostr(Main.ReducMontant));
    end
    else
    begin
            ShowMessage('Cas1');
    end
    end;
    et je recoie Cas1 en boucle donc l'évenement marche
    Allez avec de la chance me restera 3 cheveux lol.

    ReEdit
    Le souci viens que QRExpr1.Value.intResult vaut 0 tout le temps.
    (Dieu soit ce showmessage() ^^ ).
    Problème c'est que je comprend pas pourquoi, devrai-je stocké dans une variable déclenché par un event sur QRExpr pour la recupérer ?
    Ou y'as t'il une anguilles.
    Merci

    Je m'auto-aide presque
    J'ai mis un évenement sur QRExpr1 qui stock Value dedans, pour m'en servir.
    Problème c'est que dans l'évenement QRExpr11 j'applique StrToInt() et je le fait sur des nombres négatif ( des avoirs ) et la je recoie un message d'erreurs qui me coupe tout.
    Pourtant je suis sur que c'est bon là, je le sent.
    Comment contourné ce souci de conversions ?
    Merci

    Allez je vais le faire
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  19. #19
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Je suis vraiment un idiot, en faite je faisait que Construire l'application et jamais Compiler
    j'y crois pas

    il ne reste plus que ca dans mes procédures sur etat.pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure Timprime.QRExpr11Print(sender: TObject; var Value: String);
    begin
    if (QRExpr1.Value.intResult < 20000) and (QRExpr1.Value.intResult > 0) then
    begin
           main.ReducMontant := main.ReducMontant+500;
           Value:= IntToStr(500); <-------surtout pas tu modifies la valeur imprimée à 500 c'est pas ce que j'ai compris, je croyais que la commission était diminuée de 500 , d'ailleurs que se passe t-il si mt_com<500 , le representant reverse une commission à la boite :lol: 
           ShowMessage('Nouveau montant '+inttostr(Main.ReducMontant));
    end
    else
    begin
            ShowMessage('Cas1');
    end
    end;
    Le souci viens que QRExpr1.Value.intResult vaut 0 tout le temps.
    Ou y'as t'il une anguille.
    Merci
    Moi je connais pas QRExpr1.Value.intResult mais StrToInt(QRExpr1.Value) OUI
    de plus il ne faut pas tester sur la valeur de l'expression mais sur etat_ligne.Prix il me semble (j'y avait pas fait attention) donc ce n'est pas sur QRExpr11 mais sur QRExpr1 que doit avoir lieu l'évenement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure Timprime.QRExpr1Print(sender: TObject; var Value: String);
    begin
    if StrToInt(QRExpr1.Value) in [0..19999] then
    begin
           main.ReducMontant := main.ReducMontant+500;
           ShowMessage('Nouveau montant '+inttostr(Main.ReducMontant));
    end
    else  ShowMessage('Cas1');
    end;
    pour ce qui est de l'expression je la trouve un peu compliquée non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             'IF(SUM(etat_ligne.Prix) >= 20000,SUM(etat_ligne.Mt_Comm),IF(SUM(' +
              'etat_ligne.Prix) > 0,SUM(etat_ligne.Mt_Comm) - 500,SUM(etat_lign' +
              'e.Mt_Comm)))'
    j'aime pas trop
    IF (SUM(Etat_ligne.Prix) BETWEEN 0 AND 19999, serait plus beau mais je ne sais pas si possible
    IF (SUM(Etat_ligne.Prix)>0 AND SUM(Etat_ligne.Prix)<20000,SUM(etat_ligne.Mt_Comm) - 500,SUM(etat_ligne.Mt_Comm)) me plait davantage , mais là je pinaille

    Allez avec de la chance me restera 3 cheveux .
    je ne t'appelle pas encore Matthieu alors ?

    [EDIT]
    Je viens de voir ton nouvel Edit avec le pb des Avoirs StrtoFloat ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  20. #20
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Alors effectivement en passant par floattostr() je n'ai plus d'erreur.
    Tout semble fonctionner du moins j'ai mes messages qui s'incrémente bien de 500.

    Petit problème a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imprime.tot_com.Caption:= FormatFloat('0.00',ReducMontant);
    m'affiche 0,00 alors que dans le code je remet le montant à 0 en debut de boucle ( sur chaque représentant ), donc je doute que ca vienne de là.

    Petit problème b :
    Pour mes calculs de moyennes je passe par un SUM ou AVERAGE des lignes en questions, comment je peux retirer mon reducmontant à ces derniers.
    Est-ce que SUM(etat_ligne.MtComm-ReducMontant) vas être bon ou pas.
    (D'ailleurs j'ai tjrs pas compris pourquoi la même instruction donne des résultats différents, car SUM(etat_ligne.Prix) donne le prix de la ligne en court mais c'est aussi la même instruction au calcul final, a moins que Delphi de lui même fasse :
    Ligne 1 : SUM(ligne1)
    Ligne 2 : SUM(ligne2)-SUM(ligne1)
    Ligne final (donc eof de la table ) : SUM(total).
    ).

    Et si si je compiler pas, comme je l'avai dit plus haut c'est mon premeir contact avec Delphi ( je commence bien lol ).

    Editer j'ai commencer à regarder pour mes calculs de moyennes.
    La première solution ne marche pas ( ajouter ReducMontant dans l'expression), j'ai donc opté pour modifier la valeur par un évenement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure Timprime.QRExpr7Print(sender: TObject; var Value: String);
    begin
            ComMoyVal:=Value;
            cmv:= StrToFloat(ComMoyVal)+ReducMontant;
            Value:=FormatFloat('0.00',cmv);
    end;
    Seulement la ligne en rouge me provoque des erreurs à la compilation.
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [QuickReport] Problème avec QRExpr
    Par osma_1978 dans le forum QuickReport
    Réponses: 5
    Dernier message: 22/05/2008, 08h12
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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