0

Zahl formatieren nach "number"-Befehl

Ich habe wieder ein Problem bei dem ich trotz Ninox-Referenz und Durchforsten des Forums nicht weiterkomme.
In einem Textfeld generiere ich automatisch eine nächsthöhere Zahl als Laufnummer.
Dies funktioniert auch wunderbar. Jetzt möchte ich gerne mit einem letzten Befehl, dass die Zahl dreistellig dargestellt wird mit dem Befehl 

format(Nummer, "000")

Leider erhalte ich eine Fehlermeldung.

Was mache ich falsch?

14 Antworten

null
    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Es hilft wenn du Fehlermeldung beschreibst. Maus über das rote Viereck, dann steht da was.
    Aber ich denke, du hast die Variable Nummer nicht deklariert.
    Probiere es mal so:
    format(myID.Nummer,"000")

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

    Hallo Uwe

    "Nummer" ist das Textfeld, das ich gerne formatieren möchte.
    Hier noch die Fehlermeldung.

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      R.J. Hi, wo und wann soll das Skript denn ausgeführt werden? Sollte es darum gehen, bei jedem neuen Datensatz automatisch die um 1 erhöhte 'Nummer' zu generieren, böte sich dazu der Trigger "Bei neuem Datensatz" in den Tabellen-Optionen an. Dort würde ich folgendes versuchen:

      let myID := this;
      let lastNum := max((select Pendenzen where Projekt = myID.Projekt).number(Nummer)) + 1;
      Nummer := format(lastNum, "000")
      


       

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Format funktioniert nur mit Zahlen, Datum, Uhrzeit, Termine nicht mit Strings.
    Die erste Stelle in der Klammer muss also dem oben genannten Format entsprechen.
    entweder mit number(myID.Nummer) oder du musst prüfen, ob myID.Nummer überhaupt Zahlen enthält.

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Wenn du Zugang zum deutschen Webinarteam hast, verweise ich mal auf die dortige Reference-DB

    https://app.ninox.com/#/teams/cZRtHt9HkFRu7FyX9/database/ldw22aahz53p/module/L/view/rFBsDliTSAfiA3vu/node/L2/tab/0

    Da stehen ganz nette Sachen drin und ich nutze die DB auch sehr häufig als Nachschlagewerk oder um mir Inspiration durch die enthaltenen Beispiele zu holen.

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

    Hallo ihr zwei

    Vielen Dank schon mal für die rasche Hilfe.
    Auf die Ninox-Referenz habe ich Zugriff und dort auch nachgeschlagen, aber scheinbar zu wenig genau gelesen. 😉

    planox. pro Ich habe es beim Trigger "Bei neuem Datensatz" hinterlegt. Dein Code funktioniert auch. Der Zähler zählt hoch. Aber die Formatierung klappt trotzdem nicht. 
    => Zuvor habe ich das Feld von einem Text in ein Zahlenfeld umgewandelt.

    Ich verstehe nicht warum er die Formatierung nicht zulässt. 😖

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Mach mal ein alert(debugValueInfo(myID.Nummer)) um zu sehen welches Format und welchen Inhalt myID.Nummer hat.

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

    Mit dem Code von planox.pro und dem Zahlenfeld kommt dieser alert.
     

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      R.J. Dem Screenshot nach zu urteilen ist 'Nummer' ein Feld vom Typ Zahl. Es muss aber ein Textfeld sein, wenn es mit führenden Nullen dargestellt werden soll. 

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Probiere mal

    format(myID.number(Nummer),"000")

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen
    R.J. said:
    => Zuvor habe ich das Feld von einem Text in ein Zahlenfeld umgewandelt.

    Das verstehe ich nicht. Die Umwandlung findet ja in der "select"-Zeile durch das "number(Nummer)" statt. Zurückgegeben wird ein numerischer Wert, der um 1 erhöht werden kann. Das passiert aber nur temporär innerhalb des Skriptes, damit korrekt sortiert wird und um die mathematische Operation "+ 1" vornehmen zu können. Durch das format() wird es dann wieder in einen String umgewandelt und in das Textfeld 'Nummer' geschrieben. Ein Textfeld muss es sein, da sich die führenden Nullen sonst nicht darstellen lassen.

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro An den Feldtype habe ich nicht gedacht. 

      Deshalb doch "Der Ninox Evangelist" ;-)

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

    So, jetzt habe ich wieder ein Textfeld gemacht und es funktioniert! 😁

    Nochmals Danke euch. 
    Was würden wir machen, wenn es nicht so fleissige Forumsbeobachter gäbe wie ihr es seid?

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      R.J.  Nochmal abschließend zur Erklärung: Werte, die nur aus Ziffern bestehen, aber bspw. führende Nullen beinhalten, sind Strings und müssen in Textfeldern gespeichert werden. Mit der Funktion number(TEXTFELD) kann man sie bei Bedarf aber in numerische Werte umwandeln. So wird bspw. aus dem String "013" die Zahl 13, mit der sich mathematische Operationen durchführen lassen. Mit Funktionen wie text(), styled() oder eben format() können sie danach wieder in Strings zurückverwandelt und in Textfeldern gespeichert werden.

      Die temporäre Umwandlung in einen numerischen Wert ist aber auch wichtig für die Sortierung. Denn Strings werden zeichenweise von links nach rechts verglichen, so dass bspw. "12" kleiner "9" wäre, da "1" kleiner ist als "9". Um also mit max() den höchsten numerischen Wert zu ermitteln, muss er zuvor mit number() in eine Zahl konvertiert werden, die sich als solche interpretieren und verarbeiten lässt (9 und 12).

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 14Antworten
  • 109Ansichten
  • 3 Folge bereits