0

Random number formula

Hello, I would like to create a formula for a random invoice number upon invoice creation. I would like the formula to be 9 numbers long, starting with "R285"

 

How do I do this?

10 replies

null
    • SMoore
    • 6 yrs ago
    • Reported - view

    Can anyone help?

    • Leonid_Semik
    • 6 yrs ago
    • Reported - view

    'Invoice number' as a text field.

    as formula for the Button:

    ---

    let CC :="0123456789"
    let LL := length(CC);
    'Invoice number' := "R285";
    for II from 0 to 9 do
    'Invoice number' := 'Invoice number'+ substr(CC, floor(random() * LL), 1)
    end

    ---

    Leo

    • SMoore
    • 6 yrs ago
    • Reported - view

    Is there a way to do this without having to click a button? 

    • Leonid_Semik
    • 6 yrs ago
    • Reported - view

    As trigger on create:

    'Invoice number':="R285"+format (floor(random ()*1000000000),"000000000")

     

    Leo

    • Leonid_Semik
    • 6 yrs ago
    • Reported - view

    or with duplicate check. Table name :"Invoice", text field: 'Invoice number'. Trigger on create:

    ----

    let DD := 1;
    while DD < 2 do 
    'Invoice number' := "R285" + format(floor(random() * 1000000000), "000000000");
    let IN := 'Invoice number';
    DD := if cnt((select Invoice)['Invoice number' = IN]) > 1 then
    1
    else
    3
    end
    end

    ---

    Leo

    • SMoore
    • 6 yrs ago
    • Reported - view

    Awesome, thank you!!

    • Maurice
    • 3 yrs ago
    • Reported - view

    Hallo Leo,

    habe den Code verwendet. Bekomme aber Duplikate. Mein Fall ist ein wenig komplexer, aber sollte doch gehen.

    Ich habe in der Tabelle "01 RuR" eine Feld Kursjahrgang (da stehen Jahreszahlen vierstellig drinnen). Die werden auf die beiden Endziffern xx gekürzt, um dann die Ausgabe Kxx-yyy zu erzeugen mit der Zufallszahl yyy (dreistellig). Dazwischen noch die if-Schleife, die mir ein Kxx-000 vermeiden soll.

    let DD := 1;
    let thisKurs := Kursjahrgang.Jahrgang;
    let Kurs := substr(text(Kursjahrgang.Jahrgang), 2);
    let Auswahl := (select '01 RuR' where Kursjahrgang.Jahrgang = thisKurs);

    while DD < 2 do
    Auswahl.('RuR-ID' := "K" + Kurs + "-" + format(floor(random() * 1000), "000"));
    if = 'RuR-ID' = "K" + Kurs + "-000" then
    'RuR-ID' := "K" + Kurs + "-001"
    end;
    let RID := 'RuR-ID';
    DD := if cnt((select '01 RuR')['RuR-ID' = RID]) > 1 then
    1
    else
    3
    end
    end

    Wo ist der Fehler?

    Maurice

    • Leonid_Semik
    • 3 yrs ago
    • Reported - view

    Hallo Maurice,

    verstehe ich richtig, 01 RuR ist eine Untertabelle von der Tabelle Kursjahrgang und du erstellst die Datensätze aus dem Kursjahrgang in dem du auf den Plus klickst.

    Es ist so, dass bei dieser Vorgehensweise Zuerst der Datensatz erstellt wird, dann Trigger nach neu durchgeführt und dann die Verknüpfungen gesetzt. Das heißt - im Moment der Prüfung  (select '01 RuR' where Kursjahrgang.Jahrgang = thisKurs) ist Kursjahrgang noch nicht gesetzt.

    Leo

    • Maurice
    • 3 yrs ago
    • Reported - view

    Hallo Leo,

    ja, "01 RuR" ist Untertabelle von Kursjahrgang. Die Datensätze in "01 RuR" liegen schon vor (mit csv Import), ebenso der Jahrgang in der Tabelle "Kursjahrgang". Der Import liefert aber keinen Inhalt für das Feld "RuR ID" in "01 RuR". Das Feld "RuR ID" möchte ich dann per Button mit dem Zufallsstring Kxx-yyy füllen.

    Da in der Tabelle "01 RuR" ja mehere Jahrgänge 2021, 2022 usw vorkommen, sollen aber die generierten Zufalls-ID nur auf den Jahrgang beschränkt werden, dessen aktueller Datensatz gerade betrachtet wird. Deshalb vorne die Auswahl-Defintion. Alte Jahrgänge sperre ich über die Sichtbarkeit des Buttons mit Hilfe einer Datumssperre.

    Maurice

    • Maurice
    • 3 yrs ago
    • Reported - view

    Hallo Leo,

    habe es gelöst. In deinem Code gehst du ja von einem "create" aus, bei mir sind die Datensätze vorhanden. Also brauche ich eine p-Schleife.

    let thisKurs := Kursjahrgang.Jahrgang;
    let Kurs := substr(text(Kursjahrgang.Jahrgang), 2);
    for p in (select '01 RuR')[Kursjahrgang.Jahrgang = thisKurs] do
    let DD := 1;
    while DD < 2 do
    p.('RuR-ID' := "K" + Kurs + "-" + format(floor(random() * 1000), "000"));
    if p.'RuR-ID' = "K" + Kurs + "-000" then
    p.('RuR-ID' := "K" + Kurs + "-001")
    end;
    let RID := p.'RuR-ID';
    if cnt((select '01 RuR')['RuR-ID' = RID]) > 1 then
    DD := 1
    else
    DD := 3
    end
    end

    end;

    Danke für die Ünterstützung.

    Maurice

Content aside

  • 3 yrs agoLast active
  • 10Replies
  • 3730Views