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

Lazarus Pascal Discussion :

[LazReport] Problème d'impression maître détail


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Patrick25300
    Homme Profil pro
    Retraité en technicien de maintenance et méthodes
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité en technicien de maintenance et méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Par défaut [LazReport] Problème d'impression maître détail
    Bonjour à tous, c'est un peu long

    J'utilise Lazarus v1.6 avec Windows XP
    Composants de base de données
    IBConnection
    SQLTransaction
    SQLQuery
    DataSource

    Composants LazReport
    frReport
    frDBDataSet
    frDesigner
    frRoundRectObject


    J'ai un soucis d' un report maitre détail avec LazReport, les reports simples fonctionnent très biens.

    J'ai créé une application la plus simple possible afin de rechercher le problème.
    J'ai fait les tableaux ci-dessous avec les différentes options, qui je pense donne les explications.
    Suivant l'utilisation de:
    SQLQueryStock.DisableControls;
    SQLQuerySortie.DisableControls;
    et
    ShowProgress à true ou false
    Ensuite un deuxième tableau en modifiant l'unité "LR_Class" de LazReport.

    Tableau 1

    DisableControls ShowProgress Résultat
    OUI Oui ou NON Le rapport s'exécute sans soucis, plusieurs fois de suite MAIS le détail ne fonctionne pas.
    Les détails affichent la première données Maitre correspondant
    au nombre de fois que le détail a, et ceci à tous les détails.
    NON OUI Le rapport est JUSTE MAIS, il faut annuler la progression qui n'en fini pas, au deuxième test
    il y a erreur de pointeur "classe d'exception "externa: SIGSEGV" à l'adresse 403794.
    NON NON Le rapport est JUSTE MAIS
    au deuxième test il y a erreur de pointeur
    "classe d'exception "externa: SIGSEGV" à
    l'adresse
    SAUF si joue avec le navigateur de données entre
    deux impressions après quelques fois erreur ci-dessus

    Ensuite si je mets en commentaire l'intérieur de ces deux procédures de l'unité
    LR_Class "ligne 8115 et 8233.

    procedure BackupBookmarks;
    procedure RestoreBookmarks;

    Tableau 2

    DisableControls ShowProgress Résultat
    OUI OUI ou NON Le rapport s'exécute sans soucis, plusieurs
    fois de suite MAIS le détail ne fonctionne pas.
    Les détails affichent la première données Maitre
    correspondant au nombre de fois que le détail a:
    et ceci à tous les détails.
    Revenir avec LE NAVigateur de données au premier
    enregistrement pour ne pas avoir un rapport vide
    NON OUI Le rapport est JUSTE et fonctionne normalement
    NON NON Le rapport est JUSTE et fonctionne normalement


    Le second souci, c'est qu'avec une simple application et suivant le deuxième tableau ma petite application fonctionne très bien.
    MAIS, en reprenant mon application principale, le soucis c'est que la fenêtre de progression reste active, il me faut cliquer sur le bouton "Cancel" pour qu'elle se ferme, afin d'avoir l'aperçu de l'impression, sans cela, ça marche comme je veux et je ne trouve pas pourquoi, ça ne me parait pas différent de la petite application d'essai.
    Si j'utilise le double passage dans l'option de l'état, je dois fermer deux fenêtres afin d'avoir l'aperçu de l'impression.

    Toutes les propriétés sont par défauts, en essayant autrement rien n'y fait.

    Je pense que le signal de fin de table du détail n'est pas pris en compte par lazReport.

    Lors du débugage je passe par cette unité "LR_prog" de LazReport, c'est sur la dernière ligne que ça coince "Result:=ShowModal"

    Unité LR_progr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function TfrProgressForm.Show_Modal(Doc: TfrReport): Word;
    begin
      FDoc := Doc;
      Application.QueueAsyncCall(@DoBeforeModal, 0);
    //  PostMessage(Handle, CM_BeforeModal, 0, 0);
      Visible:=False;
      Enabled:=True;
      ModalResult:=mrNone;
      InitializeWnd;
      Result:=ShowModal;
    end;
    Je fais "F7" sur cette dernière ligne, je me retrouve dans l'unité "customForm.inc" dans la fonction "function TCustomForm.ShowModal: Integer;"
    et à la ligne N°2919 "Application.Idle(true);" c'est à cette endroit que la fenêtre de progression s'affiche et qu'il me faut cliquer sur le bouton "Cancel" pour avoir le rapport, lors de simple rapport cette ligne passe très bien.
    Merci de votre aide.

  2. #2
    Membre confirmé Avatar de Patrick25300
    Homme Profil pro
    Retraité en technicien de maintenance et méthodes
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité en technicien de maintenance et méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Par défaut
    Bonjour à tous

    Suite à l'affichage sans fin de la petite fenêtre de progression, j'ai utilisé cette astuce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    frDBDataSet1.RangeEnd:= reCount;
    frDBDataSet1.RangeEndCount:= UnitBase1.Data.SQLQueryStock.RecordCount;
    Cela me prouve que LazReport ne trouve pas la fin des données.
    Je ne mets pas résolu, car ce n'est pas la vraie solution, mais qui m’ira très bien.

  3. #3
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut,

    DisableControls doit être utilisé avec précaution car il agit sur les TDataSource reliées à l'ensemble de données, elles deviennent désactivées y compris si elles servent à définir une relation maître/détail (c'est ballot).

    Conseil : utiliser une TDataSource particulière uniquement pour définir la relation maître/détail et autant d'autres que nécessaire pour les liaisons à l'affichage. Il faut alors proscrire l'emploi de DisableControls et désactiver les DataSources liées à l'affichage une par une. C'est bourrin mais plus sûr.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. Problème de création relation maître détail
    Par codial dans le forum Bases de données
    Réponses: 15
    Dernier message: 28/08/2016, 00h30
  2. Réponses: 9
    Dernier message: 30/12/2012, 17h10
  3. Réponses: 1
    Dernier message: 06/09/2012, 20h02
  4. Réponses: 1
    Dernier message: 27/07/2010, 09h14
  5. Problème de création relation maître détail
    Par codial dans le forum Firebird
    Réponses: 4
    Dernier message: 21/02/2008, 16h33

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