0

Fortlaufende Nummer - Neuer Datensatz

Hallo

Damit die Datensätze immer eine eindeutige Identifikation erhalten mit einem Tageszähler habe ich folgendes Script bei neuem Datensatz eingefügt.

 

let myDatum := format(today(), "YYMM");
let myLaufNr := cnt(select 'Pixel Anweisung [PAW]' where substr('PAW ID', 0, 8) = myDatum) + 1;
'PAW ID' := "PAW" + "-" + myDatum + format(myLaufNr, "000")

 

Ziel ist es eigentlich JahrMonatFortlaufend also "Jahr zwei stellen" Monat "zwei stellen" Fortlaufende nummer "dreistellig, angefangen bei 001"

 

Das Berechnungfeld `PAW ID`ist vorhanden ja.

5 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Sandro,

    dem Berechnungsfeld kann man keine Werte mit := zuweisen. Und die Zählung der Datensätze mit cnt() führt zu einem Problem wenn ein Datensatz in der Mitte gelöscht wird. z.B. du hast 9 Datensätze im März 2021. Die Höchste Nummer ist 2103009. Die nächste wäre dann 2103010. Wenn du aber (warum auch immer) den Datensat nummer 2103003 löschst, kriegst du für den neuen Datensatz die Nummer 2103009.
    Mein Vorschlag: 'PAW ID' als Textfeld anzulegen und die Formel:

    let myDatum := format(today(), "YYMM");
    let myLaufNr := max((select 'Pixel Anweisung [PAW]')[substr('PAW ID', 4, 4) = myDatum].number(substr('PAW ID', 8))) + 1;
    'PAW ID' := "PAW" + "-" + myDatum + format(myLaufNr, "000")

     

    Leo

    • GrischaMedia.ch
    • grischabock
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo

     

    Mein Fehler, das Feld war schon ein Textfeld. Nun mit deiner Anpassung klappt es wunderbar wider. Verstehe die Problematik auch mit dem löschen und den ID`s

     

    Danke für deine Unterstützung

    gruss Sandro

    • Tierschutzverein_Rotenbu
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo,

     

    ich habe das oben bei mir auch ausprobiert, aber leider klappt es nicht.
    Kleine Anmerkung ich bin völlig neu bei Ninox.
    Meine Mitgliedsnummer besteht aus 5 Zahlen. Die erste beiden sind das Jahr zweistellig und die letzten 3 die fortlaufende Nummer in diesem Jahr. Hat des vielleicht etwas mit den Zahlen hinter Mitgliedsnummer zu tun?
    wenn ich das Format von today auf "YYYY" setze funktioniert es.
    Unten einmal mein Code.

    let AktJahr := format(today(), "YY");
    let LaufNr := number(max((select Mitgliederliste where substr(Mitgliedsnummer, 0, 4) = AktJahr).substr(Mitgliedsnummer, 5, 3))) + 1;
    Mitgliedsnummer := AktJahr + format(LaufNr, "000")

     

    Danke im Voraus.

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tierschutzverein Rotenburg 

      Wenn die Mitgliedsnummer ein Textfeld ist und aus fünf Ziffern nach dem Schema JJXXX besteht, dann müssten die substr()-Parameter angepasst werden:

      let AktJahr := format(today(), "YY");
      let LaufNr := number(max((select Mitgliederliste where substr(Mitgliedsnummer, 0, 2) = AktJahr).substr(Mitgliedsnummer, 2, 3))) + 1;
      Mitgliedsnummer := AktJahr + format(LaufNr, "000")
      

      Zur Erklärung: substr() erwartet als Parameter den Startpunkt (Zählung beginnt bei 0) und die Länge des Strings, der ausgelesen werden soll.

      • Tierschutzverein_Rotenbu
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro Super Danke, dass klappt perfekt.
      ich hatte soviel mit den Zahlen rumprobiert aber es hat nicht geklappt.

      Danke für die Erklärung.

Content aside

  • vor 1 JahrZuletzt aktiv
  • 5Antworten
  • 496Ansichten
  • 2 Folge bereits