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

Rund um die LCL und andere Komponenten

Re: Lazreport mehrspaltig

Beitragvon Michl » 5. Dez 2017, 23:26 Re: Lazreport mehrspaltig

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; 
Michl
 
Beiträge: 2192
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon MacWomble » 6. Dez 2017, 00:00 Re: Lazreport mehrspaltig

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.
MacWomble
 
Beiträge: 389
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.00 (FPC 3.1.1) | 
CPU-Target: 32/64 Nit
Nach oben

Beitragvon Michl » 6. Dez 2017, 08:41 Re: Lazreport mehrspaltig

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2192
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon MacWomble » 6. Dez 2017, 08:52 Re: Lazreport mehrspaltig

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
 
Beiträge: 389
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.00 (FPC 3.1.1) | 
CPU-Target: 32/64 Nit
Nach oben

Beitragvon MacWomble » 6. Dez 2017, 09:08 Re: Lazreport mehrspaltig

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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von MacWomble am 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.
MacWomble
 
Beiträge: 389
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.00 (FPC 3.1.1) | 
CPU-Target: 32/64 Nit
Nach oben

Beitragvon Michl » 6. Dez 2017, 13:55 Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

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; 
Michl
 
Beiträge: 2192
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon af0815 » 7. Dez 2017, 09:38 Re: Lazreport mehrspaltig

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).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon MacWomble » 7. Dez 2017, 12:11 Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

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.
MacWomble
 
Beiträge: 389
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.00 (FPC 3.1.1) | 
CPU-Target: 32/64 Nit
Nach oben

Beitragvon af0815 » 8. Dez 2017, 17:31 Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

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).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon MacWomble » 8. Dez 2017, 17:42 Re: [gelöst] Lazreport mehrspaltig Detail-Subdetail Side by

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.
MacWomble
 
Beiträge: 389
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.00 (FPC 3.1.1) | 
CPU-Target: 32/64 Nit
Nach oben

• Themenende •
Vorherige

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried