LazReport (gruppierter Report)

Rund um die LCL und andere Komponenten
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

LazReport (gruppierter Report)

Beitrag von charlytango »

Hallo!

Irgendwie lässt mich der LazReport verzweifeln.
Jetzt wäre das bei weitem nicht der erste banded Report mit dem ich es zu tun habe und in den Demos von LazReport hab ich tolle Fähigkeiten entdeckt.

Was mich im Moment zu Weißglut bringt ist ein einfacher Report mit Gruppensummen und Gesamtsummen für den ich kein Beispiel gefunden habe.
Diverse Dokus von FreeReport waren auch keine Hilfe.

Üblicherweise erstellt man einen Gruppenheader, einen Gruppenfooter und ein Datendetail.
Bedingung in den Gruppenheader und Summierung in den Footer und den Rest macht der Reportgenerator.
Leider bin ich f LazReport offensichtlich zu dämlich, denn das klappt nicht, daher bitte ich um Hilfe.

Als Muster dient eine Bar mit verkauften Getränken innerhalb eines Zeitraums.
Der Report soll nach Monat und Getränk gruppieren und die verkaufte Anzahl und den Umsatz pro Getränk sowie einen Gesamtumsatz ermitteln.

vorliegende Daten

Code: Alles auswählen

 
Getränk  Monat    Jahr    Datum     Preis  Stück
Wein      1      2016   01.01.16   1,5     3
Wasser    1      2016   01.01.16   0,9     3
Bier      1      2016   01.01.16   2,5     6
Wein      1      2016   02.01.16   1,5     5
Wasser    1      2016   02.01.16   0,9     1
Bier      1      2016   02.01.16   2,5     5
Bier      1      2016   03.01.16   2,5     8


Daten sortiert und aufbereitet:

Code: Alles auswählen

Getränk   Monat   Jahr    Datum    Preis   Stück  Summe
Bier      1      2016   01.01.16   2,5     6       15
Bier      1      2016   02.01.16   2,5     5       12,5
Bier      1      2016   03.01.16   2,5     8       20
Wasser    1      2016   01.01.16   0,9     3        2,7
Wasser    1      2016   02.01.16   0,9     1        0,9
Wein      1      2016   01.01.16   1,5     3        4,5
Wein      1      2016   02.01.16   1,5     5        7,5


gewünschter Report:

Code: Alles auswählen

Monat: 1
 
Bier         19   47,5
Wasser        4    3,6
Wein          8   12
____________________
Summe             63,1


Frage:
- welche Bandtypen werden wie eingesetzt?
- welche Bedingungen zu welchen Bands (z.B. in einem GroupBand)?
- ist eine besondere Aufbereitung bzw Sortierung der Daten nötig?

Wie stelle ich das sauber an dass da ein gruppierter Report heraus kommt

Danke im Voraus

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

Re: LazReport (gruppierter Report)

Beitrag von Michl »

Ich nutze LazReport in zwei kleineren Anwendungen, habe bisher alle Aufgaben dazu lösen können, der Profi für LazReport bin ich aber nicht.

Wie ich das umsetzen würde:

- Daten in einer Datenbank vorhalten
- ein TfrDBDataSet mit einem Query verbinden, das die Daten bereitstellt

charlytango hat geschrieben:welche Bandtypen werden wie eingesetzt?

Die Tabellen stelle ich zumeist so dar:
- oben Master header (Bezeichnungen)
- darunter Master data (Tabelleneinträge mit unbekannter Zahl an Einträgen)
- unten Master footer (Summe)

Nun kannst du z.B. einfach im Reportdesigner mittels "insert rectangle object" (links, zweiter Button von oben) ein Feld auf das Master data - Band legen. Es wird der Text editor vom Reportdesigner geöffnet. Mit dem zweiten Button von links kannst du ein Field vom Query hinzufügen.

charlytango hat geschrieben:ist eine besondere Aufbereitung bzw Sortierung der Daten nötig?
Nein, sie kommt so raus, wie das Query sie zur Verfügung stellt, es sei denn, du legst da Hand an.

PS1: die Summe kannst du über im Reportdesigner-Text editor berechnen lassen (Skript anklicken und die gewünschten DB-Fields zur Verfügung stellen).
PS2: LazReport ist ein Nachbau vom FastReport, was eine sehr gute Dokumentation hat und zum großen Teil übertragbar ist (sollte eigentlich alle Fragen beantworten): https://www.fast-report.com/public_download/UserManual-GER.pdf

Code: Alles auswählen

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

Antworten