Auftragsnummern fⁿr den aktuellen Monat vergeben

Ich lege gerade mit MS Access 2000 eine Datenbank fⁿr meine Kunden- und Auftragsverwaltung an. Nun m÷chte ich gerne, dass Access automatisch fortlaufende Auftragsnummern erzeugt. Diese Nummern sollen auf Jahr, Monat und einer laufenden Nummer basieren, also zum Beispiel ╗200006123½ fⁿr den 123. Auftrag im Juni 2000. K÷nnen Sie mir helfen?

Sie k÷nnen in einer Konfigurations-Tabelle die zuletzt vergebenen Auftragsnummern ablegen. Alternativ k÷nnen Sie in den DatenbestΣnden die bereits vergebenen Auftragsnummern analysieren. Au▀erdem sind folgende ▄berlegungen n÷tig: Wird die Nummer immer anhand des aktuellen Datums vergeben, oder ist es vorstellbar, dass Sie einen Auftrag fⁿr den letzten oder vorletzten Monat erfassen m÷chten? Greifen unterschiedliche Nutzer gleichzeitig auf die Anwendung zu?
Die vorgestellte L÷sung nutzt neben den eigentlichen Datentabellen eine Tabelle namens ╗Config½, in denen Access 2000 fⁿr jeden einzelnen Monat die zuletzt vergebene laufende Nummer ablegt. Das Feld ╗Monat½ ist vom Typ ╗Text½ und hat genau 6 Stellen. Hier speichert Access jeweils den Monat im Format ╗JJJJMM½. Das Feld ╗lfdNummer½ ist von Typ ╗Zahl½ und enthΣlt die fⁿr den jeweiligen Monat zuletzt vergebene laufende Nummer.
ZusΣtzlich ben÷tigen Sie eine VBA-Funktion ╗getNumber()½, die aus einem als Parameter ⁿbergebenen Datum Monat und Jahr extrahiert, in der Tabelle ╗Config½ die zuletzt vergebene laufende Nummer ermittelt, die neue Auftragsnummer erzeugt und abschlie▀end die Tabelle ╗Config½ aktualisiert. Als Rⁿckgabewert liefert diese Funktion die neue Auftragsnummer.

Public Function getNumber(Datum As Date) As String

   Dim Datenbank As Database
   Dim rstConfig As Recordset
   Dim Monat As String
   Dim Jahr As String
   Dim nummer As Integer
   Dim Bedingung As String

On Error GoTo Err_checkFiles

   Jahr = Year(Datum)
   Monat = Month(Datum)
   If Monat < 10 Then
      Monat = ä0ä & Monat
   End If

   getNumber = Jahr & Monat

   Set Datenbank = CurrentDb
   Set rstConfig = Datenbank.OpenRecordset(äConfigä, dbOpenDynaset)

   Bedingung = äMonat = æä & getNumber & äæä
   rstConfig.FindFirst Bedingung

   If rstConfig.NoMatch Then
      nummer = 1
      rstConfig.AddNew
      rstConfig!Monat = getNumber
      rstConfig!lfdNummer = 1
      rstConfig.Update
   Else
      nummer = rstConfig!lfdNummer
nummer = nummer + 1
      rstConfig.Edit
      rstConfig!lfdNummer = nummer
      rstConfig.Update
   End If

   If nummer < 10 Then
      getNumber = getNumber & ä00ä & nummer
   ElseIf nummer < 100 Then
      getNumber = getNumber & ä0ä & nummer
   Else
      getNumber = getNumber & nummer
   End If
rstConfig.Close

Exit_checkFiles:
   Exit Function

Err_checkFiles:
   MsgBox Err.Description
   Resume Exit_checkFiles

End Function


Das Listing funktioniert so:Zuerst ermittelt die Funktion ╗getNumber()½ mit ╗Year()½ und ╗Month()½ aus dem ⁿbergebenen Datum Jahr und Monat und fⁿgt beides zu einer Zeichenkette zusammen. Diese Zeichenkette sucht Access mit der Methode ╗FindFirst½ im Feld ╗Monat½ des Recordsets ╗rstConfig½, das zuvor mit ╗Set½ erzeugt wurde. Findet Access einen entsprechenden Datensatz, liest es die laufende Nummer, erh÷ht sie um 1 und aktualisiert den Datensatz. Anderenfalls erzeugt Access mit ╗AddNew½ einen neuen Datensatz, belegt das Feld ╗Monat½ und schreibt den Wert ╗1½ in ╗lfdNummer½. Nun muss die Funktion noch die Auftragsnummer zusammensetzen.
Bevor Sie mit Access 2000 den Datentyp ╗Database½ und die Methode ╗FindFirst½ nutzen k÷nnen, rufen Sie im VBA-Editor den Befehl ╗Extras | Verweise½ auf und setzen einen Haken links neben ╗Microsoft DAO 3.6 Object Library½. Falls der Eintrag ╗Microsoft ActiveX Data Objects 2.1 Library½ aktiviert ist, deaktivieren Sie ihn oder priorisieren ihn niedriger als die Objektbibliothek von DAO 3.6. Die Tabelle ╗Config½ sowie die Funktion ╗getNumber()½ finden Sie auf der Heft-CD CHIP-Code LFDNR.