0

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

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Michi.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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 

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Michi.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke dir