Fortlaufende Berichtsnummer anlegen
Hallo, eigentlich ist diese Frage schon mehrfach besprochen worden; zu meiner Enttäuschung bekomme ich es trotzdem nicht hin...
In einer Tabell "Prüfberichte" sollen die Datensätze mit einer fortlaufenden "Berichtsnummer" versehen werden. Die Syntax soll PRO-QM-00000 lauten, die erste Nummer in der neuen Tabelle soll sein PRO-QM-01501. Bis dahin liefen die Berichte über ein anders System. Die Anlage der Nummer soll über ein Script bei Neuanlage eines Datensatzes erfolgen. Ich habe versucht, mich an den Formeln zu einer fortlaufenden Rechnungsnummer zu orientieren, aber mir gelingt die Anpassung an meine Tabelle leider nicht..
Vielleicht kann man mir auf die Sprünge helfen... vielen Dank im Voraus.
Heino
8 Antworten
-
Hallo Heino, ich würde im ersten Datensatz der Tabelle händisch die Berichtsnummer "PRO-QM-01500" eintragen und als Trigger "Bei neuem Datensatz" folgenden Code versuchen (ungetestet, deshalb ohne Gewähr):
let lastNr := max(select 'Prüfberichte' order by Berichtsnummer).Berichtsnummer
let newNr := number(substr(Berichtsnummer, 7, 5)) + 1
Rechnungsnummer := "PRO-QM-" + format(newNr, "00000")
Wenn es funktioniert, kann man den ersten Datensatz auch wieder löschen.
-
Hallo Copytexter, danke für Deine Hilfe. Ich habe den folgenden Code benutzt:
let lastNr := max((select 'Prüfberichte') order by Berichtsnummer).Berichtsnummer;
let newNr := number(substr(Berichtsnummer, 7, 5)) + 1;
Berichtsnummer := "PRO-QM-" + format(newNr, "00000")Leider funktioniert es nicht wie erhofft. Jeder neue Datensatz lautet auf Berichtsnummer PRO-QM-00001. Den ersten Datensatz habe ich händisch auf ....01500 gesetzt. Was bedeutet die ...7 , 5 in der zweiten Zeile?
-
Hallo Heino, ich hätte wie Copytexter einen sehr ähnlichen Ansatz.
Ich würde in der Tabelle noch einen Zahlenfeld hinzufügen, dass ich beim ersten man mit dem Wert 1500 zuweisen(Bspw. mit dem Namen ID) wie Berichtsnummer manuell eintragen. Anschließend ID auf dem Layout verstecken.(Eine 0 setzen bei "Nur anzeigen wenn")
Danach beim Erstellen eines neuen Datensatzes wie gefolgt durchgehen:
let newID := last(select (Prüfberichte).ID) + 1;
Berichtsnummer := "PRO-QM-" + format(newID,"00000");
-
Blöder Fehler von mir, sorry. Das substr() in der zweiten Zeile muss natürlich auf 'lastNr' angewendet werden:
let lastNr := last((select 'Prüfberichte') order by Berichtsnummer).Berichtsnummer;
let newNr := number(substr(lastNr, 7, 5)) + 1;
Berichtsnummer := "PRO-QM-" + format(newNr, "00000")
Zu den Zahlenwerten bei substr() habe ich gerade woanders was geschrieben (ganz unten):
https://ninox.com/de/forum/technische-hilfe-5ab8fe445fe2b42b7dd39ee8/denk-fehler-bei-fortlaufender-rechnungsnummer-5e9444e55e353d53a6fa5c77 -
Ja, Bilguun, mit einem zusätzlichen numerischen Feld geht's natürlich auch. Ist aber nicht nötig, wenn man's richtig macht und nicht so wie ich in jede der drei relativ einfachen Zeilen einen hanebüchenen Fehler einbaut. ;)
-
Eleganter ohne initiale manuelle Eingabe könnte man auch so vorgehen:
let lastID := last(select (Prüfberichte).ID);
if lastID = null then (ID:= 1500;Berichtsnummer := "PRO-QM-" + format(ID,"00000"); )
else (ID:= lastID +1 ;Berichtsnummer := "PRO-QM-" + format(ID,"00000");)
P.S Beim obigen Code muss "let newID:=" in "ID:=" umgewandelt werden, damit man die Nummer natürlich inkrementieren muss. Hab ich im letzten Schritt vergessen zu zuweisen.
-
Ja klar Copytexter, viele Wege führen nach Rom :)
-
Hallo Copytexter, Hallo Bilguun,
ich danke euch beiden für die Hilfe und die Diskussion, habe wieder etwas dazu gelernt!
Heino
Content aside
- vor 4 JahrenZuletzt aktiv
- 8Antworten
- 758Ansichten