0

Komplizierte Kundenummern und Auftragsnummern erstellen

Hallo an Alle,

ich hoffe, dass meine Frage bzw. Bitte um Hilfe nicht zu kompliziert ist.

 

Zunächst geht es um die Vergabe der Kundennummer.

z.B. 150-0001

Die 150 ergibt sich zunächst aus 1 (das ist die Ziffer aus einem Auswahlfeld, z.B 1=nationale Kunden, 2=regionale Kunden und 3=lokale Kunden), die 50 sollten die ersten beiden Ziffern der PLZ des Kunden sein und die 0001 eine laufende Nummer.

z.B. 220-0001 wäre ein regionaler Kunde aus (Raum) Hamburg, 380-0001 ein lokaler Kunder aus (Raum)München

Jetzt wird es ganz kompliziert!!

Die Auftragsnummer hängt zum Teil mit der Kundenummer zusammen, z.B.

20-220-1-1-0001

20 wäre die Nummer der ersten beiden Zahlen der PLZ eines Standortes, der in einer Tabelle(Standorte) hinterlegt ist (die PLZ eines Standortes ist nicht die PLZ des Kunden)

220 wäre die Nummer der Kundennummer...und jetzt wird es sehr kompliziert bis hinzu (wahrscheinlich) unmöglich:

1 - Die fünfte Ziffer kann entweder 1 oder 2 sein. 1 steht für eigene Projekte und 2 für "fremde" Projekte. Diese habe ich in Auswahlfeld 1 (Eigene Projekte) angelegt zB  1=Projekt aaa, 2=Projekt bbb, 3=Projekt ccc usw.

Auswahlfeld 2 (fremde Projekte) mit zB 1=Projekt ddd, 2 =Projekt eee, 3=Projekt fff usw.

1 - Die sechste Ziffer hängt von der fünften Ziffer ab, zB hätte ich ein eigenes Projekt ccc, dann wären Ziffer fünf und Ziffer sechs 1-3 oder zB ein fremdes Projekt fff, dann wären Ziffer fünf und sechs 2-3

0001 wäre ganz einfach die laufende Nummer.

 

Sinn und Zweck sollte es sein, den Auftrag anhand der Auftragsnummer, schnell zuordnen zu können. Anhand zB 20-220-1-1-0001 wäre sofort ersichtlich, das es sich um einen Standort in (Raum) Hamburg handelt 20, von einem regionalen Kunden in (Raum)Hamburg 220, eigenes Projekt 1, Projekt aaa 1 und dann die laufende Nummer 0001.

Ist diese Art der Kundenmummern- bzw Auftragsnummernvergabe überhaupt realisierbar?

Ich wäre wirklich für jegliche Hilfe sehr, sehr dankbar.

Gruß

Kruna

23 Antworten

