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
-
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(); -
@Robert
Vielen Dank jetzt klappt es, auch nachdem ich alle zahlen manuell fortgelegt habe.
Wo war nun ein fehler ?
-
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");
-
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. -
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()
Content aside
- vor 2 JahrenZuletzt aktiv
- 5Antworten
- 183Ansichten