Berichte bearbeiten
Inhaltsverzeichnis |
Einführung
Der bei easyLogic mitgelieferte Bericht-Editor nutzt List & Label (ein Produkt der Firma combit). Daher ist der erste Anlaufpunkt für Dokumentation und Hilfestellung das Handbuch zum Produkt.
Dieses Dokument soll dazu dienen, häufig benötgte Arbeitsweisen im Zusammenspiel mit TRENZ easyLogic zu erläutern.
Da in jedem easyLogic-Projekt der Zugriff auf bestimmte Funktionen einschränkbar ist, kann es sein, dass Sie keinen Zugriff auf die Berichteverwaltung haben.
Im Normalfall sollten Sie jedoch unter dem Menü-Punkt Einrichtung den Eintrag Berichte finden.
In dem nun erscheinenden Fenster können Sie die grundlegenden Einstellungen für Berichte verändern und ggf. neue Berichte anlegen.
Wichtig ist in diesem Zusammenhang die Unterscheidung zwischen den Berichttypen Card und List. Mit einer Card werden die Details zu einem einzelnen Datensatz ausgedruckt, während bei einer List die Möglichkeit gegeben ist, einen untergeordneten ContainerTyp in Form einer Tabelle darzustellen.
Arbeiten mit Werten aus Feldern
Der Zugriff auf die in easyLogic verwendeten Felder funktioniert über den sehr mächtigen Dialog von L&L, der beim Doppelklick auf ein Feld oder eine Tabellenzelle erscheint.
Hier lassen sich neben der reinen Wertzuweisung auch komplexe logische Ausdrücke und erweiterte Formatierung verwenden
Einfache Wertübergabe
Die Werte des Haupt-ContainerTyps lassen sich über die Syntax Master.[Name_des_Feldes] erfragen. So liefert z.B. Master.Nachname + ", " + Master.Vorname den Wert "Klose, Björn", wenn unser Haupt-ContainerTyp der Mitarbeiter ist.
In einer Tabelle haben wir auch Zugriff auf den untergeordneten ContainerTyp und dessen Felder, d.h. mit Details.Zeitaufwand erhalten wir den Zeitwert eines Zeiterfassungseintrages und mit Details.Projekt.Name erhalten wir z.B. den Namen eines Projekts, dass in einem Zeiterfassungseintrag verknüpft wurde.
Wichtig! Die untergeordnete Verknüpfung nach dem Schema Details.[an Unter-ContainerTyp geknüpfter Wert].[Feld-Name] ist auf die 2. Ebene beschränkt. D.h. wenn unser Unter-ContainerTyp der Zeiterfassungseintrag ist, könnnen wir noch auf das dort zugeordnete Projekt zugreifen, aber z.B. nicht auf den Kunden, der wiederum diesem Projekt zugeordnet ist.
Dies führt dazu, dass bei der Erstellung eines Berichts oftmals Informationen nicht zugreifbar sind.
Hierzu gibt es 2 grundsätzliche Lösungsansätze:
- die benötigten Werte werden per Trigger in versteckte Felder des Containers geschrieben, wann immer dieser verändert wird (schnell, flexibel)
- die Datenquelle für den Bericht wird per SQL-Abfrage generiert (aufwändig, unflexibel, schwer zu pflegen)
Der 2. Fall ist besonders dann nicht zu empfehlen, wenn ein Bericht schon mit vielen Feldern und Formeln besteht, da sich durch die neue Datenquelle auch die Zugriffsstruktur auf die Daten verändert. In diesem Fall währen die Daten nicht mehr per Maste.ABC und Details.XYZ ansprechbar.
Arbeiten mit Variablen
In List & Label gibt es 2 Arten von Variablen: Summen- und Benutzervariablen.
Summenvariablen
Die Summenvariablen sind sehr beschränkt einsetzbar, können aber z.B. die Unterscheidung zwischen Gesamt- und Seitensummen erleichtern.
Typischer Anwendungsfall währe es, die Summe von Preisen zu ermitteln:
Wir definieren die Summenvariable @Gesamtpreis und übergeben ihr die "Formel" Details.Preis. Je nachdem, ob wir den Haken bei Seitensumme setzen, werden alle ODER die Einträge der jeweiligen Seite aufsummiert.
Wichtig im Zusammenhang mit jeglicher Berechnung in L&L ist die Unterscheidung zwischen den Datentypen. Wenn ein Feld "Preis" z.B. fälschlicherweise als varchar(255) [Textfeld] definiert wurde, kann damit nicht gerechnet werden. Die Lösung ist einfach:
val(Details.Preis) liefert uns den numerischen Wert von Textfeldern
In vielen Fällen läßt sich die Nutzung der Summenvariablen auch vermeiden, indem man einfach die Sum()-Formel verwendet.
Benutzervariablen
Diese Variablen lassen sich für nahezu alles verwenden. Sie sind vor allem für das Speichern von längeren Bedingungsformeln sinnvoll, die auf mehrere Datenzeilen oder Felder angewendet werden sollen. Ein Beispiel dazu finden Sie in einem späteren Kapitel.
Einschränkung der Datenanzeige
Nehmen wir an, Sie wollen eine große Menge an Datensätzen in einem Bericht ausdrucken, z.B. die Zeiterfassungseinträge zu einer Person. Typischerweise währe in diesem Fall Person ihr Hauptcontainer, und Zeiterfassung ihr zugeordneter Eintrag.
Der Bericht selbst hätte nun im Kopf des Dokuments die Angaben zur Person und darunter als Tabelle die einzelnen Einträge.
Um die Anzeige der Daten in diesem Bericht zu beschränken, gibt es 3 grundsätzliche Möglichkeiten.
1. Fest definierte Auswahlkriterien in der Tabelle
Sie nach erfolgreicher Erstellung einer Datentabelle für jede Datenzeile ein Darstellungskriterium festlegen. Dazu drücken sie den gleichnamigen Kopf unterhalb der Liste der einzelnen Datenfelder einer Zeile. An dieser Stelle muss ein Ausdruck formuliert werden, der true oder e false als Ergebnis haben kann.
Beispiel: Überprüfung auf einen Wert
Wenn der Container Zeiterfassung z.B. ein Feld Textfeld "Ort" enthält, und Sie nur die Einträge sehen möchten, die den Wert Büro enthalten, wählen Sie als Ausdruck
Details.Ort = "Büro"
Wenn Sie nur die Einträge von heute erhalten möchten, wählen Sie
Date$(Details.erfdat, "%d.%m.%y") = Date$(Today(), "%d.%m.%y") Die vorherige Umwandlung in einen String mit Datumsformat ist notwendig, da sonst auch die Uhrzeit mit berücksichtigt wird.
Wenn Sie nur Einträge von den nächsten 7 Tagen benötigen, wählen Sie
DateINRange(Details.erfdat,Today(),AddDays(Today(),7))
2. Zusammenfassen mehrerer Einträge
Wenn Sie die Einträge gruppieren wollen, können Sie dazu den Gruppenkopf bzw. Gruppenfuß nutzen. Für beide lassen sich unabhängig von den Datenzeilen andere Felder ein- bzw. Ausblenden.
Wichtig ist in diesem Zusammenhang vor allem die Angabe des sog. "Wechselkriteriums". Bei unserem o.g. Beispiel der Zeiterfassung könnte dies u.U. der "Ort" oder auch das "Projekt" sein.
Der Datentyp des hier genutzten Feldes ist egal, wichtig ist nur, dass es existiert:
Details.Projekt.Name oder Details.Ort reicht an dieser Stelle aus
Spezialfall: Ausblenden der einzelnen Datenzeilen
Sollten Sie einmal nur die gemeinsamen Eigenschaften einer Gruppe benötigen, können Sie die einzelnen Datenzeilen auch ausblenden.
Dazu wählen Sie die Tabelle in der Hauptansicht als ganzes aus, und setzen in den Eigenschaften, die links unten im Hauptfenster sichtbar sind, bei Zeilenoptionen > Datenzeilen > Datenzeilen unterdrücken den Wert auf True [Ja]
In diesem Moment wird es für Sie u.U. notwendig, bestimmte Werte zu berechnen, z.B. die Summe der Zeiten aus einer Gruppe (in unserem Beispiel).
Wichtig ist in diesem Moment, die Logik von List & Label zu verstehen, d.h. die Summe der Einträge einer Gruppe kann erst nach dem Durchlaufen der Einträge gebildet werden.
Somit müssen alle Berechnungen zu einer Gruppe in deren Gruppenfuß erfolgen, da im Gruppenkopf noch keine Informationen über die betroffenen Datensätze bekannt sind.
Typische Beispiele für solche Berechnungen sind Sum() für die Summe und Avg() für den Durchschnitt. Wenn Sie eine Information angeben wollen, die in allen Datensätzen der Gruppe gleich ist, können sie diese wie gewohnt mit Details.Ort o. ä. ausgeben.
3. Abfragen der Einschränkungen vor dem Ausdrucken des Berichts
Angenommen wir möchten einen Monatsbericht für unsere Zeiterfassung erstellen, können wir die Angabe dazu flexibel machen, indem wir den Benutzer nach dem Monat fragen, für den der Bericht gedruckt werden soll.
Wir nutzen die sog. Benutzervariablen, unter Projekt > Benutzervariablen, und definieren z.B. die folgende Formel für unsere Benutzervariable @Monat:
AskString$ ("Alle Daten für den folgenden Monat ausgeben (mm.yyyy):", false,"03.2008")
Um das Darstellungkriterium nicht an jeder Stelle neu formulieren zu müssen, speichern wir die Formel zur Überprüfung ebenfalls in einer Benutzervariable, z.B. @Test
Date$(Date("2."+@Monat),"%m.%y") = Date$(Today(),"%m.%y")
Nun muss in den einzelnen Zeilen nur @Test als Kriterium angegeben werden. Änderungen sind somit später nur an einer Stelle nötig.
Sortierung der Daten
Es gibt 2 verschiedene Möglichkeiten die Daten zu sortieren.
- Direkt in L&L
- Mithilfe der Spalte: OrderBy in der Tabelle Berichte