AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

QuickReport, NeedData ohne DB-Anbindung

Ein Thema von norwegen60 · begonnen am 22. Nov 2023 · letzter Beitrag vom 23. Nov 2023
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

QuickReport, NeedData ohne DB-Anbindung

  Alt 22. Nov 2023, 16:50
Delphi-Version: XE
Hallo zusammen,

ich habe ein größeren Report der immer wieder Probleme macht. In dem Report gab es ein MischMasch aus DB-gebundenen Bändern und solchen, die per OnNeddData ihre Daten aus einer Klassenstruktur holen. Sowohl bei DB als auch bei der Klasse wurden die Daten per BeforePrint in die TQRLabel geschrieben.

Ich habe den Report jetzt so umgestellt, dass er eigentlich ganz ohne DB-Anbindung auskommen soll.
Jetzt habe ich aber das Problem, dass einige Bänder, die schon früher nicht DB-sensitiv waren, gar nicht mehr gedruckt werden.

Der Grundaufbau des Reports ist
Code:
                                        LinkBand   FooterBand HeaderBand ParentBand OnNeedData
qrba01h      TQRBand.rbPageHeader
qrba02h      TQRBand.rbTitle
arba03h      TQRBand.rbGroupHeader      qrba03m
qrba03d      TQrSubDetail               qrba03m    qrba03f    qrba03h                Yes
qrba03f      TQRBand.GroupFooter        qrba03m
qrba03m      TQRChildBand                                                   arba03f
qrba04h      TQRChildBand                                                   arba03m
arba04m      TQRChildBand                                                   arba04h
arba05h      TQRBand.rbGroupHeader
qrba05d      TQrSubDetail               qrba05m    qrba05f    qrba05h                Yes
qrba05f      TQRBand.GroupFooter
qrba05m      TQRChildBand                                                   arba19f
Insgesamt sind es 35 Bandgruppen
Die einzelnen Bandgruppen können per Configuration Enabled oder Disabled werden
In meinem Fall ist die Gruppe qrba03 disabled
Die Gruppe qrba04 sollte angezeigt werden, wird es aber nicht. Breakpoint in qrba04h.Beforeprint wird nicht angesprungen. Auch nicht in qrba04m
Ich hätte gesagt es liegt daran, dass qrba04h als Childband unter qrba03 hängt, aber das war schon immer so und vorher, als einige qrba00d noch mit einer Tabellen verknüpft waren, wurde arba04 korrekt gedruckt.
Ich habe qrba04h.TQRChildBand mal in TQRBand.rbGroupheader geändert. Danach flog das ganz Band irgendwo ans Ende des Report

Und es gibt auch sonst noch TQRChildBänder die z.B. nur ein Chart enthalten. Einer wird gedruckt der direkt darauffolgende nicht (oder anders rum).
Ich habe die Eigenschaften der Bänder per NotePad++ verglichen um wirklich alle Settings zu sehen. Die sind identisch.

Ein Ding war z.B., dass anfangs auch die genau gleich aufgebauten Datenlisten
  • qrba00h für Tabellenüberschrift
  • arba00d für Datenliste aus 1..n datensätzen
  • qrba00f für Footer
  • arba00m als Tre
nnung
teilweise gedruckt wurden und andere nicht. Es waren immer dieselben die gedruckt wurden oder nicht
Ich habe bei allen in der Textansicht des Forms Master = qrReport gelöscht
Der wurde beim Neuladen wieder automatisch überall rein geschriebn. Seitdem drucke aber alle Bandgruppen mit Daten

Ib qrba00d.Beforeprint werden immer die Daten in die Textfelder geschrieben und der Zeiger auf den nächsten Datensatz gesetzt
In qrba00d.NeedData wird MoreData = False gesetzt wenn keine Daten mehr da


Hat jemand ein Tip, was ich probieren könnte

Vielen Dank
Gerd
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: QuickReport, NeedData ohne DB-Anbindung

  Alt 23. Nov 2023, 06:23
