0

Belege Nummerieren und mit Buchstaben versehen

Hallo zusammen, ich bin Neuling und habe praktisch keine Erfahrung mit Datenbanken und Programmieren, auch wenn ich schon einiges aufgebaut habe mit Ninox im letzten Jahr.

Hier mein Frage.

- Ich habe eine neue Tabelle Einnahmen-Ausgaben in der ich Belege erfassen möchte.

- Wenn ich einen neuen Datensatz erfasse, lasse ich mir mit folgender Formel eine neue Beleg-Nr. erstellen. B-0001, B-0002, B-0003 etc. funktioniert wunderbar... Könnte man auch weg lassen von mir aus ;)

'Beleg-Nr.' := "B-" + format(cnt(select 'Einnahmen-Ausgaben'), "0000")

Nun habe ich im Datensatz eine Auswahl für (1) Einnahmen und (2) Ausgaben. Mit denen ich jeweils das B- in der Beleg-Nr. durch ein A- oder E- ersetzen möchte.

Wir krieg ich es hin, dass der Buchstabe ersetzt wird, und die Nr. der jeweiligen Kategorie fortgeführt wird. wie im Bild zB. würde ich hier jetzt Einnahme auswählen und es sollte dann bei der Beleg-Nr. E-0003 stehen.

Ich müsste ja irgendwie mit contains ("E-", Beleg-Nr.) suchen und dann draufzählen...

Hab vieles probiert und nachgeforscht und blick einfach nicht durch :/...

Im Moment siehts so aus und die Buchstaben funktionieren:

if 'Einnahme / Ausgabe' = 1 then
    select 'Einnahmen-Ausgaben' where contains("E-", 'Beleg-Nr.');
    'Beleg-Nr.' := "E-" + format(cnt(select 'Einnahmen-Ausgaben' where 'Beleg-Nr.'), "0000")
else if 'Einnahme / Ausgabe' = 2 then
    select 'Einnahmen-Ausgaben' where contains("A-", 'Beleg-Nr.');
    'Beleg-Nr.' := "A-" + format(cnt(select 'Einnahmen-Ausgaben' where 'Beleg-Nr.'), "0000")
end

Wäre froh um Hilfe dass ich etwas weiter komme... Gibt sicher ne ganz einfache Lösung. 

Liebe Grüsse aus der Schweiz

Johannes

11 Antworten

