Rechnungsverwaltung: Die Rechnungsnummer

Bisher entstehen in unserer Rechnungsverwaltung nur Entwürfe: Die Rechnung hat einen Kunden, ein Datum und Positionen, aber keine Rechnungsnummer, und ihr Status lautet „Entwurf“. Irgendwann soll aus dem Entwurf eine echte Rechnung werden, die an den Kunden geht. Genau in diesem Moment braucht sie eine eindeutige, fortlaufende Nummer – und zwar eine, die sich an einem Jahr orientiert und keine Lücken reißt. Wie wir diesen Schritt mit einer eigenen Schaltfläche im Rechnungsformular umsetzen und wie die nächste freie Nummer zustande kommt, liest Du in diesem Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels findest Du in der Datenbank Rechnungsverwaltung_RechnungStellen.accdb. Sie baut auf der Datenbank aus dem Artikel Rechnungsverwaltung: Rechnungen eines Kunden (www.access-basics.de/723) auf.

Entwurf und gestellte Rechnung

Bevor wir weiter programmieren, klären wir, was „Stellen“ eigentlich bedeutet. Ein Entwurf ist ein Arbeitsstand: Wir können Positionen hinzufügen, Mengen ändern und den Entwurf notfalls auch wieder verwerfen. Eine gestellte Rechnung dagegen hat das Haus verlassen. Sie trägt eine Rechnungsnummer, und von nun an darf sich an ihr nichts mehr ändern.

Welchen Zustand eine Rechnung hat, speichert das Feld RechnungsstatusID in tblRechnungen. Es verweist auf die Nachschlagetabelle tblRechnungsstatus, die wir im Artikel Rechnungsverwaltung: Das Datenmodell (www.access-basics.de/719) angelegt haben. Öffne diese Tabelle einmal in der Datenblattansicht. Sie enthält drei Datensätze: 1 für „Entwurf“, 2 für „Gestellt“ und 3 für „Storniert“ (siehe Bild 1).

Die drei Einträge der Tabelle tblRechnungsstatus

Bild 1: Die drei Einträge der Tabelle tblRechnungsstatus

Diese Werte brauchen wir gleich im Code. Neue Rechnungen erhalten übrigens schon jetzt automatisch den Status 1: Das haben wir beim Anlegen per VBA im Artikel über die Rechnungen eines Kunden so festgelegt.

Beim Stellen passieren also drei Dinge auf einmal:

  • Die Rechnung erhält die nächste freie Rechnungsnummer.
  • Das Rechnungsdatum wird auf den heutigen Tag gesetzt, das Fälligkeitsdatum auf 14 Tage später. Ein Entwurf kann ja schon ein paar Tage alt sein – maßgeblich ist aber der Tag, an dem die Rechnung ausgestellt wird.
  • Der Status wechselt von 1 („Entwurf“) auf 2 („Gestellt“).

Komfortable Auswahl des Kunden

Damit wir in der Tabelle tblRechnungen und auch in den darauf aufbauenden Formularen den Kunden leicht auswählen können, müssen wir berücksichtigen, dass es sowohl Kunden mit als auch ohne Angabe einer Firma gibt. Wenn die Firma angegeben ist, wollen wir diesen Wert im Auswahlfeld für KundeID anzeigen, anderenfalls den Wert der Felder Nachname und Vorname, getrennt durch ein Komma.

Dazu haben wir die Datensatzherkunft für das Feld KundeID im Bereich Nachschlagen der Feldeigenschaften auf den folgenden Ausdruck eingestellt:

SELECT [tblKunden].[KundeID], IIf(Nz([Firma],"")="",[Nachname] & ", " & [Vorname],[Firma]) FROM tblKunden ORDER BY [Firma];

Wo die Eigenschaft genau eingestellt wird, sehen wir in Bild 2.

Einstellen der Datensatzherkunft für das Feld zur Auswahl des Kunden in der Tabelle tblRechnungen

Bild 2: Einstellen der Datensatzherkunft für das Feld zur Auswahl des Kunden in der Tabelle tblRechnungen

Wie soll die Rechnungsnummer aussehen?

Man könnte auf die Idee kommen, einfach den Primärschlüssel RechnungID als Rechnungsnummer zu verwenden. Das ist aus mehreren Gründen keine gute Idee: Der Autowert wird schon beim Anlegen des Entwurfs vergeben, er läuft über alle Jahre durch, und jeder verworfene Entwurf hinterlässt eine Lücke. Rechnungsnummern sollen aber eindeutig und fortlaufend sein.

Access [basics]

Unser exklusives Angebot für Dich!

Access im Unternehmen
7,90 € im Monat*

(Das Abo ist jederzeit monatlich kündbar)

Hier geht’s weiter →

Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.

PayPal VISA Mastercard SEPA
Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →