0

Trigger nach Änderung ! 8 gleiche Nummern nacheinander

Hallo habe ein Problem. 

 

Habe ein Trigger die mir immer automatisch Tabellennummerierung macht mit Jahrgang und nummer.

 

Jedoch macht es mir 8 mal die gleiche Nummer erst dann macht er weiter und wieder 8 mal 

 

let myYear := year(today());
let myRN := max((select Warenbegleitscheine where year(Bestelldatum) = myYear).substring('ID-Nr', 9, 13));
'ID-Nr' := "WBS-" + myYear + "-" + format(number(myRN) + 1, "0000");
Bestelldatum := today()

 

Was ist daran falsch? Oder wie soll man es am besten lösen?

Danke

5 Antworten

null
    • Ninox PremiumSolution Partner
    • derdatenoptimierer
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Ramiro,

     

    versuch es mal so: 

     

    let myYear := year(today());
    let myRN := number(max((select Warenbegleitscheine where year(Bestelldatum) = myYear).substring('ID-Nr', 9, 13))) + 1;
    'ID-Nr' := "WBS-" + myYear + "-" + format(number(myRN), "0000");
    Bestelldatum := today();

    • Ramiro_Fernandes
    • vor 2 Jahren
    • Gemeldet - anzeigen

    @Robert

     

    Vielen Dank jetzt klappt es, auch nachdem ich alle zahlen manuell fortgelegt habe. 

    Wo war nun ein fehler ? 

    • Ninox PremiumSolution Partner
    • derdatenoptimierer
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ohne jetzt Deine Anwendung komplett gesehen zu haben: Du holst Dir mit max((select(... zwar die größte ID-Nr aus Deiner Tabelle, aber das Ergebnis was Du Dir in die Variable myRN schreibst, ist vom Typ string (Text). Zahlen werden also nicht als Zahlen, sondern als Text interpretiert, was zu Problemen führen kann.

    Mit number(max((select(... erhälst Du als Ergebnis vom Typ Nummer. Das Ergebnis wird also entsprechend mathematisch interpretiert.

    Bei meinem Codebeispiel wird bei der select Abfrage von myRN das Ergebnis gleich als Nummer in der Variablen gespeichert und +1 gerechnet. Du könntest Dir also bei der 'ID-Nr' das zusätzliche number(.. sogar sparen. Also:

    'ID-Nr' := "WBS-" + myYear + "-" + format(myRN, "0000");

    • Ramiro_Fernandes
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Robert, vielen Dank fürs erklären.

    Habe gestern alles neu eingetragen und es funktionierte. Heute wollte ich weitere Warenbegleitscheine eintragen und siehe da, es geht einfach von 41 zurück auf die 27.

    Verstehe es einfach nicht wieso, will auch nicht alles neu eintragen.

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

    Ich vermute, das Problem liegt in der Anwendung von max() auf einen String. Da ist "9" halt größer als "12", weil einfach von links nach rechts sortiert wird. Ich würde es mal so versuchen:

     

    let myYear := year(today());
    let myRN := max((select Warenbegleitscheine where year(Bestelldatum) = myYear).number(substring('ID-Nr', 9, 13)));
    'ID-Nr' := "WBS-" + myYear + "-" + format(number(myRN) + 1, "0000");
    Bestelldatum := today()