null
    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo,

    ich möchte nochmals ganz vorsichtig und lieb nachfragen, ob jemand eventuell eine Idee, wie man die Kundennummer erstellen kann. Hier noch ein Foto dazu, vielleicht habe ich mich auch nicht richtig ausgedrückt.

    Die

    Bildschirmfoto 2020-04-02 um 09.03.54

    Bildschirmfoto 2020-04-02 um 09.08.17

    Die ersten beiden Ziffern sind eigentlich auch in einer Spalte PLZ2 der Tabellle PLZ_Suchen gegeben.

    Bzgl. der Auftragsnummer, wären auch alle Variabeln vorhanden.

     

    Lieben, Liebn Dank an Alle.

     

    Gruß Kruna

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

    Hallo Kruna, die Kundennummer könnte man eventuell so erzeugen:

    if Status and PLZ then
        let myKNr := text(number(Status)) + substr(PLZ, 0, 2);
        let myMaxNr := last(((select KundenNr where substr('Kunden-Nr.', 0, 3) = myKNr) order by Nr).'Kunden-Nr.');
        let myLNr := number(substr(myMaxNr, 4, 4)) + 1;
        'Kunden-Nr.' := myKNr + "-" + format(myLNr, "0000")
    end

    Allerdings stellt sich die Frage, wann und wie sie erzeugt werden soll. Als Trigger "Bei neuem Datensatz" geht nicht, denn zum Generieren der Nummer müssen für Status und PLZ ja schon Werte vorhanden sein. Eine Möglichkeit wäre, als Trigger "Nach Änderung" im Feld PLZ. Oder Schaltfläche?

     

    Die Zusammensetzung der Auftragsnummer habe ich nicht ganz verstanden. Woher weiß ich bspw., ob es ein eigenes oder ein Fremdprojekt ist? Gibt's dafür ne Extra-Auswahl? Oder muss man abfragen, bei welchem Auswahlfeld ein Eintrag ausgewählt wurde? ...

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo copytexter,

     

    tausend Dank für Deine rasche Antwort und Hilfe. Ich habe Deinen Code eingegeben und folgendes kam heraus:

    Bildschirmfoto 2020-04-02 um 10.57.27

    Das Feld, in dem die Kundenummer erzeugt werden soll, ist ein Berechnungsfeld, also im Feld 'Kunden-Nr._'.

    Ja nach dem wann, habe ich mich auch gefragt, da ich ja die PLZ erst im nachhinein eintarge. Ich würde dann mal herumninoxieren, wo der Code hin sollte. Wäre denn Schaltfläche auch eine Option?

     

    Tja, das mit der Auftragsnummer ist schon 'ne Nummer' !. IIch dachte mir, dass ich zwei Auswahlfelder erstelle. Das erste Auswahlfeld nenne ich 'eigene Projekte' mit Auswahl 'Projekt aaa', Projekt bbb' usw. und dass zweite Auswahlfeld nenne ich 'fremde Projekte'. mit Auswahl 'Projekt ccc, 'Projekt ddd' usw., dann müsste aber das erste Auswahlfeld 'Eigene Projekte'=1 und 'fremde Projekte'=2 sein. Ich hoffe, dass ich da nicht um drei Ecken denke...

     

    Gruß Kruna

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

    Hallo Kruna, beim "select" musst du für "KundenNr" den tatsächlichen Namen der betreffenden Tabelle einsetzen. Aus deinen Screenshots geht leider nicht hervor, wie die heißt, deshalb hatte ich an der Stelle irgendwas eingesetzt (okay, hätte ich vielleicht deutlicher kennzeichnen können).

     

    Ein Berechnungsfeld würde ich dafür aber nicht nehmen, denn dann würde die Nummer ja immer wieder neu berechnet. Und es würde mit dem o. a. Code auch gar nicht funktionieren. Man sollte die Nummer einmalig generieren und in ein Datenfeld schreiben. Entweder als Trigger "Nach Änderung" in einem der beteiligten Felder (Status, PLZ) oder eben als Schaltfläche "Kunden-Nr. erstellen" oder so. Der Code müsste in beiden Fällen funktionieren.

     

    Allerdings war ich davon ausgegangen, dass es ein verstecktes Textfeld 'Kunden-Nr.' gibt (ohne Unterstrich am Ende) und nur die Darstellung dann in einem Funktionsfeld namens 'Kunden-Nr._' erfolgt, damit sie nicht geändert werden kann. Und diese Vorgehensweise würde ich auch empfehlen.

     

    Also, falls noch nicht vorhanden, ein Textfeld für die Kundennummer erstellen (in meinem Code 'Kunden-Nr.' ohne Unterstrich genannt) und "verstecken", in dem man in den Feldoptionen unter "Nur anzeigen, wenn" einfach das Wort "false" eingibt (ohne Anführungszeichen). Das "Verstecken" kann man aber auch später nachholen, wenn alles läuft.

     

    Im Berechnungsfeld 'Kunden-Nr._' (mit Unterstrich) dann bei "Funktion" nur das Textfeld 'Kunden-Nr.' angeben, ggf. in Verbindung mit einer styled()-Funktion.

     

    Und dann wie gesagt eine Schaltfläche namens "Kunden-Nr erzeugen" oder so erstellen und als Funktion den obigen Code eintragen. Man kann ihn auch um eine Abfrage im "else"-Zweig ergänzen für den Fall, dass Status und/oder PLZ fehlen:

     

    if Status and PLZ then
        let myKNr := text(number(Status)) + substr(PLZ, 0, 2);
        let myMaxNr := last(((select KUNDENTABELLE where substr('Kunden-Nr.', 0, 3) = myKNr) order by Nr).'Kunden-Nr.');
        let myLNr := number(substr(myMaxNr, 4, 4)) + 1;
        'Kunden-Nr.' := myKNr + "-" + format(myLNr, "0000")
    else
        if Status then
            alert("PLZ fehlt!")
        else
            if PLZ then
                alert("Status fehlt!")
            else
                alert("Status und PLZ fehlen")
            end
        end
    end

     

    Und bitte daran denken, dass KUNDENTABELLE nur ein Platzhalter ist, der durch den tatsächlichen Namen deiner Kundentabelle ersetzt werden muss.

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

    Nochmal zur Auftragsnummer: Das mit den beiden Auswahlfeldern für eigene und fremde Projekte hatte ich verstanden. Die Frage ist, woran man erkennt, ob es sich um das eine oder andere handelt. Eine Möglichkeit wäre, beide Auswahlfelder darauf abzufragen, ob eine Auswahl vorgenommen wurde. Das setzt aber voraus, dass immer nur in einem der beiden Felder eine Auswahl vorgenommen wird.

     

    Um ein konkretes Beispiel zu erzeugen, musste ich außerdem einige Annahmen treffen:

     

    Die Tabelle, in der die Auftragsnr. erzeugt werden soll heißt AUFTRAEGE.
    AUFTRAEGE ist verknüpft mit den Tabellen KUNDEN und STANDORTE.
    Das Feld, in dem die erzeugte Auftragsnummer gespeichert werden soll, heißt AUFTRAGSNR.

     

    Unter dieser Prämisse könnte man auch hier wieder eine  Schaltfläche namens "Auftrags-Nr. erzeugen" o. ä. erstellen und damit folgenden Code ausführen (in der Tabelle AUFTRAEGE):

     

    if not AUFTRAGSNR then
        if 'Eigene Projekte' and 'Fremde Projekte' then
            alert("Es wurde ein eigenes und ein fremdes Projekt ausgewählt. Entweder - oder!") 
        else
            let myProjektArt := if  'Eigene Projekte' then "1" else "2" end;
            let myProjekt := if myProjektArt = "1" then text(number('Eigene Projekte')) else text(number('Fremde Projekte')) end;
            let myStandort := substr(STANDORTE.PLZ, 0, 2);
            let myKunde := substr(KUNDEN.'Kunden-Nr.', 0, 3);
            let myANr := myStandort + "-" + myKunde + "-" + myProjektArt + "-" + myProjekt;
            let myLastNr := last(((select AUFTRAEGE where substr(AUFTRAGSNR, 0, 10) = myANr) order by Nr).AUFTRAGSNR)
            let myNewNr := myANR + number(substr(myLastNr, 11, 4)) + 1;
            AUFTRAGSNR := myLastNr + "-" + format(myNewNr, "0000")
        end
    else
        alert("Es wurde bereits eine Auftragsnr. vergeben!")
    end

     

    Das erste "if" dient nur der Abfrage, ob schon eine Auftragsnummer vergeben wurde. Dann darf sie ja nicht noch mal neu generiert werden.

     

    Der Code ist allerdings nicht gestestet, sondern soll nur beispielhaft eine Möglichkeit darstellen. Er kann also Tipp-, Denk- und sonstige Fehler enthalten. Am besten einfach mal ausprobieren (Tabellen- und Feldnamen ggf. ersetzen).

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo,

    WOOWWW...OMG!! Das ist ja der Hammer, Irre!!!! Ich bin echt platt und begeistert!! Der Code funktioniert einwandfrei! Tausend DANK!!!

    Sorry, aber ich kann manchmal nicht genau erklären, was ich genau meine. Du bist auch richtig davon ausgegangen, denn ich habe auch ein Textfeld namens KundenNr., dass sieht man im dritten Bild, das zeigt sich dann auch nur, wenn ich auf 'bearbeiten' klicke und die Kundennummer evtl ändern möchte.

    Kurzes Feedback: Als ich den Code in das Auswahlfeld 'Status' eingegeben habe, ist nichts passiert. Erst als ich den Code in das Feld PLZ eingegeben habe. Die Schaltfläche funktioniert auch Klasse. Nun habe ich nur noch das Luxusproblem, ob ich die Schaltfläche benutzen möchte oder es lasse.

    So, dann wäre 'nur' noch das Thema mit der Auftagsnummer. Entschuldige bitte, wenn ich nervig nachhake...

    Bildschirmfoto 2020-04-02 um 15.32.59

    In der Tabelle 'Aufträge' ist die Verknüpfung zum Kunden ja gegeben.

     

    In einer Tabelle 'Standort' gibt es die zwei Auswahlfelder 'eigenes oder fremdes Projekt' ist bzw. Projekt aaa, bbb, ccc usw., aber auch die ersten beiden Ziffern der PLZ. Wie könnte man denn dann die Auftragsnummer zusammenschustern?

    40-150-1-1-0001

    40 (ersten beiden Ziffern der PLZ in der Tabelle 'Standort' )

    150 (Kundenummer)

    1 oder 2 (1=eigenes Projekt, 2=fremdes Projekt)

    1, oder 2 oder 3 oder 4 usw. das eigentlich Projekt

    0001 (laufende Nummer)

    Ich hoffe, dass es einigermaßen Verständlich ist.

    Hättest Du da auch eine Idee?

    Gruß

    Kruna

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    habe vergessen den screenshot hinzuzufügen...

     

    Bildschirmfoto 2020-04-02 um 15.51.23

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    sorry, da hat sich gerade meine Anfrage mit Deiner Antwort überschnitten. Ich versuche mal den Code und melde mich dann noch einmal.

    Tausend Dank

    gruß

    kruna

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, Deine Annahmen treffen zu. Die Tabelle heißt Auftrag (müsste man Auftraege schreiben? Könnte man nicht Umlaute benutzen? Ich hatte zunächst Aufträge stehen, dann wurde jedoch die Tabelle 'nicht' gefunden. Ich habe dann der einfachhalber Tabelle 'Auftrag' genannt) und ja sie ist mit Kunden und Standorte verknüpft und es gibt das Feld AuftragsNr.

    Ich habe den Code soweit angepasst und dann folgende Meldung

    Bildschirmfoto 2020-04-02 um 16.30.41

    Ich weiß leider nicht wo ich den Fehler suchen könnte. Alles was bis Zeile 15 'angemeckert' wurde, habe ich soweit angepasst bzw ersetzt.

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

    Oh, mein Fehler, da bin ich durcheinander gekommen ... Ändere die Zeilen 13 und 14 mal bitte wie folgt:

     

    let myNewNr := number(substr(myLastNr, 11, 4)) + 1;
    'AuftragsNr' := myANr + "-" + format(myNewNr, "0000")

     

    Falls es dann immer noch nicht funktioniert, muss ich doch mal eine "Versuchsanordnung" erstellen. So als Trockenübung ist es immer schwierig.

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi,

     

    myNewNr wird offensichtlich als String übergeben - versuche mal

     

    format(number(myNewNr),"0000")

     

    lg, Torsten

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    ups, zu spät ;)

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das gibt es doch nicht!!! Es hat funktioniert! Ich bin echt baff!!! Wahnsinn!!!! Mir fehlen gerade die Worte!!!

    Ich kann mich nicht oft genug bedanken!!!! Vielen tausend Dank!!!

    ich werde gleich mal mehrere Situationen ausprobieren...wahnsinn!!!

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

    Schön, freut mich, dass es funktioniert.

    Zu den Tabellen- und Feldbezeichnungen: Die kann man nennen, wie man will. "Aufträge, "AUFTRAEGE", "Meine Aufträge 2020" oder wie auch immer. Wenn der Name jedoch Sonderzeichen wie Umlaute, Punkte oder Leerzeichen enthält, dann muss man den Namen innerhalb von Formeln und Skripten in einfache Anführungszeichen setzen, damit Ninox erkennt, dass das jeweilige Sonderzeichen keine Funktion hat, sondern eben nur Teil des Namens ist. Dazu war ich in dem Moment einfach zu faul, deshalb schrieb ich statt des "ä" ein "ae".

    Sonderzeichen sind übrigens alle Zeichen außer den Klein- und Großbuchstaben von A bis Z, den Ziffern 0 bis 9 sowie dem Unterstrich.

    Deshalb ist es immer hilfreich, die genauen Feldnamen zu kennen, damit man sie bei Code-Vorschlägen entsprechend berücksichtigen kann. Oft kennt man sie aber nicht, und dann setzt man halt "Platzhalter" ein, die der Betreffende dann gegen seine tatsächlich vergebene Namen austauschen muss (was ja auch zusätzliche Arbeit ist).

    Man kann aber auch erst mal mit den gegebenen Namen testen und die Tabellen und Felder in den Eigenschaften dann später nach eigenem Gusto umbenennen. Ninox tauscht dann automatisch auch alle Bezeichnungen in Formeln und Skripten aus.

    • Kruna
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ne, dat is nich nur schön, dat is Irre!!! Mal im Ernst, nochmals tausend Dank. Ich hatte echt Kopfschmerzen, wie das zu lösen sei. Und nun funktioniert alles prima!

    Und danke auch für den Hinweis. Ich war in der Annahme, dass man 'nur' bei Leerzeichen einfache Anführungszeichen setzen muss. Gut zu wissen, dann werde ich das nächste mal darauf achten.

     

    Gruß Kruna

    • Kruna
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo, bei mir hackt's mal wieder...

    ich musste meine DB nochmal überdenken. In der Theorie stelle ich mir alle möglichen Situationen vor (wahrscheinlich zu viele und zu kompliziert), so dass alles Effizient und 'automatisch läuft'. Dann, in der Praxis, stelle ich fest, dass einige Dinge doch nicht so praktikabel sind. Also, DB wieder überdenken und neu strukturieren, so auch hier.
    Nun hat sich folgendes verändert und ich komme irgendwie nicht weiter, bzw verstehe ich nicht, warum 'angemeckert' wird.

    Hier der alte Code, der super funktioniert hat:

    if not 'AuftragsNr.' thenif 'StoWerbeflächen'.'Eigene Projekte' and 'StoWerbeflächen'.'Fremde Projekte' thenalert("Es wurde ein eigenes und ein fremdes Projekt ausgewählt. Entweder - oder!")elselet myProjektArt := if 'StoWerbeflächen'.'Eigene Projekte' then"1"else"2"end;let myProjekt := if myProjektArt = "1" thentext(number('StoWerbeflächen'.'Eigene Projekte'))elsetext(number('StoWerbeflächen'.'Fremde Projekte'))end;let myStandort := substr('StoWerbeflächen'.PLZ, 0, 2);let myKunde := substr('Zu Kunde'.Kundennummer, 0, 3);let myANr := myStandort + "-" + myKunde + "-" + myProjektArt + "-" + myProjekt;let myLastNr := last(((select 'Aufträge' where substr('AuftragsNr.', 0, 10) = myANr) order by Nr).'AuftragsNr.');let myNewNr := number(substr(myLastNr, 11, 4)) + 1;'AuftragsNr.' := myANr + "-" + format(myNewNr, "0000")endelsealert("Es wurde bereits eine Auftragsnr. vergeben!")end

     
    Soweit so gut.
    @Copytexter, Du hattest ja geschrieben, dass Kunde und StoWerbefläche verknüpft sein sollen.
    Nun ist die Tabelle StoWerbefläche nicht mehr verknüpft. Ich habe die Info, die in der Tabelle StoWerbefläche waren, ändern müssen.
    ZB. sind ‚Eigene Projekte‘ und ‚Fremde Projekte‘ nun in der Untertabelle der Tabelle 'Aufträge', bzw. werden diese aus einer anderen Untertabelle übernommen.

    Hier der neue Code:

    if not 'AuftragsNr.' then
    if Auftragspositionen.'Eigene Projekte' and Auftragspositionen.'Fremde Projekte' then
    alert("Es wurde ein eigenes und ein fremdes Projekt ausgewählt. Entweder - oder!")
    else
    let myProjektArt := if Auftragspositionen.'Eigene Projekte' then
    "1"
    else
    "2"
    end;
    let myProjekt := if myProjektArt = "1" then
    text(number(Auftragspositionen.'Eigene Projekte'))
    else
    text(number(Auftragspositionen.'Fremde Projekte'))
    end;
    let myStandort := substr('StoWerbeflächen'.PLZ, 0, 2);
    let myKunde := substr('Zu Kunde'.Kundennummer, 0, 3);
    let myANr := myStandort + "-" + myKunde + "-" + myProjektArt + "-" + myProjekt;
    let myLastNr := last(((select 'Aufträge' where substr('AuftragsNr.', 0, 10) = myANr) order by Nr).'AuftragsNr.');
    let myNewNr := number(substr(myLastNr, 11, 4)) + 1;
    'AuftragsNr.' := myANr + "-" + format(myNewNr, "0000")
    end
    else
    alert("Es wurde bereits eine Auftragsnr. vergeben!")
    end

     

    Mein 'logischer' Gedankengang war, dass ich 'StoWerbefläche' durch 'Auftragspositionen' ersetze.

    Gesagt, getan, aber wenn ich das Script ausführen möchte, dann poppt allerdings der 'alert' auf "Es wurde ein eigenes und ein fremdes Projekt ausgewählt. Entweder - oder!"

    obwohl nur ein Projekt ausgewählt wurde. Was habe ich hierbei nicht beachtet?

     

    Desweiteren habe ich anstatt

    let myStandort := substr('StoWerbeflächen'.PLZ, 0, 2);

    let myStandort := substr(Auftragspositionen.PLZ, 0, 2);

     

    eingegeben, aber das ist scheinbar auch falsch.

     

    Hat jemand eine Idee, wo der Fehler liegen könnte?

     

    Vielen Dank!!

     

    Gruß Kruna

    • Kruna
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ups, sorry, hier nohmal der alte Code etwas übersichtlicher:

    if not 'AuftragsNr.' then
    if 'StoWerbeflächen'.'Eigene Projekte' and 'StoWerbeflächen'.'Fremde Projekte' then
    alert("Es wurde ein eigenes und ein fremdes Projekt ausgewählt. Entweder - oder!")
    else
    let myProjektArt := if 'StoWerbeflächen'.'Eigene Projekte' then
    "1"
    else
    "2"
    end;
    let myProjekt := if myProjektArt = "1" then
    text(number('StoWerbeflächen'.'Eigene Projekte'))
    else
    text(number('StoWerbeflächen'.'Fremde Projekte'))
    end;
    let myStandort := substr('StoWerbeflächen'.PLZ, 0, 2);
    let myKunde := substr('Zu Kunde'.Kundennummer, 0, 3);
    let myANr := myStandort + "-" + myKunde + "-" + myProjektArt + "-" + myProjekt;
    let myLastNr := last(((select 'Aufträge' where substr('AuftragsNr.', 0, 10) = myANr) order by Nr).'AuftragsNr.');
    let myNewNr := number(substr(myLastNr, 11, 4)) + 1;
    'AuftragsNr.' := myANr + "-" + format(myNewNr, "0000")
    end
    else
    alert("Es wurde bereits eine Auftragsnr. vergeben!")
    end

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo,

    ich bin's nochmal. Entschuldigung, dass ich das Thema noch einmal aufgreife.

    Ich habe gerade festgestellt, dass 'plötzlich' die AF-Nummer nicht mehr +1 zählt, sondern ständig

    'alert("Es wurde bereits eine Auftragsnr. vergeben!")'

    aufpoppt. Eigentlich müsste doch bei gleichem Kunden, gleicher PLZ usw., eine neue AF-Nummer vergeben werden, eben die letzten vier Ziffern 0001, 0002, 0003 usw.

    Wahrscheinlich ist es schwierig hier und jetzt eine 'Ferndiagnostik' abzugeben, aber hat eventuell jemnad eine Idee, woran das liegen könnte?

     

    Vielen Dank schon mal und Gruß

    Kruna

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

    Hallo Kruna, wenn du obiges Skript nicht geändert hast, bedeutet die alert()-Meldung, dass die Bedingung "if not 'AuftragsNr.'" nicht erfüllt wurde. Du müsstest also prüfen, ob das Feld 'AuftragsNr.' nicht doch schon einen Wert enthält, und sei es ein Leerzeichen. Außerdem könntest du die if-Abfrage testweise ändern auf "if 'AuftragsNr.' = null then" (wenn leer) oder "if length('AuftragsNr.') < 10 then" (wenn kürzer als 10 Zeichen).

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    HAllo Copytexter,

    ich habe am Skript nichts geändert, bzw habe ich 001 anstatt 0001 verändert, aber dann auch wieder auf 0001 geändert. Irgendwie hat sich dadurch wahrscheinlich, glaube ich, ein 'bug' eingenistet.

    Ich habe die DB dupliziert und dann Tests gemacht. Bei einigen Datensätzen funktioniert das Skript einwandfrei, bei anderen (bzw. genau bei dem 'kunden', bei dem ich 001 abgeändert hatte) leider nicht. Das Feld 'AuftragsNr.'  enthält keinen Wert, auch kein Leerzeichen. Da wird nur eine, immer die gleiche AF-Nummer vergeben.

    Die if-Abfragen, führten zum selben Ergebnis, nämlich 'alert("Es wurde bereits eine Auftragsnr. vergeben!")'.

     

    Wie wäre denn das Skript, wenn ich am Ende 001 hätte? Vielleicht habe ich da einen Fehler gemacht.

     

    Vilen Dank und Gruß

    Kruna

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

    Sehr seltsam. Denn wie gesagt bedeutet die Ausführung des else-Zweiges mit dem alert() ja, dass die if-Bedingung nicht zutrifft. Egal, was bei "true" passiert, weil dieser Zweig ja gar nicht erst durchlaufen wird.

     

    Was die laufende Nummerierung angeht - versuch es mal mit max() statt last():

     

    let myLastNr := max((select 'Aufträge' where substr('AuftragsNr.', 0, 10) = myANr).'AuftragsNr.');

     

    Und überprüfe ggf. die substr()-Angaben (erste Ziffer = Startposition, beginnend bei 0; zweite Ziffer = Anzahl der Zeichen). Wenn ich es richtig sehe, dürfte die Variable 'myProjekt' immer nur ein Zeichen enthalten, damit die Rechnung aufgeht (2 Zeichen für myStandort, 3 für myKunde, je 1 für myProjektart und myProjekt plus 4 Bindestriche).

     

    Ansonsten hätte ich jetzt so auf die Schnelle leider keine Idee.

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    HAllo Copytexter,

    ja, das ist in der Tat sehr seltsam. Vielleicht muss ich mich (leider) damit abfinden, dass das so ist! oder ich setzte die DB neu auf...

    Ich habe max() ausprobiert, aber die AF-Nummer bleibt immer gleich, zB 63-163-2-1-0001

     

    Um zB 63-163-2-1-001 zu erreichen, habe ich nun folgendes eingegeben:

     

    let myStandort := substr('Werbeträger'.PLZ, 0, 2);
    let myKunde := substr('Zu Kunde.Kundennummer, 0, 3);
    let myANr := myStandort + "-" + myKunde + "-" + myProjektArt + "-" + myProjekt;
    let myLastNr := last(((select 'Aufträge' where substr('AuftragsNr._', 0, 10) = myANr) order by Nr).'AuftragsNr._');
    let myNewNr := number(substr(myLastNr, 11, 3)) + 1;
    'AuftragsNr._' := myANr + "-" + format(myNewNr, "000")
    end

    das sollte richtig sein, quasi von 11, 4 auf 11, 3 abzuändern, oder? Zumindest hat auch soweit funktionert, ausser bei diesem einen 'Kunden', da bleibt die 63-163-2-1-001 immer gleich ohne +1 zu zählen.

     

    Trotzdem, vielen tausend DAnk!

     

    gruß

    Kruna

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Nachtrag:

    HAllo Copytexter,

    Ich habe eben die 'fehlerhafte' DB gespeichert, eine neue Db erstellt und die alte DB importiert, der Fehler scheint weg zu sein. Plötzlich zählt die AF-Nummer +1 weiter.

     

    Gruß

    Kruna

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 23Antworten
  • 3593Ansichten