0

Nummerierung Auftrag/Unterauftrag

Hallo, ich habe mir eine neue Datenbank erstellt in der ich meine Aufträge verwalte.

Die Nummerierung der 1. Tabelle "Aufträge" habe ich mit folgendem Code gelöst:

if not 'Auftrags-Nr.' then
let y := year(Datum);
let a := cnt(select 'Aufträge' where year(Datum) = y);
'Auftrags-Nr.' := "A-" + y + "/" + format(a, "00")
else
void
end

Nun habe ich eine 2. Tabelle "Unteraufträge" und möchte auch diese in Bezug auf die 1. Tabelle nummerieren. 

Dabei sollte die Nummerierung bei jedem neuen Auftrag von Vorne beginnen.

Beispiel: 

Auftrags-Nr.: A-2020/01

Unterauftrags-Nr.: A-2020/01/01, A-2020/02/01, A-2020/03/01, usw.

Ich bin mir sicher, es ist ganz einfach, aber irgendwie stehe ich total auf dem Schlauch, deshalb danke im Voraus für eure Hilfe.

Gruss Andreas

27 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andreas,

    ich würde mich nicht bei der Nummervergabe auf Anzahl der Datensätze verlassen. Wenn (aus welchem Grund auch immer) einer der Datensätze gelöscht wird, kriegt man automatisch die doppelte Nummervergabe. Mein Vorschlag für die Haupttabelle wäre:

    ---

    let my := this;
    if not 'Auftrags-Nr.' then
    let myNr := max((select 'Aufträge')[Nr != my.Nr and year(Datum) = year(my.Datum)].number(last(split('Auftrags-Nr.', "/")))) + 1;
    'Auftrags-Nr.' := year(Datum) + "/" + format(myNr, "00")
    end

    ---

    und für die Untertabelle:

    ---

    let myAN := 'Aufträge'.'Auftrags-Nr.';
    let myUN := max('Aufträge'.'Unteraufträge'.number(substr('Unterauftrags-Nr.:', 5, 2))) + 1;
    'Unterauftrags-Nr.:' := first(split(myAN, "/")) + "/" + format(myUN, "00") + "/" + last(split(myAN, "/"))

    ---

    Leo

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Upps, habe deine "A-" vergessen:

    ---

    let my := this;
    if not 'Auftrags-Nr.' then
    let myNr := max((select 'Aufträge')[Nr != my.Nr and year(Datum) = year(my.Datum)].number(last(split('Auftrags-Nr.', "/")))) + 1;
    'Auftrags-Nr.' := "A-"+year(Datum) + "/" + format(myNr, "00")
    end

    ---

    Untertabele:

    ---

    let myAN := 'Aufträge'.'Auftrags-Nr.';
    let myUN := max('Aufträge'.'Unteraufträge'.number(substr('Unterauftrags-Nr.:', 7, 2))) + 1;
    'Unterauftrags-Nr.:' := first(split(myAN, "/")) + "/" + format(myUN, "00") + "/" + last(split(myAN, "/"))

    ---

    Leo

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Leo für deine schnelle Hilfe.

    Ich habe deinen Code auch gleich getestet. Die Aufträge in der Hauptabelle werden wie gewünscht fortlaufend nummeriert, nur in der Tabelle Unteraufträge kommt bei jedem neuen Datensatz immer /01/ als Numerierung raus.

    Andreas

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Andreas, 

    hast du auch die Zweite Formel für die Untertabelle genommen?

    ---

    let myAN := 'Aufträge'.'Auftrags-Nr.';
    let myUN := max('Aufträge'.'Unteraufträge'.number(substr('Unterauftrags-Nr.:', 7, 2))) + 1;
    'Unterauftrags-Nr.:' := first(split(myAN, "/")) + "/" + format(myUN, "00") + "/" + last(split(myAN, "/"))

    ---

    Leo

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, genau so, bei neuem Datensatz...:

    ---

    let myAN := Auftrag.'Auftrags-Nr.';
    let myUN := max(Auftrag.Unterauftrag.number(substr('Unterauftrags-Nr.', 7, 2))) + 1;
    'Unterauftrags-Nr.' := first(split(myAN, "/")) + "/" + format(myUN, "00") + "/" + last(split(myAN, "/"))

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Bildschirmfoto 2020-03-15 um 11.54.44

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Es sieht so aus, als würde die Formel das Feld Auftrags-Nr.: der Haupttabelle nicht finden.

    Versuch mal in der Untertabelle ein Funktionsfeld mit der Formel  Auftrag.'Auftrags-Nr.' zu erstellen. 

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Auch das ändert nichts. Das Funktionsfeld mit der Funktion Auftrag.'Auftrags-Nr.' zeigt zwar die Auftragsnummer im Feld richtig an, aber die Unterauftragsnummer bleibt trotz Verweis auf dieses Feld immer gleich /01/

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

    Vielleicht so?

     

    let myAN := 'Aufträge'.'Auftrags-Nr';
    let myUN := cnt('Aufträge'.'Unteraufträge');
    'Unterauftrags-Nr' := myAN + "/" + format(myUN, "00")

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hmm, 

    bei mir funktioniert's:

    Bildschirmfoto 2020-03-15 um 14.30.58

    Bildschirmfoto 2020-03-15 um 14.31.22

    Einzig,worauf ich noch tippen kann, die Kodierung der Schrägstriche. Versuch mal alle Schrägstriche zu Löschen und manuell mit der Tastatur einzufügen. Aber auch in der Auftragstabelle.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    @der Copytexter,

    nein, man möchte die Unterauftragsnummer an der zweiten Stelle haben

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Und gegen cnt () habe ich bereits meine Bedenken ausgesprochen.

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

    Ach so, erst Unterauftragsnr, dann Hauptauftragsnr. Sorry, das hatte ich übersehen. Zu meiner Ehrenrettung: Diese Reihenfolge ist aber auch sehr ungewöhnlich. ;)

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Zuerst Auftragsnummer A-2020/01, dann Unterauftragsnummer A-2020/01/01 dann A-2020/01/02 usw.

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

    Also doch so rum? A-2020/AN/UN? (AN = Auftragsnummer, UN = Unterauftragsnummer). Dann wie vorhin, nur mit max() statt cnt():

     

    let myAN := 'Aufträge'.'Auftrags-Nr.';
    let myUN := max('Aufträge'.'Unteraufträge'.number(substr('Unterauftrags-Nr.', 10, 2))) + 1;
    'Unterauftrags-Nr.' := myAN + "/" + format(myUN, "00")

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke für euren Einsatz, aber leider will es nicht klappen. Habe die Datenbank nochmal neu erstellt...jedoch immer das gleiche Ergebnis. Keine Ahnung was ich da falsch mache. Vielleicht mal drüber schlafen.

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

    Stell die Datenbank doch mal zum Download auf einen Server oder ins Webinar-Team. Dann kann man mal reinschauen.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ok, für mich war diese Aussage eindeutig:

    ---

    Auftrags-Nr.: A-2020/01

    Unterauftrags-Nr.: A-2020/01/01, A-2020/02/01, A-2020/03/01, usw.

    ---

    habe mich auch gewundert, aber das ist das tolle bei Ninox - man kann auch Dinge umsetzen, welche unlogisch scheinen.

    hier ist meine Version:

    https://www.dropbox.com/s/h4i6cwn3k5x3fjb/Auftr%C3%A4ge.ninox?dl=0

    Leo

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Leo für deine Version. Ich habe sie auch sofort getestet, aber leider immer mit dem geichem Ergebnis:

    Bildschirmfoto 2020-03-15 um 19.09.21

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ist das eine Mac-App?

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Und damit ihr auch wirklich versteht was ich mit Auftrag und Unterauftrag meine hier ein Beispiel:

    Ein Kunde möchte bei einem Schreiner seine komplette Wohnung einrichten lassen. Die Wohnugseinrichtug wäre dann für den Schreiner der Auftrag. Wohnzimmer, Schlafzimmer, Küche, usw. sind dann die Unteraufträge die zum Hauptauftrag dazugehören. Es geht dann aber auch noch weiter. Ein Schlafzimmer hat ein Bett, einen Kleiderschrank usw. Das wären dann die einzelnen Teile des Unterauftrags. Aber diese kann ich auch manuell nummerieren. In meinem Betrieb werden die Aufträge so wie die Ordnerstruktur auf dem Server nummeriert. Desalb auch A-2020/01/01. Wichtig ist das bei jedem Auftrag auch die Nummerierung der Unteraufträge bei 1 beginnt.

    Ich hoffe das war einigermaßen verständlich.

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja Mac, das kann man gut sehen. Gibt es denn Ninox auch für Windows u. Co. ?

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ok, ich konnte den Fehler nachvollziehen. Ofensichtlich benutzt du die Einzelplatzversion. Ich habe alles in der Cloud programmiert.

    in der App (ohne Team) ist es so dass wenn man einen Untertabellendatensatz  über Plus Zeichen erstellt, wird zuerst der Trigger nach neu ausgeführt und dann die Verknüpfung zu der Haupttabelle erstellt. Der Trigger versuch die Nummer von der Haupttabelle zu finden, aber zu diesem Zeitpunkt gibt es keine Verknüpfung. 
    Dieses Verhalten hatte ich vor Jahren festgestellt und dachte-es ist inzwischen abgestellt. Dem ist nich so.

    Abhilfe kann ein Funktionsfeld in der Untertabelle schaffen:

    ---

    let my := this;
    Auftrag.'Auftrags-Nr.' + "/" + format(cnt(Auftrag.'Unteraufträge'[number(Nr) <= number(my.Nr)]), "00")

    ---

    Oder man fügt einen Button "Unterauftrag hinzufügen":

    ---

    let my := this;
    let new := (create 'Unteraufträge');
    new.(Auftrag := my);
    let myUN := max('Unteraufträge'.number(last(split('Unterauftrags-Nr.:', "/")))) + 1;
    let myF2 := format(myUN, "00");
    let myF1 := 'Auftrags-Nr.';
    new.('Unterauftrags-Nr.:' := myF1 + "/" + myF2);
    popupRecord(new)

    ---

    Leo

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

    Gerade wollte ich schreiben: "In der Mac-App funktioniert es auch bei mir nicht. Der Verweis 'Aufträge'.'Auftrags-Nr.' gibt keinen Wert zurück. Jedenfalls nicht als Trigger "Bei neuem Datensatz". Mit einer Schaltfläche hingegen funktioniert der Code (in beien Versionen). Sehr seltsam. Ein Bug? Ich habe leider auch keine Idee für einen Workaround. Vielleicht fällt Leo was ein."

     

    Und zack - schon ist die Lösung da. ;)

    • Master70
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das mit dem Funktionsfeld in der Untertabelle passt perfekt so und funktioniert auch wie gewünscht. Den Button sehe ich eher als Notlösung. Danke

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 27Antworten
  • 2831Ansichten