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

FastReport Discussion :

Affichage dans un report


Sujet :

FastReport

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut Affichage dans un report
    Bonjour à tous,
    Condition : Delphi 10.2, FastReport 6.3.9, Zeos.
    J'ai une table de données QCumul comportant 2 champs : Num_compte, Libellé du compte, Total.
    Dans FastReport, je désire afficher ces champs dans une bande MasterDetail selon les critères suivants :
    - la bande serait divisée en 2 parties Actif et Passif (mais est-ce possible ?) comprenant donc les 3 champs Num_compte, Libellé du compte, Total.

    Je sais afficher chaque champ sur 1 colonne, pas de problème mais, connaissant peu FastReport, le problème est le suivant : comment afficher les 3 colonnes en 2x3 colonnes, les 3 champs de l'Actif à gauche par ex. et les 3 champs du Passif à droite ?
    J'ai essayé par une sorte d'index, 1 pour Actif et 0 pour Passif mais je n'obtiens rien de valable.
    Je code tout ça dans Delphi. Je sais qu'on peut coder dans FastReport mais n'étant pas 'on' je ne sais pas œuvrer. Peut-être existe-t-il un PDF ou autre tutoriel d'apprentissage avancé ?
    On peut aussi saisir une expression dans un MemoView.
    Voilà pour une fin d'année laborieuse.
    Merci. Cordialement.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 534
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par f5jcg_Lulu Voir le message
    J'ai une table de données QCumul comportant 2 champs : Num_compte, Libellé du compte, Total.
    J'en compte 3 . Blague à part une jeu d'essai serait pratique

    Je sais qu'on peut coder dans FastReport mais n'étant pas 'on' je ne sais pas œuvrer.
    Oui mais cela dépend ou dépendait de la version de fastreport (celle fournie par Embarcadero ne proposait pas toujours la possibilité d'utiliser ce qui s'appelle FastScript, le dit FastScript se rapprochant beaucoup de Pascal)

    Peut-être existe-t-il un PDF ou autre tutoriel d'apprentissage avancé ?
    regarder dans les démos fournies est aussi une solution.
    Je vais tâcher de retrouver ce que j'ai comme PDF

    Pour ta demande je vois plusieurs manières d'opérer tout dépend beaucoup de ce que tu nommes Actif et Passif et donc déjà il y a la partie "source de données" à établir correctement. L'idée d'index me semble bonne.

    au plus simple dans le MasterData tu déposes les données 2 fois (une fois pour les actifs puis tu fait une copie pour les passifs) ensuite tu conditionnes la visibilité des memoview (tu as déjà posé la question pour de la couleur) en fonction de l'index.

    Nom : Capture.png
