Datenquelle #
Technischer Ablauf #
Die Erzeugung eines Berichts, also eines Ausdrucks, lässt sich am einfachsten in einem kleinen Diagramm veranschaulichen.

Die Daten der Datenbank werden zunächst im Daten-Konfigurator aufbereitet und als Datenquelle den weiteren Verarbeitungsstufen zur Verfügung gestellt. Über das im Designer erstellte Layout (=Berichtsvorlage) und die Datenquellen wird dann der eigentliche Bericht, also der Ausdruck, erzeugt. Ein Layout enthält Platzhalter für die Datenbankvariablen (=Felder), feste Texte, Bilder, Linien, Grafiken usw. und kann durch Scripts mit verschiedenen WENN/DANN-Bedingungen (=IF/Then-Abfragen), also einer Logik, versehen werden. Die Logik kann den Bericht beeinflussen und in Abhängigkeit von Daten oder aber Dialogen, Elemente, die im Layout platziert wurden, beeinflussen. So lässt sich zum Beispiel über ein Script hinterlegen, ob ein Briefkopf immer oder nur beim Faxen ausgegeben werden soll.
Neben den Datenquellen, die vom Daten-Konfigurator erzeugt werden – diese bezeichnen wir als externe Datenquellen – gibt es auch Datenquellen, die direkt im Layout erstellt und gespeichert werden. Diese Datenquellen bezeichnen wir als eingebettete Datenquellen.
Im Layout werden alle Datenquellen gleichwertig verarbeitet, also die externen und die eingebetteten Datenquellen.
Eigebettete Datenquelle #
Der Vorteil der eingebetteten Datenquellen liegt darin, dass diese für den Anwender einfacher zu erstellen sind. Die Datenquellen können über einen Assistenten im Berichts-Designer erzeugt werden, ohne dass man SQL-Kenntnisse besitzen muss. Eingebettete Datenquellen sind immer unabhängig von den angezeigten Daten der Bildschirmmaske. Man kann also mit eingebetteten Datenquellen keine Rechnungen vom angezeigten Datensatz drucken, sehr wohl aber ein Rechnungsausgangsbuch oder eine Etikettenliste, einen Bestellvorschlag, Statistiken und andere Listen.
In eingebetteten Datenquellen lassen sich Abfragedialoge definieren. So kann man bestimmen, dass man vor einer Liste einen Datumsbereich eingeben möchte, wie dies bei einem Rechnungsausgangsbuch sinnvoll ist. Die Abfragedialoge können beliebig komplex sein und mehrere Abfragen gleichzeitig durchführen.
Anhand der Abfragen werden nur Daten vom SQL-Server abgerufen, die der Abfrage-Bedingung entsprechen.

Beispiel einer eingebetteten Datenquelle
Externe Datenquelle #
Die Definition von externen Datenquellen ist den Technikern vorbehalten.
Externe Datenquellen werden im Datenkonfigurator erstellt. Diese haben den Vorteil, dass diese flexibler und durch optimierte Verknüpfungen deutlich schneller sind. Der Nachteil ist, dass die Definition komplizierter und daher nur für technisch versierte Benutzer oder für Benutzer unter Anleitung möglich ist. Externe Datenquellen können sich auf den am Bildschirm angezeigten Datensatz oder eine Selektion (=Treffer) beziehen.

