0

Feld mit automatischer fortlaufenden Nummer

Hallo liebe Ninox user,

Kann mir jemand sagen, was ich tun muss, damit ein Feld eine automatisch fortlaufenden Nummer generiert. 

Herzlichen Dank für eure geschätzte Hilfe. 

Thomas

13 Antworten

null
    • SK88
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo,

    Ninox generiert immer ein Feld mit einer fortlaufenden Nummer.

     

    Gruß

    • Thomas_N
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Stimmt, habe ich gar nicht richtig angeschaut. Wie kann ich das Format beeinflussen z.B. 2018-XXX?

    Thomas

    • SK88
    • vor 6 Jahren
    • Gemeldet - anzeigen

    einfach ein neues Feld vom Typ "Berechnung" anlegen und bei Funktion folgendes eintragen:

    "2018-" + Nr

    • Martin_K
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Das kann er aber nicht immer verwenden da die ID sofern sie gelöscht wird nicht mehr vergeben wird..

    das ist das Problem das ich selbst seit gut einer Woche versuche zu lösen..

    • Thomas_N
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Das passt ja schon mal. Das mit der ID verstehe ich und ist gut zu wissen. In meinem Fall stört mich der Verlust der gelöschten ID aber nicht besonders. Das heisst also, dass man die fortlaufende Nummer ansich nicht beeinflussen kann. Ich hätte jetzt z.B. am liebsten mit "2018-101" begonnen und dann hoch zählen lassen. Ich dachte, dass das mit einem # Zeichen vielleicht ginge. Irgend eine Idee?

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

    Es gibt in Ninox verschiedene Möglichkeiten, laufende Nummern zu erzeugen. Deshalb ist es immer gut, etwas Kontext mitzuliefern, wofür die Nummer stehen, welchen Aufbau sie haben und wie sie erzeugt werden soll.

     

    Die intern vergebene Datensatznummer würde ich allerdings nie dazu verwenden.

     

    In diesem Fall soll es wohl eine dreistellige Nummer mit vorangestellter Jahreszahl sein. Wenn sie automatisch bei jedem Anlegen eines neuen Datensatzes generiert werden soll, könnte man in den Optionen der Tabelle unter „Bei neuem Datensatz folgendes Script ausführen“ schreiben:

     

    let AktJahr := year(today());
    let LaufNr := number(max((select TABELLE where substr(NUMMER, 0, 4) = AktJahr).substr(NUMMER, 5, 3))) + 1;
    NUMMER := AktJahr + "-" + format(LaufNr, "000")

     

    Wie immer nach bestem Wissen und Gewissen, aber ohne Gewähr.

    • Thomas_N
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Ja, eine dreistellige Nummer mit vorangestellter Jahreszahl soll es werden, das hast du richtig verstanden. Dein Script habe ich eingesetzt, bekomme aber noch kein funktionierendes Resultat. Da mach ich noch etwas falsch.

     

    Im Feld mit dem Namen "RgNr" sollte am Schluss diese resultierende Nummer stehen. "RgNr" befindet sich in der Tabelle "Rechnungen". In dieser Tabelle habe ich ein Feld mit der Verknüpfung zu der Tabelle “K-Erwachsene“. Wenn ich für dieses verknüpfte Feld Änderungen vornehme gehe ich zu "Nach Änderungen folgendes Script ausführen“. Dort eingetragen steht bereits folgendes Script, welches auch funktioniert. 

    Anrede := text('K-Erwachsene'.Anrede);
    Titel := 'K-Erwachsene'.Titel;
    Vorname := 'K-Erwachsene'.Vorname;
    Nachname := 'K-Erwachsene'.Name;
    PLZ := 'K-Erwachsene'.PLZ;
    Ort := 'K-Erwachsene'.Ort;
    Adresse := 'K-Erwachsene'.Adresse;

    RgNr := let AktJahr := year(today());
    let LaufNr := number(max((select TABELLE where substr(NUMMER, 0, 4) = AktJahr).substr(NUMMER, 5, 3))) + 1;
    NUMMER := AktJahr + "-" + format(LaufNr, "000")

    Dein Skript ist der fett gedruckte Teil oben, welchen ich zum bestehenden dazu gesetzt habe. Ich bekomme eine Meldung: Ende erwartet....usw. Kannst du aus dieser Beschreibung etwas machen? Danke im voraus.  

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

    TABELLE stand für den tatsächlichen Namen deiner Tabelle, NUMMER für den des Feldes. Diese Bezeichnungen müsste man natürlich entsprechend austauschen. Also, wenn die Tabelle "Rechnungen" heißt und das Feld "RgNr":

     

    let AktJahr := year(today());
    let LaufNr := number(max((select Rechnungen where substr(RgNr, 0, 4) = AktJahr).substr(RgNr, 5, 3))) + 1;
    RgNr := AktJahr + "-" + format(LaufNr, "000")

     

    Das müsste eigentlich funktionieren. Wobei "RgNr" ein Textfeld sein sollte.

    • Thomas_N
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Fantastisch! Funktioniert einwandfrei. Vielen Dank!

    Thomas

    • MGrosse
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo,

    ich habe eine ähnliche Anwendung. Nur möchte ich ein Gesprächsprotokoll eine laufende Nummer haben. Dabei soll von dem zugeordneten Projekt (inerne Projektnummer im Feld "Projekt-Nr") auf Basis des letzten Protokoll des Projektes die neue Projektnummer vergeben werden.

    Beispiel:  Projekt 15 hat noch keine Gesprächsnotiz  daraus folgend müsste die Numemr P015-01 kommen. Wenn schon zwei vorhanden sind sollte P01-03 kommen.

    Die Gesprächsnotizen sind mit den Projekten N:1 ohne Komposition verknüpft. 

    Ich wäre dankbar, wenn mir jemand einen Lösungsansatz zeigen könnte.

     

    Vielen Dank

    Martin

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Martin. Angenommen die Tabelle heißen Projekte und Gesprächsnotizen. Und die Verknüpfungsfelder sind auch nicht umbenannt worden. Dann würde ich in der Tabelle Gesprächsnotizen ein Berechnungsfeld mit der Formel:

    ---

    let my:=number(this.Nr);

    let myNR:=cnt (Projekte.'Gesprächsnotizen'[number(Nr)<=my]);

    Projekte.'Projekt-Nr'+"-"+format (myNR,"00")

    ---

    Zur Erklärung: zuerst merkt sich Ninox die aktuelle ID als Zahl. dan geht er in die Haupttabelle Projekte zu dem verknüpften Projekt  und zählt dort die Notizen mit ID weniger oder gleich der aiktuellen ID.

    Vorteil bei berechnetem Feld ist es, wenn eine Zwischennotiz gelöscht wird, werden die Nummern alle nachgerückt. Wenn es nicht erwünscht ist kannst due diese Formel als Trigger bei neu einstellen

    let my:=number(this.Nr);

    let myNR:=cnt (Projekte.'Gesprächsnotizen'[number(Nr)<=my]);

    'Notiz-Nr':=Projekte.'Projekt-Nr'+"-"+format (myNR,"00")

     

    Leo

    • MGrosse
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Danke, ich werde es gleich ausprobieren und melde mich dann.

    • MGrosse
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Vielen Dank. Das hat sofort funktioniert!

    Martin

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 13Antworten
  • 5693Ansichten