0

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

null
    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen,

    leider bin ich immer noch nicht erfolgreich, ich schicke euch einfach mal zwei Bilder um das Problem sichtbarer zumachen.... Evtl. kann mir dann jemand einen Tipp geben.

    Vielen Dank schonmal.

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

    hm, so?

    let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear).number(item(split('ID-Nr',"-"),2));
    
    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Torsten Stang said:
    max

     So meinst Du?

    Klappt auch nicht :o(

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

      Erik Möller 

      hab eine Klammer verpennt, sorry.

      let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear).number(item(split('ID-Nr',"-"),2)));
      
      
      • Erik_Moller
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Torsten Stang Super, jetzt zählt er mit. Danke!

      Aber irgendwie zählt er auch fortlaufend, wenn ich dazwischen ein AN (Angebot) bzw. eine ABS (Auftragsbestätigung) schreibe.

      D.h.

      ABS-2022 -0022,

      RE-2022-0023,

      AN-2022-0024

      Kann man das auch so einstellen, dass er für jeden Bereich fortlaufend zählt?

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

      Erik Möller 

      let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear and item(split,('ID-Nr',"-"),0) = "RE").number(item(split('ID-Nr',"-"),2)));
      
      

      für die anderen Belegarten jeweils das "RE" ersetzen...

    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Torsten Stang said:

     Das ist alles in eine Tabelle bei mir. 

    Also müsste ich dann einfach noch eine If-Formel für die Belegarten dazu einbauen?

    Versuche ich mal...

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

      Erik Möller 

      let myArt := if Typ = 1 then "AN" else if Typ = 2 then "ABS" else "RE" end end;
      let myYear := year(today());
      let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear and item(split,('ID-Nr',"-"),0) = myArt).number(item(split('ID-Nr',"-"),2)));
      'ID-Nr' := myArt + myYear + "-" + format(myRN + 1, "0000");
      'Datum der Rechnungsstellung' := today().
      

      die Options-Nr. Deines Auswahlfeldes 'Typ' musst Du halt an die realen Gegebenheiten anpassen - kann ich nur raten.

    • Torsten_Stang.1
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Erik Möller said:
    Also müsste ich dann einfach noch eine If-Formel für die Belegarten dazu einbauen?

     Genau - gemäß Deinem Code aus dem Originalpost dachte ich, Du hättest sowas schon... ;-)

      • Erik_Moller
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Torsten Stang Glaub ich stehe auf den Schlauch.... 

      Mir wird das "if" ständig bemängelt 🙈

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

      Erik Möller ich hab' Dir ein Code-Beispiel nachgeschoben, probier' mal.

    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Torsten Stang said:

    Jetzt hat er wieder aufgehört die Zahlen fortlaufend zu zählen :(

    Und ich nutze auch die richtigen Options-Nr.  

    let myArt := if Typ = 1 then
            "AN"
        else
            if Typ = 3 then "ABS" else "RE" end
        end;
    let myYear := year(today());
    let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear and item(split('ID-Nr', "-"), 0) = myArt).number(item(split('ID-Nr', "-"), 2)));
    'ID-Nr' := myArt + myYear + "-" + format(myRN + 1, "0000");
    'Datum der Rechnungsstellung' := today()

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

      Erik Möller klar, weil mir ein Bindestrich abhanden gekommen ist - sorry.

      let myArt := if Typ = 1 then "AN" else if Typ = 3 then "ABS" else "RE" end end;
      let myYear := year(today());
      let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear and item(split,('ID-Nr',"-"),0) = myArt).number(item(split('ID-Nr',"-"),2)));
      'ID-Nr' := myArt + "-" + myYear + "-" + format(myRN + 1, "0000");
      'Datum der Rechnungsstellung' := today().
    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Torsten Stang said:
    myRN

     Bei RE macht er es jetzt, bei AN bzw ABS nicht....

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

      Erik  hmmmm... 

      let myArt := if number(Typ) = 1 then "AN" else if number(Typ) = 3 then "ABS" else "RE" end end;
      let myYear := year(today());
      let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear and item(split,('ID-Nr',"-"),0) = myArt).number(item(split('ID-Nr',"-"),2)));
      'ID-Nr' := myArt + "-" + myYear + "-" + format(myRN + 1, "0000");
      'Datum der Rechnungsstellung' := today().
      
      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Moin Erik Möller ,

      Wie erzeugtst du denn einen neuen Rechnungsdatensatz? über das +-Symbol oder über einen Button bei KUNDEN?

      Der Code von Torsten macht kann mE. nur einen neuen Datensatz mit dem TYP "RE-" erzeugen, da Ninxo ja noch keine Auswahl des Feldes TYP von dir bekommen hat.
      Wenn du danach die Auswahl TYP änderst kommt es darauf an, was für einen Code du im Trigger nach Änderung vom Feld TYP stehen hast.
      In der Standard-Rechnungsvorlage wird dort nur im bestehenden Datensaz der Text vorne ausgetauscht.
      Wie sieht das bei dir aus?

    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    Torsten Stang said:
    0000

     :(  jetzt geht wieder nichts...

    let myArt := if number(Typ) = 1 then "AN" else if number(Typ) = 3 then "ABS" else "RE" end end;
    let myYear := year(today());
    let myRN := max((select Rechnungen where year('Datum der Rechnungsstellung') = myYear and item(split('ID-Nr',"-"),0) = myArt).number(item(split('ID-Nr',"-"),2)));
    'ID-Nr' := myArt + "-" + myYear + "-" + format(myRN + 1, "0000");
    'Datum der Rechnungsstellung' := today() 

    Hier ist der Wurm drin. 

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

      Erik Möller so langsam bin ich aus der Ferne mit meinem kleinen Latinum am Ende - ich könnte wetten mit der DB in den Fingern wäre es gleich gelöst. Gibt's die Option, dass Du eine Dummy-DB zur Verfügung stellst?

    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    DIGITOOL said:

    Hallo Digitool, 

    vielen Dank schonmal für deine Mitunterstützung.

    Also ich erzeuge den neuen Rechnungsdatensatz über das + Symbol.

    Passiert aber auch wenn ich über den Kunden reingehe.

    "Code du im Trigger nach Änderung vom Feld TYP stehen hast", hier habe ich gar nichts drin stehen.

    Trigger 

    Heißt das ich muss hier den Code einfügen? 

      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Erik Möller bei Typ nach Änderung muss das ganze stehen. 

       

      • DIGITOOL
      •  
      • Ninox Solution-Partner
      • ronaldp
      •  
      • Vor 11 Minuten 
      •  
      •  
      •  

      Moin Erik Möller ,

      Wie erzeugtst du denn einen neuen Rechnungsdatensatz? über das +-Symbol oder über einen Button bei KUNDEN?

      Der Code von Torsten macht kann mE. nur einen neuen Datensatz mit dem TYP "RE-" erzeugen, da Ninxo ja noch keine Auswahl des Feldes TYP von dir bekommen hat.
      Wenn du danach die Auswahl TYP änderst kommt es darauf an, was für einen Code du im Trigger nach Änderung vom Feld TYP stehen hast.
      In der Standard-Rechnungsvorlage wird dort nur im bestehenden Datensaz der Text vorne ausgetauscht.
      Wie sieht das bei dir aus?

    • Erik_Moller
    • vor 2 Jahren
    • Gemeldet - anzeigen
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Erik Möller Torsten Stang

    AHA,
    max((select Rechnungen where year('Datum der Rechnungsstellung')..... funktioniert nicht, wenn es mehrere Datensätze mit dem Ergebnis gibt!
    Lösche mal alle Datensätze oder wenn das nicht geht, die Datensätze die eine gleiche ID-NR (2022-XXXX) haben. So das es nur jeweils einen Datensatz mit (2022-XXXX) gibt.

    Dann sollte es funktionieren.

    • Torsten_Stang.1
    • vor 2 Jahren
    • Gemeldet - anzeigen
    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...?

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Torsten Stang 

      ich hab zum Test in ein FX-Feld mit dem Code erstellt:

      let myYear := year(today());
      let selection := last(select Rechnungen where year('Datum der Rechnungsstellung') = myYear);
      "ID-Nr: " + selection.'ID-Nr' + " Nr: " + selection.Nr
      

      ergibt das:

       

      und mit

      let myYear := year(today());
      let selection := max(select Rechnungen where year('Datum der Rechnungsstellung') = myYear);
      "ID-Nr: " + selection.'ID-Nr' + " Nr: " + selection.Nr
      

      ergibt das:

       

      Da ich kein Output für ID-Nr. sehe gehe ich davon aus, dass daraus auch nix berechnet werden kann?!?

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Gedankenfehler, das ist ja nur die halbe select Abfrage...