Fortlaufende RechnungsNr. bzw. ID Nummer
Hallo,
ich hätte gerne, dass meine Rechnungen, Auftragsbestätigung und Angebote fortlaufende Nummern haben.
Dafür nutze ich folgenden Code
let myYear := year(today());
let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear).substr('ID-Nr', 8));
'ID-Nr' := "RE-" + myYear + "-" + format(number(myRN) + 1, "0000");
'Datum der Rechnungsstellung' := today().
Leider bleibt hier meine ID Nr. immer gleich. Lediglich das ABS, RE oder AN ändert sich wie gewünscht.
Wo liegt hier mein Denkfehler?
40 Antworten
-
DIGITOOL said:
max((select Rechnungen where year('Datum der Rechnungsstellung')..... funktioniert nicht, wenn es mehrere Datensätze mit dem Ergebnis gibt!Wieso denn das? Wäre mir neu. ich übergeben mit (select Tabelle where Bedingung = xy) doch ein Array von Datensätzen an max(), welches genau das auch erwartet...?
-
Hi, die unterschiedlichen Längen des Präfix machen die Sache ein bisschen komplizierter. Aber ich würde es mal so versuchen (nicht getestet; kann Spuren von Flüchtigkeit enthalten):
let myTyp := switch number(Typ) do case 1: "AN" case 2: "RE" case 3: "ABS" end; let myPre := myTyp + text(year(today())) + "-"; let myPos := lenght(myPre); let lastNum := max((select Rechnungen[substr('ID-Nr', 0, myPos) = myPre]).substr('ID-Nr', myPos); 'ID-Nr' := myPre + format(number(lastNum) + 1, "0000")
Nach dem Schema könnte man auch noch weitere Präfixe berücksichtigen (wie das "ANSS", das irgendwo in einem Screenshot auftaucht).
-
Torsten Stang said:
Im Übrigen sollte dann ein contains('ID-Nr',myTyp) auch zur Einschränkung genügen...Prinzipiell schon, klar, aber es fehlt dann ja noch das Jahr. Warum zwei Filterkriterien, wenn es auch mit einem geht? ;)
Ich wollte deine Herangehensweise auch keineswegs in Zweifel ziehen. Natürlich kann man sowas auch mit split() machen. Ich hatte zugegebenermaßen auch nicht alle hier geposteten Codes genau analysiert, aber den Eindruck, dass das Problem noch nicht gelöst war. Deshalb mein Alternativvorschlag.
-
planox. pro said:
Ich wollte deine Herangehensweise auch keineswegs in Zweifel ziehen.Alles gut, habe ich keineswegs so aufgefasst.
im Zweifel bin ich ja für Alternativen auch dankbar.
-
planox. pro said:
end;Hallo planox. pro
leider klappt das nicht, hier wird in der vorletzten Zeile das letzte ; bemängelt und in der letzten Zeile das (lastNum) :(
-
Jetzt funktioniert es!! Prima, super.
Vielen Dank.
Habe dein Code aber jetzt bei Trigger bei neuem Datensatz und Trigger nach Änderung einfügen müssen.
Vielen Dank Euch allen für die Unterstützung!!
-
Doch noch eine kleine Frage dazu, der Code legt das Rechnungsdatum fest (today), kann man es nicht auch so programmieren, dass ich das Datum manuell verändern kann? (Mache meine Rechnungen meistens alle zusammen eine Woche vor dem eigentlichen Rechnungstermin fertig)
Wenn ich es ja weg lasse und das Datum manuell dann eintrage wird eine Rechnungsnummer übersprungen:
also von RE-2022-0001 direkt auf RE-2022 - 0003, statt auf RE-2022-0002.
-
planox. pro said:
dGuten Morgen.
Genau, ich habe die Vorlage von Ninox verwendet, da ich hier total Neuling bin und überprüfe, ob Ninox eine Lösung für uns wäre.
Ich habe die alte Formel jetzt gelöscht und dafür in "Typ" deine Formel integriert.
Funktioniert sehr gut bei AN und bei ABS, nur bei RE wir keine ID generiert wenn ich ins Feld klicke.
-
Es klappt.... Hab den "Standardwert" gelöscht und den Code auch nochmal bei der Tabelle eingefügt ohne Zusatz
'Datum der Rechnungsstellung' := today()
und jetzt kann ich das Datum verändern und die Rechnungsnummern, bzw Angebotsnummern sind fortlaufend.
Vielen Dank Euch allen bei der Unterstützung!!!
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 40Antworten
- 179Ansichten
-
5
Folge bereits