Fortlaufende Nummer
Hallo Leute, wie kann ich eine fortlaufende Nummer erstellen, z.B. Kundennummer: 001,002 oder sogar K001, K002 und F003, K004 damit man noch eine Variable hinzufügen kann.
Vielen Dank
25 Antworten
-
Hallo,
fortlaufende Nummern kann man mit einem Skript auf Tabellenebene vergeben:
- Erstellen Sie zunächst ein Textfeld für die "Kundennummer".
- Öffnen Sie jetzt den Tabelleneditor, auf der linken Seite finden "Skript ausführen bei Erstellen eines neuen Datensatzes"
- Nutzen Sie folgendes Skript ("Kunden" ist hier der Name der Tabelle mit den Kunden:
Kundennummer:= "K"+format(cnt(select Kunden),"000")
Viele Grüße und schöne Ostern, Alex
-
Hallo Alex, und wie kann ich einen Startpunkt definieren? Ich will z.B. bei 001263XX beginnen. Von dort aus soll bei Neuanlage eines Datensatzes in 1er-Schritten hochgezählt werden. Im Augenblick sieht das bei mir so aus:
Belegnummer := format(cnt(select Dokumente), "000000") + "XX"
Wenn ich den ersten Datensatz anlege, heißt der 000001XX. Den ändere ich dann händisch ab auf 001263XX. Dann sollte der nächste datensatz mit 001264XX weitergehen. Tut aber nicht. Der heißt dann wieder 000002XX.
Danke vorab und viele Grüße
-
Ich heiße zwar nicht Alex, aber so ähnlich, deshalb versuche ich es mal (beim Anlegen eines neuen Datensatzes):
let LaufNr := max((select Dokumente).number(Belegnummer)) + 1;
Belegnummer := format(LaufNr, "00000000") -
Danke für die Hilfe. Funktioniert aber leider auch nicht. Hab den gleichen effekt?!
-
Man müsste natürlich auch hier einmal die erste Nummer auf den Startwert setzen. Dann sollte es gehen. Bei mir funktioniert es jedenfalls.
-
-
OK. Bei mir macht wohl das (+ "XX") ein Problem. Hatte das so:
let LaufNr := max((select Dokumente).number(Belegnummer)) + 1;
Belegnummer := format(LaufNr, "000000") + "XX"Ich habe das mit dem XX jetzt anders geregelt. Jetzt funktioniert das, wie ich es wollte. Danke!!!
Darf ich noch eine Frage stellen? Ich möchte über eine Schaltfläche in ein Textfeld einen aus verschiedenen Feldern zusammengesetzten Text generieren. Diesen möchte ich dann später kopieren und als Dateinamen verwenden. Folgendes Format stelle ich mir vor:
20181025_001263BS
Jetzt habe ich die Schaltfläche folgendermaßen programmiert:
let txt := "YYYYMMDD" + "_" + 'Beleg Nr.';
Belegname := txtDas umgekehrte Datum YYYYMMDD ist mein Problem. wie bekomme ich da automatisch das aktuelle JahrMonatTag rein?
-
format(today(),"YYYYMMDD")
Leo
-
Ihr seid Spitze, danke!!! (bin absoluter Laie, komme aber echt gut zurecht mit dem Programm ;)
-
Ach so, da sollten tatsächlich die Buchstaben "XX" stehen? Ich dachte, das "XX" sei als Platzhalter für die letzten beiden Stellen der fortlaufenden Nummer gedacht.
Mit einer Buchstabenfolge am Ende sähe es so aus:
l
et LaufNr := number(max((select Dokumente).substr(Belegnummer, 0, 6))) + 1;
Belegnummer := format(LaufNr, "000000") + "XX"
Das andere Problem mit dem zusammengsetzten Text sollte sich folgendermaßen lösen lassen:
Belegname := format(today(), "YYYYMMDD") + "_" + Belegnummer
Infos zu den "Formatierungsfunktionen" finden sich im Handbuch:
https://ninoxdb.de/de/manual/berechnung/funktionen -
Wahrscheinlich eine einfache Frage, aber wenn ich die Buchstabenfolge VOR die LaufNr. setzen will, wie mach ich das?
Ich habe es mit "XX" + format( probiert, das scheint aber nicht zu funktionieren...Danke schonmal für Antworten.
-
Hallo Markus,
wenn das XX vorne steht stimmt die Bestimmung der höchsten Belegnummer nicht, die muss man dann mit anpassen:
let LaufNr := number(max((select Dokumente).substr(Belegnummer, 2, 6))) + 1;
Belegnummer := "XX"+format(LaufNr, "000000") + "XX"
-
Ah ja, sry da stand ich auf dem Schlauch. Danke dir :)
-
Wie verhält es sich mit der fortlaufenden Nummerierung, wenn in die selct-Abfrage zusätzliche eine bedingung where eingebaut wird?
Ich habe z.B. die Tabelle Rezepte und dazugehörige Schritte. Wenn ich in der Tabelle Rezepte in der Ansicht der Schritte (Feld-Ansicht) auf das Plus klicke, dann wird dem Schritt automatisch das aktuelle Rezept hinzugefügt.
Folgender Code ("bei neuem Datensatz folgendes Script ausführen" in der Tabell Schritte) erhöht aber nicht wie gewünscht das Feld der Rangfolge um +1 sondern liefert immer den Wert 2.
let myR := this.Rezept;
let myN := cnt(select Schritte where Rezept_uu = myR);
Rangfolge := myN + 1
Ich gehe davon aus, dass das daran liegt, dass das Script ausgeführt wird, bevor der "Schritt" dem "Rezept" automatisch zugeordnet wurde. Kann man das irgendwie umgehen?
(Ich nutze die Mac-Version)
-
Richtiger code ist natürlich:
let myR := this.Rezept.Nr;
let myHN := cnt(select Schritte where Rezept.Nr = myR);
Rangfolge := myHN
-
Heidenei...
let myR := this.Rezept.Nr;
let myN := cnt(select Schritte where Rezept.Nr = myR);
Rangfolge := myN + 1
-
hm, die Schritte sind mit dem Rezept verknüpft?
let myN := cnt(Rezept.Schritte)
Rangfolge := myN
-
Wesentlich bessere und einfachere Denkweise! Und ja, die Schritte sind mit dem Rezept verknüpft.
Aber leider ebenfalls nicht erfolgreich: jetzt wird bei einem neuen Schritt über die integrierte Schaltfläche 0 eingetragen.
Auch hier scheint es so, als würde erst das Script ausgeführt und dann die automatische Verknüfung erstellt.
-
Ein Button mit folgendem Code macht genau das, was ich mir vom Plus-Symbol wünschen würde.
let myR := this;
let myN := (create Schritte);
myN.(
Rezept := myR;
Rangfolge := cnt(Rezept.Schritte)
)
-
dann erstell einen neuen Schritt doch über einen Button:
let my := this;
let myN := cnt(my.Schritte)+1;
let mySchritt := (create Schritte);
mySchritt.(Rezept := my;
Rangfolge := myN);
popupRecord(mySchritt)
-
okay, bist selbst drauf gekommen - wenn Du die Verknüpfung in 'Rezept' als ComboBox darstellst und Deinen Button als "+" nebendran setzt, bist Du eigentlich UI-mässig gleich unterwegs.
-
alternativ könntest Du den Code auch in den Änderungstrigger der Tabelle 'Schritte' packen, dann würde die Rangfolge spätestens nach der ersten Eingabe irgendeines Feldes ausgefüllt...
if not Rangfolge then
let myN := cnt(Rezept.Schritte)
Rangfolge := myN
end
-
was mir da gerade einfällt und evtl. mal einen Versuch beim Trigger zum neuen Datensatz wert wäre:
"Sie können jetzt Ihre Skripte anweisen, auf das Ende einer Synchronisierung zu warten, bevor Sie server-basierte Trigger oder Befehle ausführen. Damit stellen Sie die Verfügbarkeit der Daten auf dem Server sicher, bevor der Trigger aktiv wird.Die neue Funktion waitForSync() sorgt dafür, dass der nächste Synchronisationszyklus vor der Ausführung des restlichen Codes abgeschlossen ist.Syntax: waitForSync() "
Also einfach mal
waitForSync()
im Code voranstellen. -
waitForSync() führt dazu, dass bei
waitForSync();
Rangfolge := cnt(Rezept.Schritte)
garnichts eingetragen wird. Ohne waitForSync() wird 0 eingetragen.
Der Button funktioniert wie gewünscht. Die Darstellung Combo-Box funktioniert leider nur auf der "falschen" Seite der Verknüpfung.
-
Okay, stimmt, sorry. Ich löse es in der Regel so, dass ich "Untertabellen" nicht sichtbar stelle und Ansichten + Button stattdessen verwende...
Content aside
- vor 3 JahrenZuletzt aktiv
- 25Antworten
- 8089Ansichten