Home > Artikel > Ausgabe 6/2012 > Rechnungsbericht

Rechnungsbericht

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

In Ausgabe 2/2012 haben wir bereits Tabellen und Formulare zum Verwalten von Bestellungen vorgestellt. Nun liefern wir einen Bericht nach, mit dem Sie pro Bestellung eine eigene Rechnung erstellen können. Mit einer Rechnung treffen wir dabei auf ein typisches Beispiel für den Einsatz von Berichten.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1206_Rechnungsbericht.mdb.

Aufbau des Berichts

Der Bericht hat zunächst folgenden Aufbau, später gehen wir etwas mehr ins Detail: Der Berichtskopf soll den Briefkopf des Absenders inklusive Name und Anschrift sowie die Anschrift des Rechnungsempfängers enthalten. Der Detailbereich enthält die einzelnen Rechnungspositionen, also die Position, die Artikelbezeichnung, die Menge, den Einzelpreis, die Mehrwertsteuer, den Rabatt sowie den Endpreis. Der Berichtsfuß enthält allgemeine Informationen wie etwa eine Grußformel. Fehlen noch die Summen mit und ohne Mehrwertsteuer: Diese landen in einem eigenen Bereich, der durch die Gruppierung nach der Bestellnummer erzeugt wird. Nach der Fertigstellung soll der Bericht wie in Bild 2 aussehen.

Der Bericht in der Vorschauansicht

Bild 1: Der Bericht in der Vorschauansicht

Aufruf des Berichts

Auch wenn wir den Bericht noch gar nicht programmiert haben: Von irgendeiner Stelle aus müssen Sie diesen später aufrufen. Im Rahmen einer Bestellverwaltung macht es natürlich Sinn, diesen Bericht von dem Formular aus aufzurufen, das auch die Bestelldaten anzeigt. Dieses Formular haben wir bereits im Artikel Bestellungen in Formularen verwalten programmiert, die Daten zum Bericht stammen aus Tabellen, die in Bestellungen in Tabellen verwalten beschrieben wurden. Wir greifen das Formular auf und fügen diesem zwei Schaltflächen hinzu, mit dem der Benutzer den Bericht in der Vorschauansicht betrachten und mit der er den Bericht auch gleich drucken kann (siehe Bild 1). Die beiden Schaltflächen heißen cmdRechnungVorschau und cmdRechnungDrucken. Für die Schaltfläche cmdRechnungVorschau hinterlegen Sie die folgende Ereignisprozedur:

Aufruf des Berichts vom Bestellformular aus

Bild 2: Aufruf des Berichts vom Bestellformular aus

Private Sub cmdRechnungVorschau_Click()

     DoCmd.OpenReport "rptRechnung", _

         WhereCondition:="BestellungID = " _

         & Me!BestellungID, View:=acViewPreview

End Sub

Diese OpenReport-Anweisung öffnet einen Bericht namens rptRechnung, wobei dieser nur solche Datensätze anzeigen soll, deren Feld BestellungID den Wert des gleichnamigen Feldes der Datenherkunft des Formulars aufweist. Außerdem übergeben Sie für den Parameter View den Wert acViewPreview, wodurch der Bericht in der Vorschauansicht geöffnet wird.

Die einzige Anweisung der Ereignisprozedur für die zweite Schaltfläche, cmdRechnungDrucken, unterscheidet sich nur durch den Wert des Parameters View von der oben beschriebenen Prozedur. Hier verwenden wir den Wert acViewNormal, was den Bericht gleich an den Standarddrucker sendet.

Änderungen am Datenmodell

Da wir nun nicht mehr nur Bestellungen aufnehmen, sondern auch noch Rechnungen schreiben, haben wir der Tabelle tblBestellungen noch ein Feld namens Rechnungsdatum hinzugefügt.

Bericht anlegen

Erstellen Sie einen neuen Bericht und speichern Sie diesen unter dem Namen rptRechnung.

Datenherkunft

Wir wissen schon einmal, dass die Datenherkunft des Berichts das Feld BestellungID enthalten muss, damit wir die Bestelldaten nach der gewünschten Bestellung filtern können. Der Bericht enthält jedoch insgesamt sogar fünf Tabellen, die Sie in Bild 3 abgebildet sehen. Zur besseren Übersicht haben wir die Felder eingerahmt, die wir zum Entwurfsraster hinzugefügt haben. Um die Datenherkunft festzulegen, öffnen Sie den Bericht in der Entwurfsansicht und zeigen Sie mit F4 die Berichtseigenschaften an. Klicken Sie auf die Eigenschaft Datenherkunft (ab Access 2007 Datensatzquelle) und dann auf die Schaltfläche mit den drei Punkten. Es erscheint eine leere Abfrage, die Sie wie in der Abbildung füllen. In der Beispieldatenbank finden Sie die Abfrage übrigens unter dem Namen qryRepRechnung als eigenes Objekt im Datenbankfenster beziehungsweise im Navigationsbereich. Dies hat keinen tieferen Sinn – außer, dass dadurch die Gestaltung der Abfrage, also etwa die Anordnung der Tabellen und ihrer Beziehungen sowie der Spaltenbreiten, auch nach dem Schließen und erneuten Öffnen der Abfrage erhalten bleibt.

