Die Ausgabe von Rechnungen mithilfe von Access-Berichten ist grundsätzlich kein Problem – zumindest solange Ihre Rechnung nur eine Seite umfasst. Bei mehrseitigen Berichten kommen Zwischensummen und Überträge ins Spiel, die Access nicht ohne Weiteres unterstützt. Anhand eines praktischen Beispiels möchten wir Ihnen zeigen, wie Sie mit einigen Tricks und Kniffen dennoch zum Ziel kommen.
Damit Sie am Ende einer Seite eine Zwischensumme und im Kopf der Folgeseite einen Übertrag ausgeben können, müssen zunächst alle Werte des Feldes summiert werden, für das Zwischensumme und Übertrag erforderlich sind. Access stellt dazu die Eigenschaft „Laufende Summe“ für Textfelder zur Verfügung. Ist diese Eigenschaft auf „Über alles“ eingestellt, addiert Access für jeden Datensatz den Inhalt des betreffenden Feldes zu einer im Hintergrund verwalteten Gesamtsumme hinzu und zeigt diese anstelle des Einzelwertes des Datensatzes im Textfeld an.
Hier liegt die Idee nahe, einfach ein Textfeld in den Seitenfuß zu setzen, es an das Feld zu binden, für das eine Zwischensumme benötigt wird, und dessen Eigenschaft „Laufende Summe“ auf „Über alles“ einzustellen. Leider funktioniert dieser Trick nicht, da im Seitenfuß kein direkter Zugriff auf Datenfelder des Detailbereichs möglich ist.
Während der direkte Zugriff auf Datenfelder im Detailbereich nicht möglich ist, hat Access nichts dagegen, wenn ein Textfeld adressiert wird, das zwar den gleichen Steuerelementeinhalt wie ein Datenfeld im Detailbereich hat, aber einen anderen Namen trägt. Anhand des Berichtes „Rechnung“ aus der Beispieldatenbank „Nordwind“ können Sie das ganz einfach nachvollziehen. In diesem „Rechnungs“- Bericht gibt es das Feld „Endpreis“, das die Summe aus Bestellmenge und Einzelpreis abzüglich Rabatt beinhaltet. Die Summe dieses Feldes ergibt den Rechnungsbetrag. Für dieses Feld möchten Sie nun eine Zwischensumme am Ende einer Seite ausgeben. Gehen Sie dazu folgendermaßen vor:
1. Öffnen Sie den Rechnungsbericht im Entwurfsmodus.
2. Markieren Sie das Feld, für das eine Zwischensumme ausgegeben werden soll, kopieren Sie es per Strg+C und fügen Sie es im Detailbereich per Strg+V wieder ein. In unserem Beispiel ist das das Feld „Endpreis“.
3. Ändern Sie den Namen des Feldes auf „txtLaufendeSumme“.
4. Stellen Sie die Eigenschaft „Sichtbar“ auf „Nein“.
5. Markieren Sie in der Zeile Eigenschaft „Laufende Summe“ den Eintrag „Über alles“.
Dieses Textfeld summiert nun für alle auf einer Seite ausgegebenen Datensätze den Inhalt des Feldes „Endpreis“.
Um diese Summe nun im Seitenfuß als Zwischensumme auszugeben, gehen Sie wie folgt vor:
1. Legen Sie im Seitenfuß ein ungebundenes Textfeld an und löschen Sie dessen Bezeichnungsfeld.
2. Setzen Sie den Namen des Feldes auf „txtZwischensumme“.
3. Geben Sie in der Eigenschaft „Steuerelementeinhalt“ die folgende Formel ein:
=“Zwischensumme: “ & Format$([txtLaufendeSumme];“#. ##0,00 €“)
Diese Formel überträgt bei der Ausgabe des Berichtes den aktuellen Inhalt des Feldes „txtLaufendeSumme“ aus dem Detailbereich in das Feld „txtZwischensumme“ im Seitenfuß und gibt so die jeweilige Zwischensumme aus.
Dabei erfolgt eine Formatierung als Währung über die Funktion „Format$“.
Wenn Sie den Bericht nun einmal anzeigen lassen, sehen Sie im Seitenfuß die gewünschte Zwischensumme der bis dahin addierten Rechnungspositionen.
Nachdem es gelungen ist, eine Zwischensumme im Seitenfuß auszugeben, ist das nächste Problem zu lösen: Eine Zwischensumme darf in Rechnungen nur dann ausgegeben werden, wenn die Rechnung mehr als eine Seite umfasst, und sie darf nicht auf der letzten Seite ausgegeben werden.
Um das zu erreichen, ergänzen Sie die Formel in der Eigenschaft „Steuerelementeinhalt“ des Textfeldes „txtZwischensumme“ im Seitenfuß wie folgt:
=Wenn([Seiten]>1 Und [Seite] <>[Seiten];“Zwischensumme: “ & Format$([txtLaufendeSumme];“#.##0,00 €“);““)
Diese Formel prüft, ob die Rechnung mehr als eine Seite umfasst und welche Seite gerade formatiert wird. Ist mehr als eine Seite vorhanden und es wird nicht die letzte Seite formatiert, erfolgt die Ausgabe der Bezeichnung „Zwischensumme“ mit der aktuellen Zwischensumme formatiert als Währung. Andernfalls, also wenn die Rechnung nur eine Seite lang ist oder die aktuell formatierte Seite die letzte Seite ist, wird der Inhalt des Feldes gelöscht und nichts angezeigt.
Die im Seitenfuß ausgegebene Zwischensumme soll nun im Seitenkopf der Folgeseite als Übertrag erscheinen.
Es bietet sich an – analog zur Zwischensumme im Seitenfuß – einfach ein Textfeld und eine Formel der folgenden Art im Seitenkopf zu verwenden:
=[txtZwischensumme]
Auf den ersten Blick müsste diese Formel den aktuellen Inhalt des Textfeldes im Seitenfuß und damit die aktuelle Zwischensumme in das Textfeld im Seitenkopf übertragen. Das geschieht jedoch nicht. Da beim Formatieren des Seitenkopfes bereits der erste Datensatz für den Detailbereich eingelesen ist, umfasst die laufende Summe und damit die Zwischensumme die ursprüngliche Summe plus den Wert des ersten ausgegebenen Datensatzes.
Mit dem folgenden Trick lösen Sie das Problem:
1. Legen Sie im Seitenfuß ein Textfeld „txtÜbertrag“ an.
2. Stellen Sie die Eigenschaft „Sichtbar“ auf „Nein“ ein.
3. Wählen Sie bei der Eigenschaft „Beim Formatieren“ des Seitenfußes den Eintrag „[Ereignisprozedur]“.
3. Klicken Sie auf die Schaltfläche mit den drei Punkten, um den VBA-Editor zu öffnen.
5. Geben Sie die folgenden Anweisungen ein: Diese Zuweisung überträgt nun am Seitenende die aktuelle Zwischensumme aus dem Textfeld im Detailbereich in das versteckte Textfeld „txtÜbertrag“ im Seitenfuß.
Private Sub
Seitenfußbereich_Format(Cancel As Integer, FormatCount As Integer)
Me.txtÜbertrag = Me.txtLaufendeSumme
End Sub
6. Legen Sie im Seitenkopf ein Textfeld „txtÜbertragKopf“ an.
7. Geben Sie in der Eigenschaft „Steuerelementeinhalt“ die folgende Formel ein:
P=Wenn([Seite]=1;““;“Übertrag: “ & Format$([txtÜbertrag]; „#.##0,00 €“))
Mithilfe einer „Wenn“-Abfrage stellen wir hier zunächst sicher, dass der Übertrag nur ab der zweiten Seite der Rechnung ausgegeben wird. Auf der ersten Seite löschen wir den Inhalt, sodass nichts angezeigt wird. Den zuvor festgehaltenen Übertrag lesen wir aus dem Textfeld „txtÜbertrag“ im Seitenfuß aus und zeigen ihn formatiert als Währung im Seitenkopf an.