Problem mit Fortlaufender Nummer
Hallo Zusammen,
ich habe ein Problem mit einer Fortlaufenden Nummer, diese soll JEDEN TAG also quasi immer ab 00:00 Uhr von vorne anfangen zu zählen.
Bisher verwende ich folgenden Code:
let lastNum := max((select Testzyklus where date(Datum) = today()).number(substr(Testnummer, 2, 4)));
new.(Testnummer := "1" + "-" + format(lastNum + 1, "0000"));
Leider zählt das System ab 00:00 Uhr bei der Nummer weiter, bei der um 23:59 stehen geblieben worden ist.
Hat jemand einen Lösungsansatz?
15 Antworten
-
Hallo Patrik, ich bin mir nicht sicher, ob es das Problem löst, und kann es auf die Schnelle auch nicht ausprobieren, aber man könnte es mal mit datetime() versuchen:
let lastNum := max((select Testzyklus where datetime(Datum, 0) = datetime(today(), 0)).number(substr(Testnummer, 2, 4))); Testnummer := "1" + "-" + format(lastNum + 1, "0000")
-
Vielen Dank, ich probiere das heute Nacht mal entsprechend aus.
-
Moin,
leider funktioniert auch dieser Code nicht :(
siehe auch angehängtes Bild.
-
Ich habe es mal nachgebaut und es funktioniert bei mir.
Du gibts im Script als Nummerierungsvorgabe:Testnummer := "1" + "-" + format(lastNum + 1, "0000")
an.
In dem Screenshot werden aber ganz andere Nummern angezeigt 2- und 4- statt 1-
Bist du sicher, die richtige Formel zu verwenden? -
Vielleicht bin ich ja am Thema vorbei, aber meine Lösung sieht deutlich komplizierter aus und ist für einen Button oder Trigger:
let dateFeld := Datum; let lastNrAsString := extractx(last(((select Testzyklus) order by number(Nr)).Testnummer), "\d+(?=$)"); let lastNrAsNumber := number(lastNrAsString); let nextNrOnDay := lastNrAsNumber + 1; let penultimateNr := max((select Testzyklus).number(Nr)) - 1; let penultimateDate := record(Testzyklus,penultimateNr).Datum; let nextNr := if last(((select Testzyklus) order by number(Nr)).Datum) > penultimateDate then 1 else nextNrOnDay end; Testnummer := "1" + "-" + format(nextNr, "0000")
-
Hallo Uwe,
vielen Dank für deine Antwort, die 1, 2, 3, 4, 5, etc. wird je nach einer Rollenvergabe vergeben. Also je nach Benutzeraccount steht eine andere Nummer vor dem Bindestrich.
Die eigentliche Nummerierung erfolgt dann erst hinter dem Bindestrich.
-
Hallo Patrik,
bei mir tut es auch. Mich wundert Dein "new" in Zeile 2 und ich frage mich, WO Du das Script untergebracht hast.
Bei mir sieht es so aus:
Das Script ist in "Trigger bei neuem Datensatz" untergebracht. Das Script ist bis auf das "new" das Gleiche wie bei Dir:
let lastNum := max((select Testzyklus where date(Datum) = today()).number(substr(Testnummer, 2, 4))); Testnummer := "1" + "-" + format(lastNum + 1, "0000")
Das kommt heraus:
Zeile 1-5 erst mal so befüllt, Testnummer hat sich erhöht. Dann habe ich bei allen das Datum auf den Vortag gesetzt und Zeile 6 und 7 erzeugt. Das geht so.
-
Hallo Lars,
vielen Dank für deine Mühe.
Ich nutze den Code hinter einen Button in der Tabelle welche ich als Dashboard benutze. Über diesen Button wird dann in der Tabelle "Testzyklus" ein neuer Datensatz erstellt und dieser mit entsprechenden werten schon befüllt (daher das new).
Hier zum Verständnis einmal der komplette Code:
let new := (create Testzyklus); popupRecord(new, "Registrierung"); let my := first(select 'Aktuelle Tester'); new.(Tester := my.'Testung Straße 1'); let lastNum := max((select Testzyklus where date(Datum) = today()).number(substr(Testnummer, 2, 4))); new.(Testnummer := "1" + "-" + format(lastNum + 1, "0000")); new.('Teststraße' := 1); new.('Unterschrift-check' := true)
-
Ich weiß nicht, ob ich das ganz verstehe, aber meinst Du so etwas:
Wenn man auf "Neuer Zyklus" drückt, dann wird ein neuer Datensatz mit neuer Testnummer und Datum von heute angelegt. Alle anderen Felder kann man natürlich auch noch initialisieren (entweder als Vorbefüllung im Datenmodell selbst oder dynamisch über den Button).
Hinter dem Button liegt das:
let new := (create Testzyklus); new.(Datum := today())
Ansonsten liegt das Hochzählen weiterhin an der oben beschriebenen Stelle.
-
Das ändert m. E. überhaupt nichts. Ich habe jetzt einfach ein komplett unabhängiges Modell Dashboard angelegt (und falls man referenziert, hat man Zugriff auf die Daten der Testzyklen, aber das ist eine andere Baustelle). Dem Dashboard habe ich einen Button gegeben mit genau dem gleichen Code. Wenn man den drückt, dann werden neue Testzyklen angelegt - mit fortlaufender Nummer und bei Datumsgrenze ab 0001.
-
Das Problem ist entsprechend durch planox. pro gelöst worden.
Es lang ein ein paar Klammern:
let myD := date(now()); let lastNum := max((select Testzyklus)[date(Datum) = myD].number(substr(Testnummer, 2, 4))); let newTZ := (create Testzyklus); newTZ.(Datum := myD); newTZ.(Tester := myTester); newTZ.('Teststraße' := number(myUR)); newTZ.('Unterschrift-check' := true); newTZ.(Testnummer := myUR + "-" + format(lastNum + 1, "0000")); popupRecord(newTZ)
Vielen Dank für die gute Mithilfe.
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 15Antworten
- 113Ansichten
-
4
Folge bereits