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

QuickReport Discussion :

QuickReport sans base de données


Sujet :

QuickReport

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 10
    Points
    10
    Par défaut QuickReport sans base de données
    Bonjour a tous,

    Je cherche à pousser QR dans ses derniers retranchement en l'utilisant sans passer par une DataBase... ("T'es tordu mon p'tit Elfi" me direz-vous)

    J'ai tout un modèle de données sur lequel mon application est basé. Il se trouve que j'ai une liste d'info que je dois mettre dans un état.
    Pour le moment, j'arrive à afficher toutes mes données, ligne par ligne, avec un total à la fin (qui est juste, en passant ).
    Pour compliquer les choses, mes données étant classé par ensemble, je voudrais afficher des sous-totaux pour chacun des ensembles. Et c'est là que je coince.

    En effet, je gère la propriété MoreData dans l'évènement OnNeedData, j'utilise un QRBand en mode BandType:=rbDetail pour chacune des informations de ma liste (avec BeforePrint qui renseigne dynamiquement mes Labels) et un QRBand en mode BandType:=rbSummary pour mon total à la fin.

    J'ai ajouté un QRBand en mode BandType:=rbGroupFooter lié à mon rbDetail... (jusque là je crois que j'ai bon si j'avais une base)
    Seulement je ne maîtrise pas vraiment les conditions pour lesquels un rbGroupFooter va se renseigner et (surtout) s'afficher.

    Y a-t-il des méthodes, propriétés ou évènements particuliers à gérer pour pouvoir afficher mes sous-totaux ? Qu'est-ce qui me manque dans la compréhension d'un quick report pour arriver à faire ce que je veux ?

    Merci pour vos éclaircissements (ah oui... inutile de me dire "passe par une base tu te fera moins ch***", je le sais, mais ma boîte n'a pas suffisamment de budget - ou ne veut pas et je ne décide pas - pour une refonte de l'état avec spec, dev, test, test non régression, etc...).
    Suivant la forme de la question, on a comme resultat soit une reponse (pour faignants), soit une explication (pour les curieux), soit les deux (pour les intelligents) ou rien (pour les idiots)...

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par elfi-bey Voir le message
    Je cherche à pousser QR dans ses derniers retranchement en l'utilisant sans passer par une DataBase... ("T'es tordu mon p'tit Elfi" me direz-vous)
    pas tant que ça si
    (ah oui... inutile de me dire "passe par une base tu te fera moins ch***", je le sais, mais ma boîte n'a pas suffisamment de budget - ou ne veut pas et je ne décide pas - pour une refonte de l'état avec spec, dev, test, test non régression, etc...).
    mais là faut pas pousser , ma boite non plus n'a pas de budget SGBD et pourtant on utilise Firebird mais y aussi Postgres, mysql(un faux gratuit) etc...
    En effet, je gère la propriété MoreData dans l'évènement OnNeedData, j'utilise un QRBand en mode BandType:=rbDetail pour chacune des informations de ma liste (avec BeforePrint qui renseigne dynamiquement mes Labels) et un QRBand en mode BandType:=rbSummary pour mon total à la fin.
    jusque là , tout bon
    J'ai ajouté un QRBand en mode BandType:=rbGroupFooter lié à mon rbDetail... (jusque là je crois que j'ai bon si j'avais une base)
    Seulement je ne maîtrise pas vraiment les conditions pour lesquels un rbGroupFooter va se renseigner et (surtout) s'afficher.
    je crois (suis sur) qu'il manque un GroupHeader (enfin avec une base c'est ce que j'utilise/utilisais) même si ce dernier a une hauteur de 0
    c'est là que l'on indique ce que j'appelle le "critère de rupture" .
    [Edit]
    Il a fallu que je retourne sur un projet D3 pour réviser mes termes ...
    Il faut bien mettre un GroupHeader , mon "critère de rupture" c'est la propriété Expression , et il faut renseigner aussi la propriété FooterBand
    Bémol je n'ai jamais essayé ce genre de chose avec le OnNeedData donc reste à savoir quoi mettre dans expression !

    Autres solutions , car je ne sais pas si cette première fonctionne
    à la place d'une Bande GroupFooter
    - ajoute à la bande détail une ChildBand (qui fera office de GroupFooter) , il te suffira alors de gérer le afterprint de la bande détail (et bien sur le critère de rupture) pour afficher ou non cette ChildBand ou encore en utilisant le BeforePrint de cette ChildBand
    - Il existe aussi un type de bande appelé rbOverlay , bande qui doit être demandé de manière explicite par <mabande>.Print , mais je n'ai jamais utilisé

    en conclusion , tu es loin des "derniers retranchements" de quickreport
    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 à l'essai
    Homme Profil pro
    Analyste fonctionnel
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Arg... Je pensais pourtant arrivé au bout Je vais donc creusé encore un peu...

    Merci pour ces infos, je vais voir ce que je peux faire.

    ...
    Pour info, après tests, je n'arrive pas à gérer la "condition de rupture".
    J'ai ajouté un TQRGroup lié à mon rbGroupFooter et à mon rbDetail. Je n'ai rien mis dans la propriété Expression mais celle-ci est mise à jour (avec un truc du genre intToStr(fLineNumber), pour être sur que la valeur change à chaque fois) dans l'AfterPrint de la QRBand typée rbDetail (je pensais qu'il y avait un évènement OnChange sur celle-ci, à tord).

    En essayant de débuger, je m’aperçois que je ne passe qu'une fois (au début) dans mon QRGroup et donc qu'une fois dans mon rbGroupFooter (à la fin).

    Je vais essayer de changer mon QRGroup en QRBand typé rbGroupHeader (mais je ne vois toujours pas comment gérer la condition de rupture).
    Suivant la forme de la question, on a comme resultat soit une reponse (pour faignants), soit une explication (pour les curieux), soit les deux (pour les intelligents) ou rien (pour les idiots)...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    J'abandonne...

    Je vais passer par un DataSet que je vais renseigner manuellement avec ma liste et qui comportera les champs que je veux afficher.
    Ainsi je retombe sur quelque chose de connue.

    Merci encore SergioMaster.

    (Mais je suis toujours preneur s'il y a une solution )
    Suivant la forme de la question, on a comme resultat soit une reponse (pour faignants), soit une explication (pour les curieux), soit les deux (pour les intelligents) ou rien (pour les idiots)...

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour, ne lâche pas le morceau !

    en gros une solution (non testée)

    le quickreport comprendra 1 BandeDétail + une bande Enfant
    une variable private CR pour le critère de rupture
    une variable private SommeCR pour les cumuls

    j'ose pas mettre ça comme code , rien n'est vérifié , c'est juste le principe (comme dans le bon vieux temps où il fallait tout faire à la main )
    Form1 = Class(TForm)
    ...
    private
    CR : String;
    SommeCR : Currency;
    ....

    end;

    procedure Form1.QuickRep1BeforePrint ....
    begin
    CR:='1°Ensemble';
    SommeCR:=0.00;
    ...
    end;

    procedure Form1.DetailBand1BeforePrint ...
    begin
    if CR<>Ensemblelu // ensemblelu vient du onneedData
    begin
    DetailBand1.Height:=20;
    QRLabel1.Text:=Format('Somme %3.2f',[SommeCR]);
    CR:=EnsembleLu;
    SommeCR:=0.00;
    end
    else begin
    DetailBand1.Height:=0;
    // Mettre les valeurs dans les QRLabels de la ChildBand qui est en fait la "vraie" detailBand
    end;
    end;
    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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/03/2008, 17h07
  2. [MySQL] Sélection avec condition sans base de données
    Par covin85 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/04/2007, 09h08
  3. Postfix/imap Avec ou sans base de donnée
    Par manu7781 dans le forum Administration système
    Réponses: 1
    Dernier message: 10/04/2007, 14h30
  4. [Conception] Génération RSS sans base de données
    Par gb-ch dans le forum Langage
    Réponses: 9
    Dernier message: 16/03/2007, 17h11
  5. [CRYSTAL REPORT] Etat sans base de données
    Par chnickel dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/05/2004, 15h44

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