[gelöst] Lazreport mehrspaltig Detail-Subdetail Side by Side

Rund um die LCL und andere Komponenten
Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Lazreport mehrspaltig

Beitrag von Michl »

Michl hat geschrieben:Das sollte eigentlich mit einem Subreport auf dem Detailband zu realisieren sein.
Das habe ich eben mal probiert. Wenn man nur einen Subreport und ein stretched Datenbankfeld einfügt, wird das Band immer auf die Höhe vom Subreport gestretcht. Entfernt man den Subreport, wird das Band richtig in der Höhe justiert. IMHO ist das falsch und könnte (müsste) sicher geändert werden.

Evtl. meinst du ja das Gleiche mit
MacWomble hat geschrieben:Die Subreports kennen die übergeordnete Tabellenzeile nicht.
???

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Lazreport mehrspaltig

Beitrag von MacWomble »

Ich meinte bzw.hatte es wie folgt verstanden:

Das Detailband mit den Subreports wird normalerweise 1x pro Datensatz aufgerufen.
(Dies geschieht aber aktuell nicht, da die Subreports den Zeiger auf den letzten Datensatz stellen!)

Jedes mal sollten dann die zugehörigen Subreports ausgegeben werden. Links die Adresse (und nur eine) , rechts die zugehörigen Nummer(n).
Das wiederholt sich dann, bis alle Adressen durch sind.

Nun haben aber die Subreports (SR) ja keine Kenntnis davon, welcher Detailsatz vom o.g. Detailband eben verarbeitet wird ... das aber wäre Voraussetzung, um jeweils im SR1 nur eine Adresse sowie im SR2 die dazu passenden Nummern auszugeben.

Lässt man einen Subreport weg, funktioniert das ganze übrigens auch nicht, da man dann nichts nebeneinander legen kann.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Lazreport mehrspaltig

Beitrag von Michl »

Ich hatte mir noch überlegt, wenn nur zwei Subreports eine Höhe eines Bandes vorgeben können, müssen statt einem DatenTextfeld und einem Subreport halt zwei Subreports die Textfelder auf dem Band liefern.
Habe es eben getestet und sollte jetzt eigentlich so funktionieren, wie du es willst.

Auf dem Report gibt es ein stretched DetailDataBand, welches die Zahl der Datensätze durch die Adressen Query bekommt. Darauf leigen zwei Subreport. Links ein Subreport, der die Adresse liefert. Rechts ein Subreport der ... Telefonnummern mit Beschreibungen etc. liefert.

Auf dem Subreport1 habe ich nur ein MasterDataBand liegen, der mit einem Virtual Dataset mit Count 1 verbunden ist (es wird je Report.DetailDataBand-Abfrage nur 1 Eintrag zurückgeliefert). Auf dem Band liegt ein stretched Datenbankfeld vom Query Adressen und liefert die Adresse.

Auf dem Subreport2 habe ich ein MasterDataBand liegen, der mit einem Virtual Dataset mit Count 1 verbunden ist (es wird je Report.DetailDataBand-Abfrage nur 1 Eintrag zurückgeliefert). Das Band habe ich leer gelassen.
Zusätzlich liegt auf Subreport2 ein stretched DetailDataBand, welches die Zahl der Datensätze durch die Telefon Query bekommt. Darauf liegen zwei Felder, die Telefoneinträge zurückliefern.

Test mit Report wieder anbei.
Dateianhänge
LazReportUmgestellt.zip
(331.17 KiB) 84-mal heruntergeladen
VirtualDataset1.png

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Lazreport mehrspaltig

Beitrag von MacWomble »

Code: Alles auswählen

Du löst mit dem VirtualDataset quasi die von mir bemängelte fehlende Information des aktuellen Datensatzes im Subreport, was ich recht gut finde.
 
Folgendes habe ich geschrieben, als dein letzter Eintrag noch nicht online war - ich schaue mir deine Lösung an!


Ich denke, dein früherer Lösungsansatz ging in die richtige Richtung:

Master: Akte
Detail: TempAdressen
Spezial: Nummern :twisted:

Sinnvoll lösbar scheint mir das ganze nur, indem ich die Adressen in eine temporäre Tabelle schreibe, dort zwei Memos anfüge und
dann in Schleifen das ganze mit den Nummernbezeichnungen und Nummern in den Memos ergänze:

