Wie erstelle ich ein Makro zum Generieren einer Datensatznummer basierend auf dem Geschäftsjahr? (Access 2013)

Wie erstelle ich ein Makro zum Generieren einer Datensatznummer basierend auf dem Geschäftsjahr? (Access 2013)

Ich möchte eine Datensatznummer erstellen, die auf dem Geschäftsjahr basiert und automatisch fortschreitet … So etwas wie: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002 usw.

Ich habe bereits ein Feld [FiscalYr] (berechneter Datentyp) in meiner Tabelle [Projects], das auf dem folgenden Ausdruck basiert:

IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate])).  

Das Feld [EntryDate] ist ein Datums-/Zeitfeld mit dem Standardwert Date(). Das funktioniert so, wie ich es möchte.

Gibt es eine Möglichkeit, diese [FiscalYr]-Nummer einer dreistelligen Nummer voranzustellen, die mit 001 beginnt und auf Grundlage des vorherigen Datensatzes um 1 hochgezählt wird, wobei die Nummer zu Beginn jedes neuen Geschäftsjahrs auf 001 zurückgesetzt wird? Unser Geschäftsjahr beginnt am 1. Oktober und endet am 30. September.

Ich möchte, dass die Nummer generiert wird, unabhängig davon, ob die Informationen in die Tabelle [Projekte] oder das Formular [Projektformular] eingegeben werden. Ich möchte nicht, dass sie nur generiert wird, wenn Informationen in das Formular eingegeben werden. Ich habe online einige Beiträge gesehen, in denen vorgeschlagen wurde, dass die beste Möglichkeit, so etwas zu tun, die Verwendung eines Makros „Before Change“ wäre, aber die meisten Beispiele, die ich finden kann, basieren einen erheblichen Teil ihres Makrocodes auf einem Datum, und ich habe das Datumsproblem bereits gelöst (glaube ich).

Ich wäre mit einem Makro zufrieden, das sowohl das Geschäftsjahr aus [EntryDate] als auch gleichzeitig die Nummer erstellt, wenn das einfacher ist, als mit meinem vorhandenen Feld [FiscalYr] zu arbeiten. Ich bin nur ein gelegentlicher Access-Benutzer, also tut es mir sehr leid, wenn ich Unsinn rede – ich glaube, ich weiß gerade genug, um gefährlich zu sein.

Vielen Dank, Andrea


Aktualisierung 09.12.2015:

Ich habe die Makro-Idee aufgegeben.

Mithilfe der Tipps aus Scottgems Blog (https://scottgem.wordpress.com/2009/11/25/sequential-numbering/), konnte ich ein fortlaufendes Nummerierungssystem zum Laufen bringen, aber ich habe immer noch große Probleme damit, die Nummer zu Beginn eines neuen Geschäftsjahres auf 1 zurückzusetzen. Ich bin nicht sicher, ob das Problem darin liegt, wie ich meinen Geschäftsjahrwert erstelle, oder ob es etwas ganz anderes ist.

Hier ist, was ich habe:

Tabellenname: Projekte

Innerhalb von Projekten habe ich die folgenden Felder zu diesem Problem:

  • ProjektNr: Zahl – lange Ganzzahl
  • Sequenz: Zahl - lange Ganzzahl
  • EntryFiscalYr: berechnet – lange Ganzzahl; der Ausdruck lautet wie folgt:IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • EntryDate: Datum/Uhrzeit; Standardwert: Date()

Formularname: Projektformular

In meinem Projektformular habe ich die folgenden Steuerelemente:

  • Sequenz: Textfeld, Steuerelementquelle ist Sequenzfeld in der Projekttabelle, auf nicht sichtbar eingestellt
  • CreateProjNo: Schaltfläche, Ereignis beim Klicken:

     Private Sub CreateProjNo_Click()
        Me.Sequence = Nz(DMax("[Sequence]", "Projects"), 0) + 1
        DoCmd.RunCommand acCmdSaveRecord
     End Sub
    
  • ProjektNr: Textfeld, Datenkontrollquelle:

     =[EntryFiscalYr] & Format([Sequence],"000")
    

Dies wird so angezeigt, wie ich es möchte: 2016001, 2016002 usw.

Ich habe verschiedene Iterationen der Codes auf Scottgems Blog ausprobiert, um das Feld EntryFiscalYr in die DMax-Anweisung zu bringen und zu prüfen, ob die Sequenznummer für das aktuelle Geschäftsjahr weiter hochgezählt werden soll oder für das neue Geschäftsjahr von vorne beginnen soll, aber keiner meiner Versuche hat funktioniert.

Ich habe versucht:

 Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”,”[EntryFiscalYr]) = “ &(Me.[EntryFiscalYr])),0)+1

 Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”, ” [EntryFiscalYr] = ‘“ & Me.[EntryFiscalYr] & “’”),0)+1

Ich habe es auch mit Me.[txtEntryFiscalYr]anstelle von versucht Me.[EntryFiscalYr]. Keiner dieser Versuche hat funktioniert.

Ich vermute, dass meine Probleme möglicherweise darauf zurückzuführen sind, wie EntryFiscalYr für jeden Datensatz generiert wird, aber ich habe keine Ahnung, wie ich das beheben soll. Ich habe es mit dem von EntryDate generierten Datum versucht und das funktioniert mit dem Kalenderjahr sehr gut, aber es ist wichtig, dies auf dem Geschäftsjahr zu basieren und es zu Beginn jedes neuen Geschäftsjahres neu festzulegen.

Außerdem wird die im Projektformular generierte Projektnummer nicht im Feld „Projektnummer“ in der Projekttabelle aktualisiert, aber ich verstehe das so: Das ist der springende Punkt. Ist das richtig?

Wir sind für jede Hilfe dankbar, damit dies im Geschäftsjahr richtig funktioniert.

Danke!

Antwort1

Dies ist der Code, für den ich mich letztendlich entschieden habe. Er verwendet eine Schaltfläche in meinem Formular. Ich hoffe, das hilft anderen da draußen, die möglicherweise mit denselben Problemen zu kämpfen haben.

Private Sub CreateProjNo_Click()
Me.EntryFiscalYr = IIf(Month([EntryDate]) >= 10, Year([EntryDate]) + 1, Year([EntryDate]))
Me.Dirty = False

If IsNull(Me.Sequence) Then
Me.Sequence = Nz(DMax("[Sequence]", "Projects", "[EntryFiscalYr] = " & Me.[EntryFiscalYr]), 0) + 1
Me.Dirty = False
End If

End Sub

Weitere Informationen dazu, wie ich zu dieser Lösung gekommen bin, finden Sie unter diesem Link: http://answers.microsoft.com/en-us/office/forum/office_2013_release-access/access-2013-wie-generiere-ich-eine-datensatznummer/22fa42e1-dd89-4683-b1d0-72b112281c1c

verwandte Informationen