Dokumentnummern: OUT-2026-00001 und das Ende von 00NaN
Warum jede Auftragsnummer aus einem einzigen Zähler in der Datenbank kommt — und warum zwei Kollegen nie dieselbe bekommen können.
Eine Auftragsnummer ist der Griff, an dem alle außerhalb Ihres Hauses das Ding anfassen. Der Kunde nennt sie am Telefon, der Carrier druckt sie auf den CMR, die Buchhaltung ordnet die Rechnung darüber zu. Sie muss eindeutig sein, lesbar, und in dem Moment vergeben, in dem der Auftrag entsteht. Eine Zeit lang war sie zwei von drei.
Ein Zähler, pro Tenant, pro Jahr
Jede operative Dokumentnummer — Outbound OUT-, Inbound INB-, Collection COL-, Receiving Session RECEIV- und Demanufacturing-Job DMF- — kommt aus einer einzigen Datenbankfunktion, die einen Zähler pro Organisation, pro Dokumenttyp und pro Jahr führt und ihn unter einem Lock hochzählt. Das Format ist Präfix, Jahr, fünf Ziffern: OUT-2026-00001. Eine leere Serie startet bei 00001. Im Januar beginnt der Zähler von vorn, und das Jahr in der Nummer sagt Ihnen, welche Serie Sie gerade vor sich haben.
Zwei User, eine Sekunde, zwei Nummern
Weil der Zähler gesperrt ist, während er eine Nummer ausgibt, bekommen zwei Kollegen, die im selben Moment Outbound Orders anlegen, jedes Mal zwei verschiedene Nummern. Und sollte je etwas am Zähler vorbeirutschen, verweigert die Datenbank selbst ein Duplikat innerhalb derselben Organisation und desselben Jahres. Die Nummer ist eine Zeile, die die Datenbank geschrieben hat und kein zweites Mal schreiben wird.
Keine Seitentüren
Aufträge, die über einen Import oder die öffentliche API entstehen, nutzen dieselbe Vergabe wie der Button in der Oberfläche. Kein zweites Nummernschema für das ERP, kein Override, der eine Nummer erzeugt, die der Zähler nie gesehen hat. Eine Serie, eine Funktion, eine Regel.
Warum 00NaN eine Beerdigung verdient hatte
Der alte Ansatz las im Browser die höchste vorhandene Nummer und zählte eins dazu. Bei einer leeren Serie gab es nichts, wozu man eins dazuzählen konnte, und heraus kam ein Dokument mit dem stolzen Titel OUT-2026-00NaN — das, was ein Computer sagt, wenn er etwas zählen soll, das keine Zahl ist. Zwei gleichzeitige User konnten außerdem beide dieselbe „höchste“ lesen und beide eins dazuzählen. Beides kann heute nicht mehr passieren. Es ist kein String. Es ist eine Sequenz.