null
    • Heinrich Frey Maschinenbau GmbH
    • Christian_Rott
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Johannes, ich bin mir nicht sicher aber müßtest du nicht noch +1 mit einsetzen.

    if 'Einnahme / Ausgabe' = 1 then
        select 'Einnahmen-Ausgaben' where contains("E-", 'Beleg-Nr.');
        'Beleg-Nr.' := "E-" + format(cnt(select 'Einnahmen-Ausgaben' where 'Beleg-Nr.')+1, "0000")
    else if 'Einnahme / Ausgabe' = 2 then
        select 'Einnahmen-Ausgaben' where contains("A-", 'Beleg-Nr.');
        'Beleg-Nr.' := "A-" + format(cnt(select 'Einnahmen-Ausgaben' where 'Beleg-Nr.')+1, "0000")
    end
    

    Kannst es ja mal versuchen

      • Johannes.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Christian Rott Danke Christian, dann tut sich was ja.

      Aber wie es scheint hat Torsten recht mit dem falschen Ansatz. Ninox rechnet mit dem cnt() scheinbar die Anzahl Einträge die vorhanden sind und nicht mit der Zahl die im Datensatz vorhanden ist.

      Muss wohl noch etwas herumbasteln...

    • Torsten_Stang.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    ein kleiner Hinweis zu dieser Thematik am Rande:

    mit cnt() zu arbeiten ist IMHO der falsche Ansatz - löschst Du eine Beleg-Nr. kann es auf dem Weg passieren, dass Nummern zwei mal vergeben werden.

    für Einnahmen z.B. so

    'Beleg-Nr.' := "E-" + format(max(select 'Einnahmen-Ausgaben'.item(split('Beleg-Nr.',"-"),1))+1,"0000")
      • Johannes.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Torsten Stang Vielen Dank für den Hinweis Torsten betreffend cnt().

      Habe Deine Variante versucht. Leider nimmt es die aber nicht an... fehlt wohl noch was.

      Vielleicht finde ich es heraus.

      • Torsten_Stang.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Johannes 

      versuch mal das:

      'Beleg-Nr.' := "E-" + format(max(select 'Einnahmen-Ausgaben'.number(item(split('Beleg-Nr.',"-"),1)))+1,"0000")
      
      • Johannes.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Torsten Stang Das funktioniert schon besser. Es erstellt jetzt immer die nachfolgende Nummer.

      Leider filtert es aber noch nicht zwischen E- und A-. Das heisst es nimmt immer die höchste gefundene Zahl von allen und nicht von der gewünschten Kategorie.

      Ich denke wenn das filtern noch richtig eingestellt ist, wird es so tiptop funktionieren. Habe aber keine Ahnung was ich da missachte...

      irgendwie ist das noch falsch: select 'Einnahmen-Ausgaben' where contains("E-", 'Beleg-Nr.');

       

      if 'Einnahme / Ausgabe' = 1 then
          select 'Einnahmen-Ausgaben' where contains("E-", 'Beleg-Nr.');
          'Beleg-Nr.' := "E-" + format(max((select 'Einnahmen-Ausgaben').number(item(split('Beleg-Nr.', "-"), 1))) + 1, "0000")
      else
          if 'Einnahme / Ausgabe' = 2 then
              select 'Einnahmen-Ausgaben' where contains("A-", 'Beleg-Nr.');
              'Beleg-Nr.' := "A-" + format(max((select 'Einnahmen-Ausgaben').number(item(split('Beleg-Nr.', "-"), 1))) + 1, "0000")
          end
      end

      • Torsten_Stang.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Johannes contains('Beleg-Nr.',"E-")

      https://docs.ninox.com/en/script/functions/contains

      • Johannes.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Torsten Stang wenn man vor lauter Bäumen den Wald nicht mehr sieht..... Perfekt. Jetzt funktioniert es tiptop! Vielen Dank Torsten für das Engagement. Es ist mir eine grosse Hilfe. Hier nun die Lösung noch etwas vereinfacht, falls es mal jemand gebrauchen kann:

      let myLastE := (select 'Einnahmen-Ausgaben' where contains('Beleg-Nr.', "E-"));
      let myLastA := (select 'Einnahmen-Ausgaben' where contains('Beleg-Nr.', "A-"));
      if 'Einnahme / Ausgabe' = 1 then
          'Beleg-Nr.' := "E-" + format(max(myLastE.number(item(split('Beleg-Nr.', "-"), 1))) + 1, "0000")
      else
          'Beleg-Nr.' := "A-" + format(max(myLastA.number(item(split('Beleg-Nr.', "-"), 1))) + 1, "0000")
      end

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Johannes. Schreib mal in den "Trigger nach Änderung" Deines Auswalfelds folgenden Code:

    if 'Einnahme / Ausgabe' = 1 then
        Ort := replacex(Ort, "^.", "E")
    else
        Ort := replacex(Ort, "^.", "A")
    end
    
      • Johannes.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko das ersetzt ganz wunderbar E und A sucht aber leider nicht nach der höchsten Nummer in der entsprechenden Kategorie... es scheint alles daran zu scheitern. ich glaub ich Machs jetzt dann einfach von Hand hahaaaa... ;D

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Johannes. Bevor Du jetzt manuell weitermachst, teste doch bitte mal noch folgendes. Lege mal das Script für die Rechnungsnummernerstellung still und gib wieder als Trigger im Auswahlfeld folgendes ein. Das sieht zwar etwas schräg aus, legt Dir aber fortlaufend gleich die E- oder A- Nummern an. Mirko

    if Auswahl = 1 then
        'Beleg-Nr.' := "E-" + format(number(max((select 'Einnahmen / Ausgaben')[extractx('Beleg-Nr.', "^.") = "E"].substr('Beleg-Nr.', 2))) + 1, "0000")
    else
        'Beleg-Nr.' := "A-" + format(number(max((select 'Einnahmen / Ausgaben')[extractx('Beleg-Nr.', "^.") = "A"].substr('Beleg-Nr.', 2))) + 1, "0000")
    end
    

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 11Antworten
  • 114Ansichten
  • 4 Folge bereits