Affichages : 70
Taille : 41,5 Ko
    ici tu as une approche, les 3 premiers memoview (actifs) auront pour condition Index=0 , les trois seconds (passifs) index=1
    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 confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut
    Merci Serge, ta solution fonctionne au petit poil. Maintenant ce n'est que du look de mes rapports.
    Par contre j'ai un message quand j'ouvre les rapports <Can not open a ResultSet> mais les rapports s'affichent néanmoins. Il n'apparaît qu'au 1er lancement du PC et au 1er lancement de l'appli.
    Cordialement

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut
    Problème de message résolu. C'est un Query fermé un peu trop tôt. Je l'ai déplacé à la fin de ma procédure dans un bloc séparé. Et c'est terminé.
    Merci. Cordialement

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut
    Re-bonjours à tous
    Je ne l'avais pas dit, il s'agit d'une appli de gestion des comptes d'une petite association.
    Fausse joie, le message s'affiche toujours dans les conditions suivantes :
    - lorsque je viens d'ajouter l'enregistrement d'une opération et que je n'affiche pas mes rapports, pas de problème
    - si je veux les afficher, à ce moment-là j'ai le message une seule fois jusqu'au prochain enregistrement
    - si après l'ajout d'un enregistrement -> sortie de l'appli -> rappel de l'appli -> affichage de mes rapports, pas de message d'erreur. Comme si la sortie de l'appli et son rappel remettait des paramètres en ordre. C'est dit à ma façon
    Après investigation, j'ai réussi à isoler la partie de code d'où semble AMHA provenir l'erreur et plus précisément les 2 requêtes que j'incrimine puisque lorsque je les mets en commentaire il n'y a plus d'erreur, mais plus de cumul des montants non plus.
    Pour info; rdImputation est une paire de boutons radio qui me permet de choisir entre Actif ou Passif.
    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
     
    case rdImputation.ItemIndex of
                0: begin
                     Datas.QJournal.fieldbyname('Montant_credit').value := edtMontant.text;
                     Datas.QJournal.fieldbyname('Imputation').value := 1;
                     begin
                       With Datas.QCumul do
                            begin
                              SQL.Clear;
                              SQL.Text := 'UPDATE tblCumul SET TotalActif = TotalActif +' + QuotedStr(edtMontant.Text) + 'WHERE CompteActif LIKE ' + QuotedStr(edtNumero.Text);
                              ExecSQL;
                       end;
                     end;
                   end;
     
                1: begin
                     Datas.QJournal.fieldbyname('Montant_debit').value := edtMontant.Text;
                     Datas.QJournal.fieldbyname('Imputation').value := 0;
                     begin
                       With Datas.QCumul do
                          begin
                            SQL.Clear;
                            SQL.Text := 'UPDATE tblCumul SET TotalPassif = TotalPassif +' + QuotedStr(edtMontant.Text) + 'WHERE ComptePassif LIKE ' + QuotedStr(edtNumero.Text);
                            ExecSQL;
                          end;
                      end;
                   end;
        end;
    Voilà, c'est étrange (pour moi, s'entend).
    Cordialement

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 534
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Plusieurs choses qui ne me plaisent pas (je vais, pour l'instant, parler d'un seul "bloc itemIndex=0") :

    - J'ai toujours une appréhension quand un un texte est traité comme un chiffre. // Il faudrait faires des contrôles en amont de l''extrait de code indiqué
    - Je préfère toujours les requêtes paramètrées , et que comme je pense que le Like devrait être remplacé par une égalité le sql devrait être, AMHA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     UPDATE tblCumul SET TotalActif = TotalActif +:pMontant WHERE CompteActif = :pNumero
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Datas.QCumul.Close; // Ne pas oublier la fermeture surtout si cette Query n''est pas uniquement pour des ExecSQL 
    Datas.QCumul.SQL.Text:=' UPDATE tblCumul SET TotalActif = TotalActif +:pMontant WHERE CompteActif = :pNumero';
    Datas.QCumul.ParamByName('pMontant').asFloat:=StrToFloatDef(edtMontant.text,0.00);
    Datas.QCumul.ParamByName('pNumero').asInteger:=StrToIntDef(edtNumero.text,0);
    Datas.QCumul.ExecSQL;
    - Je ne vois pas dans ce bloc de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Datas.QJournal.fieldbyname('Montant_credit').value := edtMontant.text;
       Datas.QJournal.fieldbyname('Imputation').value := 1; 
       // Application de la mise à jour ou Insertion, je pense que le souci est là
    Le Datas.QJournal.ExecSQL (en supposant qu'il s'agisse d'une Query) ou autre post, ce qui pourrait poser de drôles de problèmes si erreur avait lieu ensuite

    En bref, pour moi, la logique est incorrecte. Je ferais ainsi :
    1-mise à jour de la table journal
    2-calcul des cumuls.

    revenons sur le SQL de QCumul pour les deux ItemIndex
    tu pourrais écrire le tout en un seul texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     UPDATE tblCumul SET TotalActif = TotalActif +:pMontanta, TotalPassif = TotalPassif +:pMontantp WHERE CompteActif = :pNumero
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Datas.QCumul.Close; // Ne pas oublier la fermeture surtout si cette Query n''est pas uniquement pour des ExecSQL si non alors le SQL.Text := deviendrait inutile
    Datas.QCumul.SQL.Text:=' UPDATE tblCumul SET TotalActif = TotalActif +:pMontant,TotalPassif=TotalPassif +:pMontantp WHERE CompteActif = :pNumero';
    if rdImputation.ItemIndex=0 then Datas.QCumul.ParamByName('pMontanta').asFloat:=StrToFloatDef(edtMontant.text,0.00) 
                                               else Datas.QCumul.ParamByName('pMontanta').asFloat:=0.00;
     
    if rdImputation.ItemIndex=1 then Datas.QCumul.ParamByName('pMontantp').asFloat:=StrToFloatDef(edtMontant.text,0.00) 
                                               else Datas.QCumul.ParamByName('pMontantp').asFloat:=0.00;
     
    Datas.QCumul.ParamByName('pNumero').asInteger:=StrToIntDef(edtNumero.text,0);
    Datas.QCumul.ExecSQL;
    enfin, je réitère, ce que j'ai pu indiquer sur l'une de nos discussions, la table tblCumul n'a que peu de raison d'être dans une base de données relationnelle. Tu n'indiques pas de quel SGBD il s'agit mais je pense que c'est SQLite mais je pense que ce genre de SQL conviendrait parfaitement pour le report

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT J.Numero,C.Description,SUM(IIF(J.imputation=0,J.montant,0.00)) MontantActif,SUM(IIF(J.imputation=1,J.montant,0.00)) MontantPassif
    FROM TblJournal J  LEFT JOIN tblComptes C ON C.NUMERO=J.NUMERO         
    GROUP BY J.NUMERO,C.Description
    N.B. SQLite étant pour moi très permissif, le GROUP BY peut s'écrire GROUP BY NUMERO

    P.S. Tu remarqueras que je ne suis plus très utilisateur de 'With' c'est voulu après la lecture de certains articles montrant les possibles problèmes que cela occasionne
    P.P.S. Dommage qu'il s'agisse de ZEOS, avec Firedac je proposerais (encore) plus de simplifications de code
    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 confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut
    Merci Serge pour cette réponse très documentée. Je l'essaierai dès que possible. Tu peux toujours me proposer ta solution Firedac, ayant une version de l'appli strictement identique sous Firedac, j'ai juste remplacé les composants Zeos par les composants Firedac.
    Toujours bon d'apprendre.
    Cordialement. Bon WE

  8. #8
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut
    Dégoûté. J'ai testé toutes les solutions mais toujours le même message, aussi bien en Zeos qu'en Firedac. Tous mes soupçons se portent sur ExecSQL, toujours AMHA bien sûr
    On verra ça après les fêtes.
    Bonnes fêtes de fin d'année.
    Cordialement

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 534
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par f5jcg_Lulu Voir le message
    Tu peux toujours me proposer ta solution Firedac, ayant une version de l'appli strictement identique sous Firedac, j'ai juste remplacé les composants Zeos par les composants Firedac.
    En fait, j'avais fait un truc similaire ou presque que tu pourrais retrouver ici https://github.com/Serge-Girard/Gest...ptesPersonnels
    Pour te proposer un truc avec Firedac, il me faudrait quand même la structure de ta Base de données avec un jeu d'essai
    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 confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 216
    Par défaut
    Je me demande intuitivement s'il ne faudrait pas séparer les instructions :
    - sous Delphi, l'enregistrement de nouvelles saisies, les calculs de sommes qui vont avec et la maj de la BDD, ce qui fonctionne très bien ;
    - sous FastReport le codage de ce qui concerne les rapports uniquement d'après les données de la BDD. Mais là je ne sais pas faire.
    ça pourrait être une idée quoiqu'il n'y ait aucune raison à mon avis pour que les erreurs ne se perpétuent pas.

Discussions similaires

  1. Affichage dans Crystal Report
    Par SD_X3 dans le forum SAGE
    Réponses: 22
    Dernier message: 09/03/2015, 13h25
  2. probleme d'affichage dans crystal report viewer
    Par mounir01 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 23/10/2014, 17h23
  3. problème avec un champ d'affichage dans crystal report
    Par djelloharmel dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/12/2012, 12h19
  4. affichage dans un report
    Par meryma dans le forum VB.NET
    Réponses: 0
    Dernier message: 13/08/2009, 14h00
  5. [V5] [BO 5.1.6] Problème d'affichage dans BO Reporter
    Par KrusK dans le forum Deski
    Réponses: 8
    Dernier message: 20/07/2009, 14h07

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