Über den Workflow werden zum passenden Ereignis Vorgangsnummern aus einem Nummernkreis gezogen. Dazu können Nummerntemplates verwendet werden. Diese unterscheiden z.B. Angebote, Lieferscheine, Rechnungen und beliebige andere Vorgänge. Darüber hinaus kann der Nummernkeis je nach Wunsch je Kalenderwoche, Monat und Jahr erneut von 1 beginnen.
Wird einem kaufmännischem Vorgang (Angebot bis Rechnung) eine Vorgansnummer zugewiesen so ist dieser nicht mehr überschreibbar (in anderen Vorgangstypen muss dies im Workflow zusätzlich abgefangen werden). Das Löschen eines Vorganges mit Vorgangsnummer ist lediglich über eine Stornierung möglich.
Im System wird ein Template generiert und dieser entspricht einem Nummerkreisnamen. So sucht dann das System nach dem Nummernkreis "String" und legt diesen automatisch an, sollte dieser nicht vorhanden sein. Ab diesem Zeitpunkt wird der Platz stets um 1 erhöht. Durch diese Technik können beliebige Nummerkreise generiert werden.
Mit Belegung über "#nof" wird eine Nummer je Vorgangstyp gezählt.
(1,2,...) ->1 Nummernvergabe ohne Neustart ab 1
work$itemNumber = "#nof"
Wird noch ein Präfix gewünscht so sieht die Zeile so aus: (ergibt -> L1)
work$itemNumber = "L"+"#nof"
Mit Belegung über "#nof0000" wird eine Nummer wie "#nof", jedoch mit führenden nullen -> 00001
Mit Belegung über "#no" wird eine Nummer je Vorgangstyp, Jahr, Kalenderwoche und Wochentag gezählt.
Jahr+ Kalenderwoche + Wochentag + Zähler (1,2,...) -> 9031.1 "20019 + Kalenderwoche 03 +Montag 1+ erster Vorgang an diesem Tag"
work$itemNumber = "#no"
Wird noch ein Präfix gewünscht so sieht die Zeile so aus: (ergibt -> A9031.1)
work$itemNumber = "A"+"#no"
Der Zähler kann ab einer definierten Zahl beginnen z.B. immer mit 8000
#s[8000]
var startCounter =8000;
work$itemNumber = "#no#s["+startCounter+"]"
Der Zähler wird dann stets um 8000 erhöht und ergibt -> A9031.8001
Die Zähler generiert einen Nummerkreis je Vorgangstyp. Dies kann überschrieben werden und Du kannst einen eigenen Nummerkreis anlegen.
#f[myNumberRange]
var numberRange = "myNumberRange"
work$itemNumber = "#no#f["+numberRange"+"]"
Der Zähler wird dann stets um 8000 erhöht und ergibt -> 1
Wir wollen einen Nummernkreis der je Mandant und Kalenderwochentag zählt. Dazu legen wir zunächst die benötigten Variablen fest.
var mandant = "2";
var date = new Date();
var jahr = date.getFullYear()+"";
jahr =jahr.substring(jahr.length - 1, jahr.length);
var tag = date.getDay();
if (tag ==0){
tag = 7;
}
var currentThursday = new Date(date.getTime() +(3-((date.getDay()+6) % 7)) * 86400000);
var yearOfThursday = currentThursday.getFullYear();
var firstThursday = new Date(new Date(yearOfThursday,0,4).getTime() +(3-((new Date(yearOfThursday,0,4).getDay()+6) % 7)) * 86400000);
var kalenderwoche =""+ Math.floor(1 + 0.5 + (currentThursday.getTime() - firstThursday.getTime()) / 86400000/7);
if (kalenderwoche.length ==1){
kalenderwoche = "0"+kalenderwoche;
}
Den Zähler definieren wir zusammengesetzt aus den Variablen.
var numberRange = "myNumberRange"+mandant+jahr+kalenderwoche+tag;
Dann wird die Nummer wie folgt zugewiesen:
work$itemNumber = "R"+mandant+"."+jahr+kalenderwoche+tag+".#nof#f["+numberRange+"]"
Der Zähler ergibt -> R2.9031.1
function getItemNumber(typ, mandant, aliasList, aliasNumberStarting, aliasConcept) {
var prefix = getAliasLabel(typ, aliasList);
if (mandant == "0" || mandant == "1" || mandant == "null") {
mandant = "";
}
if (prefix == "null" || prefix == "") {
if (typ == "n") { // Angebot
prefix = "A";
} else if (typ == "a") { // Auftrag
prefix = "AB";
} else if (typ == "l") { // Lieferschein
prefix = "L";
} else if (typ == "p") { // Projekt
prefix = "P";
} else if (typ == "r") { // Rechnung
prefix = "R";
} else if (typ == "r") { // Rechnungskorrektur
prefix = "R";
} else if (typ == "gs") { // Stornorechnung
prefix = "R";
} else if (typ == "gu") { // Gutschrift
prefix = "G";
} else if (typ == "b") { // Bestellung
prefix = "B";
} else if (typ == "bq") { // Preisanfrage
prefix = "RFQ";
} else { // Lead oder sonsites
prefix = "C";
}
}
var firstNumber = getAliasLabel(typ + mandant, aliasNumberStarting);
var variante = getAliasLabel(typ, aliasConcept);
if (variante == "null" || variante == "") {
variante = "tenant week";
if (prefix == "C") {
variante = "tenant month";
}
}
var numberTemplate = prefix + "#no";
if (variante == "count") {
numberTemplate = prefix + "#nof";
} else if (variante == "week") {
numberTemplate = prefix + "#no";
} else if (variante == "year") {
var numberRange = typ + mandant;
var currentThursday = new Date();
var yearOfThursday = (currentThursday.getFullYear() + "").substring(2, 4) + "-";
numberTemplate = prefix + yearOfThursday + "#no#f[" + numberRange + "]";
} else if (variante == "tenant week") {
var date = new Date();
var jahr = date.getFullYear() + "";
jahr = jahr.substring(jahr.length - 1, jahr.length);
var tag = date.getDay();
if (tag == 0) {
tag = 7;
}
var currentThursday = new Date(date.getTime() + (3 - ((date.getDay() + 6) % 7)) * 86400000);
var yearOfThursday = currentThursday.getFullYear();
var firstThursday = new Date(new Date(yearOfThursday, 0, 4).getTime() + (3 - ((new Date(yearOfThursday, 0, 4).getDay() + 6) % 7)) * 86400000);
var kalenderwoche = "" + Math.floor(1 + 0.5 + (currentThursday.getTime() - firstThursday.getTime()) / 86400000 / 7);
if (kalenderwoche.length == 1) {
kalenderwoche = "0" + kalenderwoche;
}
var numberRange = "myNumberRange" + mandant + jahr + kalenderwoche + tag;
var mandantShow = mandant + ".";
if (mandant == "") {
mandantShow = "";
}
numberTemplate = prefix + mandantShow + jahr + kalenderwoche + tag + ".#nof#f[" + numberRange + "]";
} else if (variante == "tenant month") {
var datex = new Date();
var yearx = datex.getFullYear() + "";
var nrprefix = yearx.substr(yearx.length - 2) + "." + (datex.getMonth() + 1) + ".";
var mandantShow = mandant + ".";
if (mandant == "") {
mandantShow = "";
}
numberTemplate = prefix + mandantShow + nrprefix + "#nof#f[" + typ + mandant + "]"
} else if (variante == "tenant year") {
var numberRange = typ + mandant;
var currentThursday = new Date();
var yearOfThursday = (currentThursday.getFullYear() + "").substring(2, 4) + "-";
var mandantShow = mandant + ".";
if (mandant == "") {
mandantShow = "";
}
numberTemplate = prefix + mandantShow + yearOfThursday + "#nof0000#f[" + numberRange + "]";
} else if (variante == "tenant year long") {
var numberRange = typ + mandant;
var currentThursday = new Date();
var yearOfThursday = currentThursday.getFullYear() + "-";
numberTemplate = prefix + yearOfThursday + "#nof0000#f[" + numberRange + "]";
}
if (firstNumber != "" && firstNumber != "null") {
numberTemplate += "#s[" + firstNumber + "]";
}
return numberTemplate;
}
Um einem Vorgang nicht wiederholt eine Nummer zuzuweisen ist die folgende IF Abfrage notwendig (nicht bei kaufmännischen Vorgangen, denn da wird dies bereits automatisch geprüft).
if (work$itemNumber == "0" || work$itemNumber == ""){
work$itemNumber = ...;
}
Vermeide einem kaufmännischen Vorgang ohne Positionen eine Nummer zu vergeben. Dazu prüfe ob die Positionszahl nicht kleiner 1 ist
if (parseFloat(work$SIZE_ACitems) < 1){
// keine Nummer vergeben
} else if (1==1){
// Nummer vergeben
}
ACHTUNG: entfernen, überschreiben wir die vergebene Nummer, so entstehen Nummernlücken im Nummernkreis, da es dann keinen Vorgang mit der entsprechenden Nummer gibt. Abhilfe schafft hier lediglich ein neuer Nummenkreis. Daher stets mit Vorsicht diese Befehle verwenden:
Die Vorgangsnummer entfernt man mit dem Befehl:
work$itemNumber = "REMOVENO"
Die Vorgangsnummer überschreiben, auch wenn bereits eine vergeben wurde:
work$itemNumber = "#nof"+"FORCE"
In der Administration Einstellungen zum Unternehmen gibt es eine Abschnitt ++ für zusätzliche Parameter. Dort unter "A" (für Auftragsbearbeitung. Lässt sich folgendes festlegen:
Prefix zur Nummernvergabe jeweils zum Alias der Vorgangstypen. Für die Rechnung ist der Alias das "r". In der Vorbelegung steht dort R|r. Alle Rechnungen erhalten so den Prefix "R". Ihr könnt das "R" durch eine Buchstabenfolge tauschen um es für Euch zu ändern z.B. auf "RG" oder "R.","R-" usw.
2. Konzept der Zählung.. Wie beim Prefix wird der Alias verwendet um die entsprechenden Varianten zuzuordnen. Zur Rechnung ist die Vorgabe "tenant week". So wird die Nummer je Kalenderwoche hochgezählt.
Konzepte wenn Vorgang Alias = r für Rechnung mit Prefix =R. und Mandant = 9
Wir unterscheiden folgende Konzept:
count = R.1
week = R....
year = R....
tenant week = R.9.1054.4 -> 1 = 2021 (Jahr), 05 = KW5, .4 = Nummer in dieser KW...
tenant month = R.9.21.1.4 -> 21 = Jahr, 1 = Monat, 4 = fortlaufend je Mandant/ Jahr/Monat
tenant year = R.9-21-
tenant year long = R.9-2021
3. Der Nummernstart ist eine Zahl die den Start der Nummernvergabe mit 1 vornimmt aber n Tage addiert und so ändert. Nummernstart.
Beispiel: Das alte System hat zur letzten Rechnung des Mandanten 3 die Nummer R22-2341 vergeben. Nun möchten wir erreichen,
dass die nächste Rechnungsnummer R-2342 zählt.
im Prefix ist R-|r
im Konzept year|r
Im Nummernstart 2341|r2
Im Nummerstart hinterlegen wir die Zahl 2341|r (wenn nur ein Mandant definiert ist oder 2341|r2 für mandant 2). Damit wird über den Alias r die Zahl 2341 gefunden und stets in der Nummernvergabe addiert. ACHTUNG für die Zurücksetzung z.B. nach einem Jahreswechsel ist die Zahl wieder auf 0|r zusetzten, damit dann wieder von 1 gestartet wird.