Datenherkunft des Berichts

Bild 3: Datenherkunft des Berichts

Bericht mit Steuerelementen füllen

Mit diesen Informationen ausgestattet, können wir uns an den Berichtsentwurf begeben. Dabei unterteilen wir die folgenden Schritte in Pflicht und Kür. Die Pflicht sind die Angabe der Empfängeranschrift, der Rechnungspositionen, des Rechnungsdatums, der Rechnungssummen sowie diverser Nummern wir Rechnungsnummer, Kundennummer, Bestellnummer et cetera. Die Kür machen Elemente wie der Briefkopf, die rechte Seite mit allgemeinen Angaben sowie der Berichtsfuß aus, wo Sie Bankverbindung, Grußformel und andere Dinge nach Gusto unterbringen können.

Als erstes fügen wir der Rechnung die Rechnungsanschrift hinzu. Diese wird, wie bereits im Artikel Adressblöcke in Berichten beschrieben, als ein Textfeld angelegt, das seine Informationen aus einer Formel bezieht. Diese Formel lautet wie folgt:

=Wenn([Firma];[Firma];Wenn([Anrede]="Herr";"Herrn";"Frau")) & Zchn(13) & Zchn(10) & Wenn([Firma];Wenn([Anrede]="Herr";"Herrn";"Frau"))+" " & [Vorname]+" " & [Nachname]+Zchn(13)+Zchn(10) & [Strasse]+Zchn(13)+Zchn(10) & [PLZ]+" "+[Ort]+Zchn(13)+Zchn(10) & [Land]

Kurz zusammengefasst prüft diese Formel zunächst, ob für diesen Kunden ein Eintrag im Feld Firma vorliegt. Falls ja, landet die Firma in der ersten Zeile und der Kundenname samt Anrede in der zweiten. Anderenfalls wird die Anrede in die erste und der Kundenname in der zweiten Zeile angelegt. Die übrigen Zeilen werden mit Straße, PLZ, Ort und Land gefüllt. Sollte ein Feld leer sein, verhindert die Formel eventuell auftretende leere Zeilen und überflüssige Leerzeichen. Das Textfeld zur Anzeige der Anschrift landet im Berichtskopf. Dort fügen Sie außerdem noch nach eigenen Vorlieben den Briefkopf mit Firmenname und -sitz sowie weitere Felder wie Bestellnummer, Bestelldatum, Rechnungsnummer, Kundennummer und Ust.-IdNr. ein. Bestelldatum, Bestellnummer und Kundennummer holen Sie sich aus der Datenherkunft des Berichts, die Rechnungsnummer setzen wir aus Kundennummer und Bestellnummer zusammen. Dazu fügen Sie ein Textfeld namens txtRechnungsnummer hinzu und hinterlegen den folgenden Ausdruck für seine Eigenschaft Steuerelementinhalt:

=[KundeID] & "-" & [BestellungID]

Der Kopf des Berichts sieht somit wie in Bild 4 aus.

Kopfbereich des Berichts mit Anschrift

Bild 4: Kopfbereich des Berichts mit Anschrift

Rechnungspositionen

Als nächstes kümmern wir uns um die Rechnungspositionen, die den Datensätzen der Tabelle tblBestellpositionen entsprechen. Wir zeigen nur eine Rechnung pro Bericht an, also sind die Rechnungspositionen die einzigen Elemente, die sich wiederholen könnten. Folgerichtig landen die Felder mit den einzelnen Daten der Rechnungspositionen im Detailbereich des Berichts.

Der Detailbereich befindet sich direkt unterhalb des Berichtskopfes. Damit die Überschriften für Position, Artikelname, Einzelpreis, Anzahl, Rabatt, Mehrwertsteuersatz und Bruttopreis nur einmal angezeigt werden, fügen Sie diese am unteren Rand des Berichtskopfes ein. Der Detaibereich nimmt die Felder Artikelname, Einzelpreis, AnzahlArtikel, Rabatt und Mehrwertsteuersatz auf (siehe Bild 5). Außerdem fügen Sie ganz vorne ein Feld namens txtPosition hinzu und ganz hingen ein Feld namens txtBrutto hinzu.

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!