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. 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. Bild 1: Grundlage für die Beispiele dieses Artikels: ein Bericht mit Artikeln, Einzelpreisen und Lagerbeständen. 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). 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 txt- WertLagerbestand hinzu, das den folgenden Ausdruck für die Eigenschaft Steuerelementinhalt verwendet: Bild 3: 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. Bild 2: Hinzufügen eines Feldes zur Berechnung des Wertes der Artikel im Lager Seite 2
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: 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). 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. Bild 6: Summe der gelagerten Artikel und ihrer Preise 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. Bild 7: Entwurf des Berichts mit Summen im Berichtsfuß 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 ge- Seite 3
Etwas einfacher gelingt es daher, wenn Sie die Berechnung direkt über die Datenherkunft beziehen, in diesem Fall also über die Abfrage qrywertlagerbestand. Bild 8: Summen im Berichtsfuß auf Basis von Berechnungen in der Abfrage Der Entwurf des Berichts rptartikel- MitPreisUndBestand_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): =Summe([WertLagerbestand]) füllt (siehe Bild 7). Sie brauchen diesen Eigenschaftswert nur noch in den folgenden Ausdruck zu ändern: =Summe(Lagerbestand) Laufende Summe Der Grund ist, dass wir im Seitenfuß lediglich auf die laufende Summe zugreifen können. Für eine lau- 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) Bild 9: Eine laufende Summe erhalten Sie in einem weiteren Feld, wenn der Steuerelementinhalt übereinstimmt und die Eigenschaft Laufende Summe gesetzt ist. 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. Bild 10: Bericht mit laufenden Summen am rechten Seitenrand Seite 4
fende 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. Bild 11: Der Seitenfuß verarbeitet die Formeln aus dem Berichtsfuß nicht wie erwartet. 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 Bild 12: Referenzieren der Steuerelemente mit der laufenden Summe ist wenig überzeu- gend, 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. 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. Sollten Sie die laufende Summe je Datensatz im Detailbereich nicht benötigen, können Sie die beiden Felder txtlagerbestand_laufendesumme und txt- WertLagerbestand_LaufendeSumme auch einfach ausblenden. Bild 13: Laufende Summe im Seitenfuß, aber nicht im Detailbereich 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. Seite 5
Ü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). 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. Bild 14: Ausblenden des Seitenfußes auf der letzten Seite 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. Bild 15: Gruppensumme im Entwurf 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. Zusammenfassung und Ausblick Bild 16: Gruppenfuß mit Gruppensumme 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. Seite 6