Wie erstelle ich ein Makro, um eine Datensatznummer basierend auf dem Geschäftsjahr zu generieren? (Zugang 2013)

812
anmarse

Ich möchte eine Rekordnummer erstellen, die auf dem Geschäftsjahr basiert und automatisch vorgerückt wird. Etwas wie: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002 usw.

Ich habe bereits ein [FiscalYr] -Feld (berechneter Datentyp) in meiner Tabelle [Projekte] basierend auf dem folgenden Ausdruck:

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

Das Feld [EntryDate] ist ein Datums- / Uhrzeitfeld mit dem Standardwert Date (). Das funktioniert so, wie ich es gerne hätte.

Gibt es eine Möglichkeit, diese [FiscalYr] -Nummer auf die Vorderseite einer 3-stelligen Nummer zu setzen, die mit 001 beginnt und auf der Grundlage des vorherigen Datensatzes um 1 erhöht wird, wobei die Nummer am Anfang von 001 zurückgesetzt wird jedes neue Geschäftsjahr 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 der Tabelle [Projekte] oder im Formular [Projekte Formular] eingegeben werden. Ich möchte nicht, dass es nur generiert wird, wenn Informationen in das Formular eingegeben werden. Ich habe einige Beiträge online gesehen, in denen der beste Weg vorgeschlagen wird, ein solches Makro zu verwenden, aber ein Großteil der Makros, die ich finden kann, basiert auf einem Datum, und ich habe es bereits erhalten Datumsausgabe aussortiert (denke ich).

Ich wäre gut mit einem Makro, das das Geschäftsjahr aus dem [EntryDate] und der Nummer zur gleichen Zeit erstellt hat, wenn dies einfacher ist als das Arbeiten mit meinem vorhandenen [FiscalYr] -Feld. Ich bin nur ein zufälliger Access-Benutzer. Wenn ich also Kauderwelsch spreche, tut es mir so leid - ich glaube, ich weiß gerade genug, um gefährlich zu sein.

Vielen Dank, Andrea


Update 9.12.2015:

Ich habe die Makro-Idee aufgegeben.

Mit den Tipps in Scottgems Blog ( https://scottgem.wordpress.com/2009/11/25/sequential-numbering/ ) konnte ich ein fortlaufendes Nummerierungssystem in Betrieb nehmen, aber ich habe immer noch Schwierigkeiten damit Zu Beginn eines neuen Geschäftsjahres wird die Nummer auf 1 zurückgesetzt. Ich bin mir nicht sicher, ob das Problem darin besteht, wie ich meinen Wert für das Geschäftsjahr oder etwas anderes generiere.

Hier ist was ich habe:

Tabellenname: Projekte

In Projekten habe ich die folgenden Felder, die sich auf dieses Problem beziehen:

  • ProjectNo: number - long integer
  • Sequenz: number - long integer
  • EntryFiscalYr: berechnet - Long Integer; Der Ausdruck lautet wie folgt:IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • EntryDate: Datum / Uhrzeit; Standardwert: Datum ()

Formularname: Projektformular

In meinem Projektformular habe ich die folgenden Steuerelemente:

  • Sequenz: Textfeld, Steuerquelle ist Sequenzfeld in der Projekttabelle, auf nicht sichtbar gesetzt
  • CreateProjNo: Schaltfläche, Ereignis bei Klick:

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

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

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

Ich habe verschiedene Iterationen der Codes in Scottgems Blog ausprobiert, um das Feld EntryFiscalYr in die DMax-Anweisung zu bringen, um zu sehen, ob die Sequenznummer für das laufende Geschäftsjahr weiterzählen oder für das neue Geschäftsjahr von vorne beginnen soll, aber keine meiner Versuche sind am Arbeiten.

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 auch mit versucht, Me.[txtEntryFiscalYr]statt Me.[EntryFiscalYr]. Keiner dieser Versuche hat funktioniert.

Ich vermute, meine Probleme könnten darauf zurückzuführen sein, wie EntryFiscalYr für jeden Datensatz generiert wird, aber ich weiß nicht, wie ich damit umgehen soll. Ich habe es mit dem von EntryDate generierten Datum ausprobiert, und das macht einen guten Job mit dem Kalenderjahr, aber es ist wichtig, dieses Datum auf der Grundlage des Geschäftsjahres zu erhalten und es zu Beginn eines jeden neuen Geschäftsjahres neu festzulegen.

Das ProjectNo, das in dem Projects Form generiert wird, wird nicht in dem ProjectNo-Feld in der Projects-Tabelle aktualisiert, aber ich verstehe, dass dies der Punkt ist. Ist das richtig?

Jegliche Unterstützung bei der korrekten Arbeit mit dem Geschäftsjahr wäre sehr zu begrüßen.

Vielen Dank!

1
Willkommen bei Superuser. Was hast du bisher versucht? Andi Mohr vor 8 Jahren 0
Hallo Andi, ich habe meine Frage überarbeitet, was ich bisher ausprobiert habe. Vielen Dank! Andrea anmarse vor 8 Jahren 0
Ich fürchte, ich habe nicht genug Kenntnisse in Access, um Ihre Frage zu beantworten, aber ich habe einige Formatierungen vorgenommen, um Ihren Code für andere lesbarer zu machen. Andi Mohr vor 8 Jahren 0

1 Antwort auf die Frage

0
anmarse

Dies ist der Code, für den ich mich schließlich entschieden habe. Es verwendet einen Button in meinem Formular. Hoffe, das hilft anderen da draußen, die mit den gleichen 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, empfehle ich, diesen Link zu besuchen: http://answers.microsoft.com/de-de/office/forum/office_2013_release-access/access-2013-how-do-i- generiere eine Datensatznummer / 22fa42e1-dd89-4683-b1d0-72b112281c1c