0

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

null
    • T_Bartzsch
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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)

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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. 

    • T_Bartzsch
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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 

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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.

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Arwin Dustdar ja super - schön die Idee mit den geteilten Buchstaben/doppelten Ziffern. Nur zur Ergänzung: da dir deine for-Schleife jetzt schon die 8 Zeichen ausgibt, kannst Du dir den substring(....,0,8) sparen... Mein Script mit zweiArrays gab ja immer Pärchen aus und deine Vorgabe bestand aus 7 Zeichen - also hab ich das Ergebnis mit substring einfach auf 7 Zeichen beschnitten...

      Was jetzt noch bleibt wäre wohl der Test auf Duplikate bei der Vergabe der Auftragsnummer

      let myNeueNummer := replace(text(myRandom), ",", "");   // statt MeinTextfeld := substring usw.
      if cnt((select TABELLE_AUFTRÄGE) [Auftragsnummer = myNeueNummer]) > 0 then 
          alert("Achtung, Auftragsnummer bereits vorhanden - Du solltest LOTTO spielen")
      else
          Auftragsnummer := myNeueNummer
      end

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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

    ?

      • T_Bartzsch
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Arwin Dustdar Na klar...