Daten-Konfigurator
Alle Rechnungen, Angebote, Auftragsbestätigungen usw. nutzen interne Datenquellen, da diese leichter für den Endbenutzer konfigurierbar sind.
Die folgende Beschreibung dient als Referenz für alte Formulare, die nicht auf internen Datenquellen beruhen.
Jede Datenquelle wird als “Schlüssel” innerhalb des Daten-Konfigurators definiert. Ein Schlüssel wird über das Kontextmenü (Rechtsklick) angelegt. Der Name des Schlüssels ist dann der interne Name der Datenquelle. Ein sprechender Name kann über die Eigenschaft “FriendlyName” (s.u.) festgelegt werden.
CommandText #
Ein gültiger SQL-Befehl, der genau eine Ergebnismenge liefern muss. Innerhalb des SQL-Befehls kann der Platzhalter $$IdList$$ verwendet werden. Dieser enthält - abhängig vom Bericht - einen SQL-Ausdruck mit den zu druckenden IDs oder auch nur eine einzelne ID. Der Platzhalter kann folgendermaßen verwendet werden:
SELECT KopfNummer, Datum FROM dbo.Rechnung where id in ($$IdList$$)
Im SQL-Befehl können alle benötigten Spalten direkt angegeben werden, wie im vorangehenden Beispiel. Alternativ kann auch mit dem Platzhalter $$SelectFields$$ gearbeitet werden. In den Berichtseigenschaften kann dann zwischen SCHNELL und LANGSAM umgeschaltet werden. Die Liste mit den jeweiligen Feldnamen muss dazu über die Eigenschaften SelectFieldsFast bzw. SelectFieldsSlow hinterlegt werden.
SELECT $$SqlectFields$$ FROM dbo.Rechnung where id in ($$IdList$$)
CommandText.template #
Alternativ zu CommandText kann hierbei auf globale Platzhalter zugegriffen werden. Das können beispielweise Daten aus dem Firmenstamm sein. Diese werden über Prozentzeichen in den SQL-Quelltext eingebettet.
SELECT '%grundwerte.firmenstamm.Firma%' as Firma
Siehe hierzu Kapitel Platzhalter
FriendlyName #
Ein sprechender Name der Datenquelle. Dieser Name wird in den entsprechenden Auswahllisten im Berichtsdesigner angezeigt
Link #
Hierüber wird die Verknüpfung von Haupt- und Detailtabellen definiert. In der Detailtabelle - z.B. Positionen - wird angegeben, mit welchem Feld der Haupttabelle verknüpft werden soll.
Zum Beispiel könnte die Haupt-Datenquelle pKopf und die Detaildatenquelle pPos heißen.
Für die typische Verknüpfung, wie sie in Eulanda verwendet wird (Rechnung / RechnungPos) müsste folgender Link in der Datail-Datenquelle eingetragen werden:
pKopf:KopfId=id
Das heißt das Feld KopfId in der RechnungPos-Tabelle muss auf die Id in der Rechnung-Tabelle zeigen.
TableDef #
wird nicht mehr ausgewertet
SelectFieldsFast und SelectFieldsSlow #
Siehe oben unter CommandText

Definition von externen Datenquellen
Datenquelle verbinden #
Gibt es in Berichten mehrere Datenquellen, so besteht die Möglichkeit, diese zu „verlinken“.
Bei nicht eingebetteten Datenquellen geschieht das im Datenkonfigurator bei der jeweiligen Datenquelle unter dem Punkt „Link“ (Zeichenfolge) in folgender Syntax:
Datenquelle_A:Feld_von_Quelle_B=Feld_von_Quelle_A
Im unteren Beispiel befinden wir uns in der Datenquelle pPos (Rechnungspositionen), und das Feld KopfID dieser Datenquelle wird mit dem Feld ID der Datenquelle pKopf (Rechnungskopf) verlinkt.
Bei Berichten mit eingebetteten Datenquellen kann man die Links per Drag&Drop einfügen. Das Beispiel unten würde im Datenkonfigurator folgendem Link in pZE (Zahlungseingänge) entsprechen.
Bei eingebetteten Datenquellen fällt neben dieser komfortablen Methode der Verlinkung auch noch auf, dass man mit einem Doppelklick auf den Link (die Linie die den Link repräsentiert) weitere Einstellungen erreichen kann.
An dieser Stellen kann man einen weiteren Link hinzufügen – das wird selten benötigt –, den bestehenden Link löschen und – das ist das entscheidende – zwischen zwei Eigenschaften des Links wählen.