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 videNON 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
Je fais "F7" sur cette dernière ligne, je me retrouve dans l'unité "customForm.inc" dans la fonction "function TCustomForm.ShowModal: Integer;"
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;
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.![]()
Partager