Eine zufällige Auftragsnummer nach Muster "M3D5Z9P" erstellen
Geht das irgendwie? Ich habe die Funktion random() gefunden, aber die will ja Zahlen randomisieren.
Hat jemand eine Idee, kann man das tweaken ?
Danke.
8 Antworten
-
Vielleicht hat jemand einen kürzeren Weg ... hier mal eine Möglichkeit. Als Script in einem Formelfeld...
let myArray1 := ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
let myArray2 := ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
let myRandom := for i in range(0, 4) do
let myPosition1 := floor(random() * 10);
let myPosition2 := floor(random() * 26);
item(myArray2, myPosition2) + item(myArray1, myPosition1)
end;
substring(replace(text(myRandom), ",", ""), 0, 7)Wenn es auf einem Button laufen soll, kannst Du den substring in der letzten Zeile einem Textfeld zuordnen.
TEXTFELD := substring(replace(text(myRandom), ",", ""), 0, 7)
-
Haha, sehr cool. Das klappt schon mal vielen Dank.
Könnte ich auch einen Array nutzen und den um Buchstaben "und" Zahlen auffüllen, also 36 Zeichen, und dann die Ausgabe eben auf den ganzen String randomisieren?Ich habe ein bisschen Schwierigkeiten, den Code zu verstehen.
-
Nein, wenn Du das nach deiner Vorgabe brauchst - abwechselnd Buchstabe und Zahl - dann geht das nur so...
Das script macht einfach nur zwei Arrays. Dann wird per Zufall eine Stelle aus dem jeweiligen Array in der jeweiligen Variable myPosition abgelegt. Da random Werte zwischen 0 und 1 wiedergibt mit * 10 bzw. 26 genommen. Mit item() gibst Du dann aus dem jeweiligen Array die zufällige Position wieder ... item(myArray2, 12) gibt das M und item(myArray1, 8) gibt die 9 (Arrays fangen mit 0 an). Du hast also M9 .....
Das läuft in der for-Schleife 4 mal und wird dabei als Array in die Variable myRandom geschrieben. Sieht dann zB so aus [M9,C4,D7,E3]
die letzte Zeile substring() macht aus dem Array einen Text "M9,C4,D7,E3" - entfernt die Kommata (replace Komma "," durch nix "") ergibt "M9C4D7E3" und gibt davon nur die Stellen 0-7 wieder ...
Wenn es einfach nur 7 Stellen Buchstaben und Zahlen sein sollen, ginge das auch in einem Array
-
Guten MorgenT. Bartzsch und vielen Dank für die ausführliche Beschreibung. Damit versuche ich mal es so umzubauen dass an jeder Position wahlweise eine Zahl oder ein Buchstabe ausgegeben wird.
-
Das hat bestens geklappt. Ich poste mal meinen Umbau deines Scripts, für den Fall das jemand irgendwann darauf stößt und es gebrauchen kann.
Ich habe die Zahlenreihe doppelt in den Array gepackt, damit es zu einem ausgeglicheneren Verhältnis Zahlen/Buchstaben innerhalb des Arrays kommt.
Ist in diesem Fall auf einen Button gelegt:
let myArray := ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
let myRandom := for i in range(0, 8) do
let myPosition := floor(random() * 46);
item(myArray, myPosition)
end;
MeinTextfeld := substring(replace(text(myRandom), ",", ""), 0, 8) -
T. Bartzsch super! Vielen Dank.
Was jetzt noch bleibt wäre wohl der Test auf Duplikate bei der Vergabe der Auftragsnummer
Genau daran hatte ich auch schon gedacht. Danke für das Script. Könnte man das nicht gleich automatisieren, etwa so:
if cnt((select TABELLE_AUFTRÄGE) [Auftragsnummer = myNeueNummer]) > 0 then
hier läuft das Script erneut
else
Auftragsnummer := myNeueNummer
end
?
Content aside
- vor 1 JahrZuletzt aktiv
- 8Antworten
- 56Ansichten
-
2
Folge bereits