Zitat:
In qrba00d.NeedData wird MoreData = False gesetzt wenn keine Daten mehr da
Da MoreData nur beim ersten Mal True ist, muss bei den folgenden Aufrufen MoreData auf True gesetzt werden, wenn noch Daten folgen.
Bernd
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: QuickReport, NeedData ohne DB-Anbindung

  Alt 23. Nov 2023, 09:28
Zitat:
In qrba00d.NeedData wird MoreData = False gesetzt wenn keine Daten mehr da
Da MoreData nur beim ersten Mal True ist, muss bei den folgenden Aufrufen MoreData auf True gesetzt werden, wenn noch Daten folgen.
Ja, das ist schon klar. Aber es gibt zwei Probleme:

Wenn alles korrekt läuft, erfolgt der Ablauf wie folgt
Code:
qrbad.NeedData      // Aufruf des NeedData des DATEN-Bandes
qrbah.BeforePrint   // Aufruf des BeforePrint des HEADER-Bandes
qrbad.NeedData      // Aufruf des NeedData des DATEN-Bandes, so lange bis MoreData = False gesetzt wird
qrbad.BeforePrint   // Aufruf des BeforePrint des DATEN-Bandes, so lange MoreData = True gesetzt wurde
Problem 1: (gelöst)
Bevor ich Master = qrReport überall gelöscht habe, gab es Bandgruppen, da wurde qrbad.NeedData angesprungen, MoreData = True gesetzt, aber weder qrbah.BeforePrintnie noch qrbad.BeforePrint angesprungen. Obwohl True, wurde direkt auf die nächste Band-Gruppe weiter gesprungen.

Problem 2:
Die Gruppen, die nur aus zwei TQRChildBand bestehen (in meinem Beispiel qrba04), werden mal gedruckt mal nicht.
Ich bin jetzt aber so weit gekommen, dass es wohl damit zusammen hängt, ob die vorige Gruppe gedruckt wurde.

Es war einiges an Aufwand, da QuickReport sich so schwer tut, Bänder nachträglich zu verschieben oder einzufügen, aber ich habe jetzt alle Gruppen so eingefügt, dass sie immer aus
Code:
arba00h     TQRBand.rbGroupHeader
qrba00d     TQrSubDetail
qrba00f     TQRBand.GroupFooter
qrba00m     TQRChildBand
bestehen. Damit kann ich jede Gruppe für sich über qrba05d.NeedData einblenden oder eben nicht

Die Lösung war, dass ich in NotePad++ direkt im DFM-File
  • die neuen Bänder eingefügt habe
  • alle Bänder im Code so angeordnet habe, wie sie kommen sollen
  • und dann auch die Top-Position aller Bänder so berechnet und korrigiert habe, wie sie sein müssen

Danach habe ich die neuen Bänder auch im PAS-File angelegt.

Und nach Neustart des Projektes sind die Positionen tatsächlich alle da, wo sie sein sollten. Incl. der neuen Bandgruppen, in die jetzt die alten TQRChild-Daten rein kommen

Das Problem ist also gelöst.

Jetzt muss ich noch die Logik incl. Befüllung der Datenfelder umstellen, aber das Schlimmste ist erledigt.
Und mit OnNeedData für jede Band-Gruppe bin ich jetzt zuversichtlich, dass ich die Kontrolle über die Bänder habe.

Trotzdem bin ich wieder stark am Überlegen, auf FastReport zu wechseln. Auch wenn dieses Projekt EndOfLife ist. Wir werden trotzdem noch jahrelang Service leisten müssen
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#4

AW: QuickReport, NeedData ohne DB-Anbindung

  Alt 23. Nov 2023, 14:15
Noch eine Erkenntnis:
Wenn Band.Enabled = False, wird Band.OnNeedData trotzdem aufgerufen.
Wenn Wechsel in den Daten und damit blättern auf EOF in OnBeforePrint liegt, wird OnBeforePrint nie aufgerufen und NeedData bleibt in Dauerschleife da EOF nie erreicht wird
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz