Home > Artikel > Ausgabe 3/2012 > Rechnen in Berichten

Rechnen in Berichten

  PDF ansehen

  Download PDF und Beispieldatenbank

Berichte bieten die gleichen Möglichkeit zur Berechnung von Werten wie Formulare – und noch einige mehr. Im Gegensatz zu Formularen bieten Berichte die Möglichkeit, eine laufende Summe zu bilden oder Berechnungen über komplette Gruppierungen durchzuführen. In diesem Artikel lernen Sie die Grundlagen zum Rechnen in Berichten.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1203_RechnenInBerichten.mdb.

Datensatzweise berechnen

Wie in Formularen können Sie auch innerhalb eines Datensatzes eines Berichts Berechnungen durchführen. Dies gelingt entweder direkt in der zugrunde liegenden Abfrage oder aber durch Angabe der Berechnungsformeln in den Steuerelementen zur Anzeige des Ergebnisses.

Als Grundlage für die Beispiele dieses und der folgenden Abschnitte dient ein Bericht, der die Tabelle tblArtikel beziehungsweise eine darauf aufbauende Abfrage als Datenherkunft verwendet (siehe Bild 1).

Grundlage für die Beispiele dieses Artikels: ein Bericht mit Artikeln, Einzelpreisen und Lagerbeständen.

Bild 1: Grundlage für die Beispiele dieses Artikels: ein Bericht mit Artikeln, Einzelpreisen und Lagerbeständen.

Berechnung im Textfeld

Im ersten Beispiel soll der Bericht den Wert der gelagerten Artikel pro Artikel ausgeben (siehe Bild 3). Dazu fügen Sie dem Bericht im Detailbereich ein Steuelement etwa namens txtWertLagerbestand hinzu, das den folgenden Ausdruck für die Eigenschaft Steuerelementinhalt verwendet:

Eine weitere Zeile zeigt das Produkt aus Einzelpreis und Lagerbestand an.

Bild 2: Eine weitere Zeile zeigt das Produkt aus Einzelpreis und Lagerbestand an.

=Einzelpreis*Lagerbestand

Die Entwurfsansicht des Berichts sieht nun wie in Bild 2 aus. Gegebenenfalls müssen Sie noch die Eigenschaft Format des Steuerelements txtWertLagerbestand auf Währung einstellen.

Hinzufügen eines Feldes zur Berechnung des Wertes der Artikel im Lager

Bild 3: Hinzufügen eines Feldes zur Berechnung des Wertes der Artikel im Lager

Berechnung per Abfrage

Das gleiche Ergebnis erhalten Sie, wenn Sie eine Abfrage namens qryWertLagerbestand erstellen (siehe Bild 4). Das berechnete Feld WertLagerbestand enthält die folgende Berechnungsformel:

Abfrage zur Berechnung des Werts des Lagerbestands je Artikel

Bild 4: Abfrage zur Berechnung des Werts des Lagerbestands je Artikel

WertLagerbestand: [Einzelpreis]*[Lagerbestand]

Der Bericht rptArtikelMitPreisUndBestand_GesamtAbfrage verwendet diese Abfrage als Datenherkunft. Er ist genauso aufgebaut wie der Bericht aus dem vorherigen Beispiel, verwendet aber statt eines Textfeldes mit einer Berechnungsformel gleich das in der Abfrage berechnete Feld (siehe Bild 5).

Bericht mit Berechnungsergebnis aus einer Abfrage

Bild 5: Bericht mit Berechnungsergebnis aus einer Abfrage

Gesamtsumme für einen Bericht

Als nächstes soll der Bericht auf der letzten Seite die Gesamtsummen der gelagerten Artikel und des Warenwerts ausgeben. Dazu bietet sich der Berichtsfuß-Bereich an, den Sie mit einem Rechtsklick auf einen der Bereichsköpfe und anschließende Auswahl des Kontextmenüeintrags Seitenkopf/-fuß in der Entwurfsansicht des Berichts hinzufügen.

Den Berichtskopfbereich lassen Sie verschwinden, indem Sie seine Höhe auf 0cm einstellen (entweder durch Setzen der Eigenschaft oder durch Ziehen mit der Maus). Gleiches erledigen Sie für den Seitenfußbereich des Berichts.

Das Ergebnis soll wie in Bild 6 aussehen. Um dieses zu erreichen, führen Sie zwei Schritte durch. Als Erstes legen Sie direkt unter dem Feld Lagerbestand im Bereich Berichtsfuß ein neues Steuerelement namens txtLagerbestandSumme an.

Summe der gelagerten Artikel und ihrer Preise

Bild 6: Summe der gelagerten Artikel und ihrer Preise

Wenn Sie das entsprechende Steuerelement aus dem Detailbereich kopieren und im Berichtsfuß wieder einsetzen, hat dieses gleich die richtige Höhe und Breite, außerdem ist die Eigenschaft Steuerelementinhalt bereits mit dem Wert Lagerbestand gefüllt (siehe Bild 7). Sie brauchen diesen Eigenschaftswert nur noch in den folgenden Ausdruck zu ändern:

Entwurf des Berichts mit Summen im Berichtsfuß

Bild 7: Entwurf des Berichts mit Summen im Berichtsfuß

=Summe(Lagerbestand)

Gleiches führen Sie für das Feld txtWertLagerbestand durch: Kopieren Sie es in den Berichtsfuß, nennen Sie es txtWertLagerbestandSumme und ändern Sie den Wert der Eigenschaft Steuerelementinhalt in den folgenden Ausdruck:

=Summe([Einzelpreis]*[Lagerbestand])

Beachten Sie, dass Sie nicht den folgenden Ausdruck verwenden dürfen:

=Summe(txtWertLagerbestand)

Auch wenn dies auf den ersten Blick die Summe der Werte im Feld txtWertLagerbestand liefern sollte: Es gelingt hiermit nicht. Sie dürfen in der Summe-Funktion ausschließlich Felder der Datenherkunft referenzieren, keine Steuerelemente. Anderenfalls liefert das Textfeld den Wert #Fehler! als Ergebnis.

Etwas einfacher gelingt es daher, wenn Sie die Berechnung direkt über die Datenherkunft beziehen, in diesem Fall also über die Abfrage qryWertLagerbestand.

Der Entwurf des Berichts rptArtikelMitPreisUndBestand_GesamtAbfrage_Summe zeigt, dass Sie in diesem Fall nur noch den folgenden Ausdruck als Steuerelementinhalt des Feldes txtWertLagerbestandSumme einfügen müssen (siehe Bild 8):

Summen im Berichtsfuß auf Basis von Berechnungen in der Abfrage

Bild 8: Summen im Berichtsfuß auf Basis von Berechnungen in der Abfrage

=Summe([WertLagerbestand])

Laufende Summe

Der Grund ist, dass wir im Seitenfuß lediglich auf die laufende Summe zugreifen können. Für eine laufende Summe benötigen Sie ein eigenes Textfeld im Detailbereich des Berichts. Dieses nennen Sie txtLagerbestand_LaufendeSumme und txtWertLagerbestand_LaufendeSumme

Die Felder werden wie in Bild 9 im Detailbereich platziert und erhalten den Namen des Feldes als Steuerelementinhalt, dessen laufende Summe sie anzeigen sollen. Damit statt des jeweiligen Feldwertes die laufende Summe angezeigt wird, brauchen Sie nur noch die Eigenschaft Laufende Summe des Steuerelements auf den Wert Über Alles einzustellen. Das Ergebnis entspricht genau den Erwartungen – siehe Bild 10.

Eine laufende Summe erhalten Sie in einem weiteren Feld, wenn der Steuerelementinhalt übereinstimmt und die Eigenschaft Laufende Summe gesetzt ist.

Bild 9: Eine laufende Summe erhalten Sie in einem weiteren Feld, wenn der Steuerelementinhalt übereinstimmt und die Eigenschaft Laufende Summe gesetzt ist.

Bericht mit laufenden Summen am rechten Seitenrand

Bild 10: Bericht mit laufenden Summen am rechten Seitenrand

Summe im Seitenfuß

Gegebenenfalls möchten Sie auch noch die Summe der Artikelbestände und -werte im Fußbereich einer jeden Seite unterbringen. Versuchen wir es doch auf die gleiche Weise wie beim Berichtsfuß, indem wir die beiden Textfelder aus dem Berichtsfuß einfach in den Seitenfuß kopieren. Das Ergebnis ist wenig überzeugend, wie Bild 11 zeigt. Was haben wir falsch gemacht? Nun: Eigentlich nichts. Der Seitenfußbereich liefert schlicht und einfach keine Summen. Aber das ist kein Problem: Wir können vom Seitenfuß aus auf den letzten ausgegebenen Wert der Felder mit den laufenden Summen zugreifen.

Der Seitenfuß verarbeitet die Formeln aus dem Berichtsfuß nicht wie erwartet.

Bild 11: Der Seitenfuß verarbeitet die Formeln aus dem Berichtsfuß nicht wie erwartet.

Dabei tragen Sie als Steuerelementinhalt der beiden Felder zur Anzeige der Zwischensummen im Seitenfuß einfach die Namen der Steuerelemente mit den laufenden Summen ein, also =[txtLagerbestand_LaufendeSumme] und =[txtWertLagerbestand_LaufendeSumme] (siehe auch Bild 12). Damit erhalten Sie nun auch die Zwischensummen am Seitenende.

Referenzieren der Steuerelemente mit der laufenden Summe

Bild 12: Referenzieren der Steuerelemente mit der laufenden Summe

Sollten Sie die laufende Summe je Datensatz im Detailbereich nicht benötigen, können Sie die beiden Felder txtLagerbestand_LaufendeSumme und txtWertLagerbestand_LaufendeSumme auch einfach ausblenden.

Für die Abbildung der laufenden Summe im Seitenfuß reicht es, wenn die beiden Steuerelemente überhaupt im Detailbereich vorhanden sind. Dies sieht in der Seitenansicht dann wie in Bild 13 aus.

Laufende Summe im Seitenfuß, aber nicht im Detailbereich

Bild 13: Laufende Summe im Seitenfuß, aber nicht im Detailbereich

Übrigens erscheint die Seitensumme nun auch noch auf der letzten Seite des Berichts, der ja auch bereits die Gesamtsumme im darüber liegenden Berichtsfuß anzeigt. Um den Seitenfuß auf der letzten Seite des Berichts auszublenden, brauchen Sie allerdings auch nur eine einzige Eigenschaft des Berichts zu ändern. Dabei handelt es sich um die Eigenschaft Seitenkopf, die Sie auf den Wert Außer Berichtsfuß einstellen (siehe Bild 14).

Ausblenden des Seitenfußes auf der letzten Seite

Bild 14: Ausblenden des Seitenfußes auf der letzten Seite

Summen von Gruppierungen

Fehlt noch eine Art von Summen, nämlich die Bereichssumme von Gruppierungen. Dazu erweitern wir den Bericht um eine Gruppierung nach dem Feld Kategorie. Ziel ist es, die Anzahl und Werte der Artikel je Kategorie abzubilden. Dazu fügen Sie einfach eine Gruppierung nach dem Feld KategorieID hinzu.

Unter Access 2007 und neuer erledigen Sie dies in dem Bereich am unteren Rand des Access-Fensters. Legen Sie fest, dass die Gruppierung einen Kopfzeilenbereich und einen Fußzeilenbereich anzeigen soll. Bringen Sie die dadurch eingeblendeten Bereiche im Bericht auf eine entsprechende Höhe und fügen Sie einige Steuerelemente hinzu.

Den Kopfzeilenbereich statten Sie mit dem Kombinationsfeld KategorieID aus, das automatisch angelegt wird, wenn Sie das als Nachschlagefeld definierte Tabellenfeld KategorieID in den Berichtsentwurf ziehen. Im Bericht wird dieses jedoch als normales Textfeld angezeigt.

Wichtiger ist jedoch der Fußzeilenbereich. Wenn Sie bereits die Steuerelemente für die Summe im Berichtsfuß angelegt haben, brauchen Sie diese lediglich noch zu kopieren und im Kopfzeilenbereich der Gruppierung nach dem Feld KategorieID einzufügen (siehe Bild 15). Das war es – das Ergebnis zeigt Bild 16.

Gruppenfuß mit Gruppensumme

Bild 15: Gruppenfuß mit Gruppensumme

Gruppensumme im Entwurf

Bild 16: Gruppensumme im Entwurf

Zusammenfassung und Ausblick

Dies waren die wesentlichen Grundlagen zum Ausstatten von Berichten mit Berechnungen. Komplexere Berechnungen wirken sich lediglich auf die Berechnungsformeln aus. Es gibt sicher noch Spezialfälle, die durch diesen Artikel nicht abgedeckt wurden – auf diese gehen wir jedoch in späteren Artikeln ein.