0

RE Nummer ergänzen

Ich habe eine ID die wie folgt angezeigt wird: z. B. RE+Datum (jjjjmmdd)+fortlaufende Nummer pro Tag 000. Nachstehnd meine Formel, bei der jedoch 000 nicht fortlaufend funktioniert. Wo liegt mein Fehler?

let myDatum := format(today(), "YYYYMMDD");
let myRN := last(((select Rechnungen1 where today() = myDatum and substr('ID-Nr', 0, 8) like "re") order by substr('ID-Nr', 2)).'ID-Nr');
'ID-Nr' := "RE" + myDatum + "-" + format(number(substr(myRN, 0, 8)), "000");
'Datum der Rechnungsstellung' := today()

25 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo,

    in deinem code "where today() = myDatum" vergleichst du ein Datum mit einem text. Versuch mal so:

    ---

    let myDatum := format(today(), "YYYYMMDD");
    let myRN := max((select Rechnungen)[extractx('ID-Nr', "\d+") = myDatum and extractx('ID-Nr', "\D+") = "RE"].number(last(split('ID-Nr', "-")))) + 1;
    'ID-Nr' := "RE" + myDatum + "-" + format(myRN, "000");
    'Datum der Rechnungsstellung' := today()

    ---

    Leo

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

    Hallo, versuch's mal so:

     

    let myDatum := format(today(), "YYYYMMDD");
    let myRN := last((select Rechnungen1 where substr('ID-Nr', 2, 8) = myDatum) order by Nr).substr('ID-Nr', 11, 3);
    'ID-Nr' := "RE" + myDatum + "-" + format(number(myRN) + 1, "000")

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

    Tja, nun hast du die Wahl ... ;)

    • blue_car
    • vor 4 Jahren
    • Gemeldet - anzeigen

    perfekt und funktioniert! Vielen Dank und schöne Grüße

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi!

    wo muss ich das denn eintragen? So in etwa würde ich auch gerne die Rechnungsnummern vergeben.

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

    Zum Beispiel in den Tabellen-Optionen unter "Bei neuem Datensatz folgendes Script ausführen".

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wenn ich einen der beiden Codes in "Nach änderungen folgendes Skript ausführen" reinkopiere, kommt auch keine andere rechnungsnummer !

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    bei dem einen Code ist wohl ne 1 zuviel!

    Gibt es auch die möglichkeit immer eine individuelle Rechnungsnummer (Zahlen Buchstaben) einzufügen welche dann nicht dubliziert werden kann?

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Bei den Codes wird aber nicht das RE geändert, wenn man in der Maske Angebot anklickt ?!

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Also wenn man den Code da reinkopiert und dann in der Maske von Rechnung auf Lieferschein klickt, dann ändert sich die Rechnungsnummer wieder und geht auch nicht wieder zu ändern!!!

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ah, glaub ich habs langsam!

     

    Aber so ne Option, wo man ne individuelle nummer eintippen kann und dann automatisch von RE auf AN oder LS geändert wird wäre top!

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

    Also, ich steige jetzt nicht mehr durch. Zum "individuelle nummer eintippen" gibt's Text- und Zahlenfelder. Aber was soll dann damit passieren? Was heißt "automatisch" ändern? Auch Automatik braucht Vorgaben. Mehr Kontext, bitte.

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Also ich hätte gern das Rechnungsnummernfeld in das man eine individuelle nummer eingeben kann, welche dann vor dublikaten geschützt ist und welche dann als lieferscheinnummer oder angebotsnummer geändert wird, wenn man in der Maske auf den jeweiligen button drückt.

    Der Code mit der Rechnungsnummer aus jahr-datum-vortlaufende nummer geht aber wenn ich das Datum mit Punkten YYYY.MM.DD geschrieben haben möchte, zählt die nummer nicht mehr weiter!

    Gut wäre RE-(DATUM 2020.03.26)-(nummer+1)-(hier Buchstaben zum eintagen) 

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

    Also, wenn du die Rechnungsnummer im Format "RE-JJJJ.MM.TT-999" haben möchtest, dann müsste man das Skript entsprechend anpassen. Auf meinen gestrigen Vorschlag bezogen hieße das ('Datum der Rechnungsstellung' lasse ich hier mal weg, weil es mit dem Generieren der Nummer nichts zu tun hat):

     

    let myDatum := format(today(), "YYYY.MM.DD");
    let myRN := last((select Rechnungen1 where substr('ID-Nr', 3, 10) = myDatum) order by Nr).substr('ID-Nr', 14, 3);
    'ID-Nr' := "RE" + "-" + myDatum + "-" + format(number(myRN) + 1, "000")

     

    Diese Zeilen kann man automatisch als Trigger in den Tabellen-Optionen unter "Bei neuem Datensatz" ausführen lassen oder auch per Knopfdruck mit einem Button. Bei einem Button sollte man aber prüfen, ob die Nummer schon vergeben wurde, denn sonst würde sie beim nächsten Klick auf den Button wieder um 1 erhöht:

     

    if ID-Nr = null then
        let myDatum := format(today(), "YYYY.MM.DD");
        let myRN := last((select Rechnungen1 where substr('ID-Nr', 3, 10) = myDatum) order by Nr).substr('ID-Nr', 14, 3);
        'ID-Nr' := "RE" + "-" + myDatum + "-" + format(number(myRN) + 1, "000")
    end

     

    Das mit dem dahinter gesetzten Buchstaben, Angebot und Lieferschein verstehe ich nicht so recht. Man könnte statt "RE" natürlich auch bspw. "AN" oder "LS" als Präfix nehmen, aber ich will da jetzt nicht wild herumspekulieren.

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wenn ich den 2. Code da rein kopiere kommt "Eine Tabellespalte wurde nicht gefunden: ID in zeile 1, Spalte 5"

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    -Das mit dem dahinter gesetzten Buchstaben, Angebot und Lieferschein verstehe ich nicht so recht. Man könnte statt "RE" natürlich auch bspw. "AN" oder "LS" als Präfix nehmen, aber ich will da jetzt nicht wild herumspekulieren.-

    Also wenn die rechnungsnummer jetzt generiert wird RE-2020.03.26-001 und ich Dahinter noch gerne ein wort einsetzen möchte zB. RE-2020.03.26-001-Berlin und dann in der Maske auf Lieferschein drücke, dass auch die Nummer 

    LS-2020.03.26-001-Berlin geändert wird.

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

    Zur Fehlermeldung: Feldnamen, die neben Buchstaben und Ziffern auch Sonderzeichen enthalten, müssen in einfache Anführungszeichen gesetzt werden. Das habe ich in der ersten Zeile bei 'ID-Nr' vergessen. Deshalb die Meldung. Einfach die Anführungszeichen wie in den Zeilen 3 und 4 ergänzen, dann sollte es funktionieren.

    Den Rest schaue ich mir später in Ruhe an.

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

    Also, du möchtest hinter die generierte Nummer noch einen Text setzen, zum Beispiel "Berlin"? Das wäre im Prinzip recht einfach möglich, in dem man die Zeile, in der die Nummer zusammengesetzt wird, entsprechend ergänzt: 

     

    if 'ID-Nr' = null then
        let myDatum := format(today(), "YYYY.MM.DD");
        let myRN := last((select Rechnungen1 where substr('ID-Nr', 3, 10) = myDatum) order by Nr).substr('ID-Nr', 14, 3);
        'ID-Nr' := "RE" + "-" + myDatum + "-" + format(number(myRN) + 1, "000") + "-Berlin"
    end

     

    Es könnte aber auch sein, dass du den jeweiligen Text manuell in ein Feld eintippen willst, aus dem er dann gelesen und an die eigentliche Nummer gehängt wird. Nennen wir dieses Feld mal SUFFIX. 

     

    if 'ID-Nr' = null then
        let myDatum := format(today(), "YYYY.MM.DD");
        let myRN := last((select Rechnungen1 where substr('ID-Nr', 3, 10) = myDatum) order by Nr).substr('ID-Nr', 14, 3);
        'ID-Nr' := "RE" + "-" + myDatum + "-" + format(number(myRN) + 1, "000") + "-" + SUFFIX
    end

     

    Wobei sich die Frage stellt: Soll immer ein Text angehängt werden? Dann könnte man die if-Abfrage in der ersten Zeile bspw. wie folgt ergänzen:

     

    if 'ID-Nr' = null and SUFFIX != null then
        [...]

     

    Dann würde die Nummer mit dem Suffix nur generiert, wenn in SUFFIX auch was eingetragen wurde. Ansonsten bliebe sie leer.

     

    Was ich allerdings nicht verstehe: "[...] RE-2020.03.26-001-Berlin und dann in der Maske auf Lieferschein drücke, dass auch die Nummer LS-2020.03.26-001-Berlin geändert wird."

    Rechnung - Maske - Button - Lieferschein? Ein Screenshot könnte vieleicht helfen zu verstehen, was genau da vor sich geht.

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, am besten, wenn der Text aus nem Feld gelesen werden, den man Eintippt oder wenn leer, dann ohne text.

    Hatte Code 2 + 3 versucht aber das geht irgendwie nicht. wenn man code 3 mit dazu hat, wird keine Rechnungsnummer mehr generiert.

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ach, guck an. Da fühle ich mich doch gleich 30 Jahre jünger. So hat man zu meiner Zeit schon Bildschirmfotos gemacht. ;)

     

    Ok, das hilft schon mal ein bisschen. Augenscheinlich sind die "Buttons", von denen bisher die Rede war, gar keine Buttons, sondern die Optionen eines Auswahlfeldes (Typ). Was mich zu einer weiteren Frage bringt: Wie ist der genaue Ablauf? Ich gehe mal von folgendem aus:

     

    Man legt einen neuen Datensatz an.
    Dann gibt man ggf. einen Suffix ein (oder lässt das Feld leer).
    Danach wählt man im Auswahlfeld "Typ" aus, ob Angebot, Rechnung oder Lieferschein.
    Daraufhin wird automatisch die 'ID-Nr' mit dem Präfix "AN", "RE" oder "LS", dem aktuellen Tagesdatum und dem Suffix generiert (oder ohne Suffix, wenn nichts eingegeben wurde).

     

    Das könnte man mit folgendem Skript in den erweiterten Optionen des Auswahlfeldes "Typ" unter "Nach Änderungen folgendes Skript ausführen" bewerkstelligen:

     

    if Typ then
        let myPraefix := switch text(Typ) do
            case "Angebot":
                "AN"
            case "Rechnung":
                "RE"
            case "Lieferschein":
                "LS"
            end;
        if 'ID-Nr' = null then
            let mySuffix := if SUFFIX then "-" + SUFFIX else null end;
            let myDatum := format(today(), "YYYY.MM.DD");
            let mySuchNr := myPraefix + "-" + myDatum;
            let myRN := last((select Rechnungen1 where substr('ID-Nr', 0, 13) = mySuchNr) order by Nr).substr('ID-Nr', 14, 3);
            'ID-Nr' := myPraefix + "-" + myDatum + "-" + format(number(myRN) + 1, "000") + mySuffix
        end
    end

     

    Wobei jede Nummer für "AN", "RE" und "LS" separat hochgezählt wird, unabhängig von einem evtl. vorhandenen Suffix. Und wenn die betreffende Nummer einmal vergeben wurde, lässt sie sich auch nicht mehr ändern (insbesondere bei Rechnungen wichtig). Jedes Dokument ist also in einem eigenen Datensatz gespeichert.

     

    Wollte man auch noch bspw. aus einem Angebot eine Rechnung machen o. ä., dann wäre dazu eine Schaltfläche mit einem auf duplicate() basierenden Skript sinnvoll.

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    ;-)

    Musste erstmal schauen, wie man screenshot heute macht!

     

    Irgendwie funktioniert das bei mir leider nicht mit dem ergenzen der Rechnungsnummer durch das Feld "SUFFIX" !

    Bei ner neuen Rechnungsnummer bleibt das hinter dem - leer.

    Würde das auch gehen, dass eine neue Nummer bei einer neuen Rechnung generiert wird, man die aber auch im Feld "ID-NR" ändern kann und, dass dann die nummer der nächsten Rechnungsnummer die nummer ist, die vor der Änderung generiert wurde.

    also, wenn man eine Nummer ändert und dann ne neue Rechnung macht, die nummern dann vor der änderung genommen und dann hochgezählt wird?

    Weiß nicht genau, wie ich das ausdrücken soll. Aber eigentlich würde das mit dem ergänzen aus dem Suffix feld reichen.

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

    Hast du den Code denn irgendwie verändert? Bei mir funktioniert das mit dem Suffix nämlich.

    Die 'ID-Nr' manuell zu ändern ginge ja auch so schon. Ist ja nur ein Textfeld, in das ein Wert geschrieben wird. Die Frage wäre: Was soll daran geändert werden? Soll sie nur namuell um einen Suffix ergänzt werden? Wenn die 'ID-Nr' selbst bis einschließlich der laufenden Nummer unverändert bleibt, dann könnte man auch den Code zum Generieren der Nummer beibehalten. Denn der bezieht sich ja nur auf die Zeichen 0 bis 16.

     

    Wenn die generierte 'ID-Nr' (ohne Suffix) manuell geändert würde, dann hätte man wahrscheinlich Chaos, weil die Nummerierung keine zuverlässige Basis mehr hätte (von rechtlichen Problemen mal abgesehen).

    • k.what
    • Ha_Gen
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich hab den Code vom "Thursday, March 26, 2020 12:33 PM" genommen, den 2., da ergänzt er aber nicht die rechnungsnummer um den SUFFIX und wenn man den 3. Code dazu nimmt, wird keine Nummer mehr generiert!Bildschirmfoto 2020-03-30 um 20.36.35

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

    Warum probierst du nicht den Code, den ich zuletzt gepostet hatte? Noch mal: Folgender Code bei "Nach Änderungen folgendes Skript ausführen" im Auswahlfeld 'Typ'

     

    if Typ then
        let myPraefix := switch text(Typ) do
            case "Angebot":
                "AN"
            case "Rechnung":
                "RE"
            case "Lieferschein":
                "LS"
            end;
        if 'ID-Nr' = null then
            let mySuffix := if SUFFIX then "-" + SUFFIX else null end;
            let myDatum := format(today(), "YYYY.MM.DD");
            let mySuchNr := myPraefix + "-" + myDatum;
            let myRN := last((select Rechnungen where substr('ID-Nr', 0, 13) = mySuchNr) order by Nr).substr('ID-Nr', 14, 3);
            'ID-Nr' := myPraefix + "-" + myDatum + "-" + format(number(myRN) + 1, "000") + mySuffix
        end
    end

     

    funktioniert bei mir und bringt folgendes Ergebnis:

     

    ID-Nr_Ha-Gen1

     

    Wobei eventuell noch vorhandener Code unter "Bei neuem Datensatz" ggf. natürlich vorher entfernt werden müsste, weil die 'ID-Nr' ja nur an einer Stelle generiert werden kann.

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 25Antworten
  • 2304Ansichten