fortlaufende Nummer nach löschen doppelt vergeben ???
Hallo zusammen,
ich habe alte nicht mehr benötigte Schadennummern gelöscht. Nun ist es aber so das ich bestehende Nummern doppelt bekomme. Das fängt bei der endnummer 48 an. Damit es wieder richtig läuft muss ich jetzt doppelte Nummern mit leeren Datensatz erzeugen bis ich bei der letzten (52) angelangt bin. Dann läuft es wieder wie gehabt.
ist jetzt hier nicht so schlimm, aber läst sich sowas vermeiden?
if Schadennummer = null then
let myYear := format(Schadenstag, "YY");
"YY";
Schadennummer := "S" + "-" + "01" + myYear + format(cnt((select 'Haftpflichtschäden')[substr(Schadennummer, 4, 2) = myYear]) + 1, "000")
end
4 Antworten
-
Hallo, mit dem Skript wird die Schadennummer anhand der Zahl existierender Datensätze generiert. Werden nun Datensätze gelöscht, ist deren Anzahl und damit auch die Nummer wieder geringer.
Eine Alternative ist, die tatsächlich höchste vergebene Nummer zu ermitteln und um 1 zu erhöhen.
if Schadennummer = null then
let myYear := format(Schadenstag, "YY");
let maxNr := max((select 'Haftpflichtschäden').number(substr(Schadennummer, 6, 3)));
Schadennummer := "S-01" + myYear + format(maxNr, "000")
end
Allerdings wird dabei nicht das Jahr geprüft, das heißt, 2021 würde einfach weitergezählt. Falls die laufende Nummer aber mit jedem Jahr neu beginnen soll, kann man das als Filter beim "select" angeben. Da das Jahr zudem aus dem Datumsfeld "Schadenstag" extrahiert wird, könnte man sicherheitshalber auch dieses gleich auf Inhalt prüfen:
if Schadennummer = null and Schadensdatum != null then
let myYear := format(Schadenstag, "YY");
let maxNr := max((select 'Haftpflichtschäden' where substr(Schadennummer, 4, 2) = myYear).number(substr(Schadennummer, 6, 3)));
Schadennummer := "S-01" + myYear + format(maxNr + 1, "000")
end
-
Die letzte Variante wäre die richtige. Danke für den Tipp, setz ich gerne neu um. Betrifft ja mehrere Nummern generierungen.
Blöde Frage. Ist es möglich die fehlenden Nummern per Skript zu finden und Schluss endlich zu generieren?... ist abstrakt die Frage, da das warscheinlich nie vorkommen wird. Aber rein theoretisch
-
Wenn man die Schadennummern nach dem empfohlenen Verfahren generiert, dann spielt es keine Rolle, ob zwischendrin Datensätze gelöscht wurden, weil immer nach der höchsten vorhandenenen Nummer gesucht wird. Wenn man gelöschte Nummern aus irgendwelchen Gründen dennoch wieder herstellen will, könnte man das so versuchen (z. B. mit einer Schaltfläche):
let myYear := format(today(), "YY");
let myNrn := ((select 'Haftpflichtschäden' where substr(Schadennummer, 4, 2) = myYear) order by Schadennummer).substr(Schadennummer, 6, 3);
let myString := concat(myNrn);
let lastNr := number(last(myNrn));
for x from 1 to lastNr do
let myNum := format(x, "000");
if index(myString, myNum) < 0 then
let newNr := (create 'Haftpflichtschäden');
newNr.(Schadennummer := "S-01" + myYear + myNum)
end
end
Allerdings bezieht sich das der Einfachheit halber nur auf Nummern des aktuellen Jahres ("today()"). Und es würden halt nur leere Datensätze mit der jeweiligen Schadennummer erzeugt. Auf die Nummerierung hätte das wie gesagt keinen Einfluss.
Wie immer alles ohne Gewähr und ohne Anspruch auf Perfektion.
-
Danke dir
Content aside
- vor 4 JahrenZuletzt aktiv
- 4Antworten
- 474Ansichten