Code: Alles auswählen

  Result := '';
  QueryAdressen.First;
 While not QueryAdressen.EOF do
 begin
   QueryTelefon.close;
   QueryTelefon.SQL.Text:=
      'SELECT tel_id, adr_id, number FROM telefon ' +
      'WHERE telefon.adr_id = ' + QueryAdressen.fieldbyname('adr_id').AsString +' '+
      'ORDER BY number ASC;';
 
     QueryTelefon.Open;
     while not QueryTelefon.EOF do
     begin
       if NummernBlock = '' then
      begin
         NummernartBlock := QueryTelefon.FieldByName('numbertype').AsString;
         NummernBlock := QueryTelefon.FieldByName('number').AsString;
     end 
     else
     begin
         NummernartBlock := NummernartBlock + LineEnding + QueryTelefon.FieldByName('numbertype').AsString;
         NummernBlock := NummernBlock + LineEnding + QueryTelefon.FieldByName('number').AsString;
     end;
     QueryTelefon.Next;
 
     QueryTemp.Insert {.... Felder aus Adressen und die beiden Blöcke}
 
  end;
  end;   


Jetzt kann QueryTemp als Detail auf einem Detailband für den Report verwendet werden:

Code: Alles auswählen

__________________________________________________________________________
Adress(block)                  NummernartBlock   NummernBlock
__________________________________________________________________________


Diese Lösung funktioniert zwar, ist aber meines Erachtens nicht optimal. Solch einfache Sachen erwartet man schon von einem Reportgenerator.
Dies ist nicht abwertend sondern anregend zu verstehen! :wink:
Wird LazReport eigentlich noch aktiv betreut? - muss ich mich mal schlau machen .... :roll:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Lazreport mehrspaltig

Beitrag von MacWomble »

Ich habe deine Lösung eben getestet.

Genau so habe ich mir das vorgestellt. Funktioniert so wie es soll! :D

Herzlichen Dank!

PM: Ich habe das nun mit meinen Realdaten versucht und dabei noch folgende Beobachtungen gemacht:

- In den Subreports sollte man über die PageOptions die Seitenränder deaktivieren
- Im Hauptreport sollte im Detailband das Stretching deaktiviert sein
- Im zweiten Subreport sollte der Master nach unten verschoben werden, damit man oben links sauber mit den Subdetails anfangen kann

Wenn man diese Punkte nicht beachtet, wird es schwierig unterschiedliche Subreports sauber zu platzieren.

Ansonsten funktioniert das alles jetzt wunderbar, auch in meiner Anwendung.
So sieht das dann aus:
MDS.png
Zuletzt geändert von MacWomble am Do 7. Dez 2017, 07:26, insgesamt 2-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

Beitrag von Michl »

Schön, daß das jetzt passt. Sieht gut aus und danke für die Rückmeldung!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Lazreport mehrspaltig

Beitrag von af0815 »

MacWomble hat geschrieben:Wird LazReport eigentlich noch aktiv betreut? - muss ich mich mal schlau machen .... :roll:

BTW: fpReport wird 'gerade' im trunk von fpc und Lazarus als alternative neu gemacht, hat die Grundfeatuers, soll aber die Einschränkungen von lazReport nicht haben. Es ist noch im ENtwicklung, daher noch nicht bim stable drinnen. Hat den Vorteil, das Reportengine und Renderer getrennt sind.
Langfristig wird das, so wie es aussieht, der Nachfolger von LazReport sein. Das bei LazReport noch viel geändert wird, wage ich zu bezweifeln, nachdem das (weiterentwickelte) Original ein kostenpflichtiges Produkt geworden ist.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

Beitrag von MacWomble »

fpReport macht bis jetzt einen guten Eindruck, aber ob es schon für den Einsatz beim Anwender reicht ...

Graeme arbeitet da ja heftig dran, das ist sehr vielversprechend.

Wäre denn das hier geschilderte Problem schon lösbar gewesen?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

Beitrag von af0815 »

Soweit ich die Entwicklung aktuell überblicke, nein, da ich bis jetzt noch keine eingelagerten Subreports gesehen habe, wie sie hier in der Lösung verwendet werden.

Andreas

Edit:
siehe https://forum.lazarus.freepascal.org/in ... c=31191.30 steht es auf der ToDo Liste

Code: Alles auswählen

Todo:
- XML
- Remove freetype dependency.
- subreport.
- crosstab.
- chart support.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

Beitrag von MacWomble »

Muss ja nicht mit Subreport sein, das ist eher ein Problem von LazReport, da geht das nicht anders zu lösen.

Was benötigt wird, ist ein Subdetail neben dem Detail

Und noch eine Frage: läuft fpReport auch unter Linux?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten