0

Funktions- und Sprachreferenz

Hallo, ich habe zwei Frage:

1) Ich würde gerne zu einer bestehenden Uhrzeit eine gewisse Anzahl Stunden und Minuten addieren. Leider schaffe ich das nur indem ich zwei Datenfelder von Typ Uhrzeit addiere, aber ich hätte erwartet, dass man auch z.B. Begin := Begin + "07:00" oder wie auch immer angeben kann. Ich habe schon alle möglichen Varianten probiert, komme aber nicht auf eine Lösung. Ist es überhaupt möglich Zeiten auf diese Weise zu addieren?

2) es gibt bei Rechnen die Funktion Prozent %, allerdings finde ich dazu keine Beschreibung und bekomme auch keine sinnvollen Werte raus. Wo finde ich dazu eine Erklärung/Beispiel?

Noch zwei Anregungen:
- generell fände ich es gut, wenn einzelnen Funktionen durchgehend mit ein oder zwei aussagekräftigen Beispielen beschrieben wären, das würde viel Zeit ersparen.

- will man eine Funktion als Text eingeben, werden im Editor zwar Zeilennummern angezeigt, aber leider keine Spaltennummern. Die Fehlerhinweise erscheinen aber mit Spaltennummer! Dann beginnt das fleissige Zählen....

Besten Dank Klaus

493 Antworten

null
    • bernd
    • vor 7 Jahren
    • Gemeldet - anzeigen
    DANKE, hat funktioniert...
    • Thomas_Biedermann
    • vor 7 Jahren
    • Gemeldet - anzeigen
    Hallo
    Ich nutze NinoxCloud mit meinem Team und möchte Arbeitsberichte, die vor Ort beim Kunden erstellt und unterschrieben werden, erstellen die eine einmalige automatisch erstellte Nummer haben. Da es durchaus sein kann dass zwei Mitarbeiter gleichzeitig einen Bericht erstellen oder ein Kollege gerade keine Internetverbindung hat, ist die Gefahr groß dass zwei Berichte die gleiche Nummer haben. Der Aufbau der nummer ist nicht so wichtig aber ich stelle sie mir in etwa so vor "A12345". Ich habe irgendwie so im Kopf dass ich die nummer vom Benutzer abhängig mache. Also in etwa so dass die Nummerierung vom Benutzer A mit A10001 beginnt und von Benutzer B mit A20001. Leider bin ich da noch nicht richtig weiter gekommen wie ich dass in einer Tabelle mache und für jeden Benutzer eine eigene Tabelle anlegen möchte ich nicht.
    Hat zufällig jemand eine Idee wie ich das lösen könnte?
    Danke
    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo,
    ich würde in der Tabelle eine Spalte „Benutzerkennung“ und eine Spalte „Nummer“ anlegen. Jeder Mitarbeiter bekommt seine eigene Kennung, z.B. Mitarbeiter 1 „DR“, Mitarbeiter 2 „HG“ usw.
    Die Nummer dann bei jedem neuen Datensatz erzeugen lassen:
    Nummer := max((select TABELLENNAME wehre Benutzerkennung = NUTZER ).Nummer) + 1
    NUTZER ist die Benutzerkennung und wird von den Daten vom Mitarbeiter übernommen...
    Tauschi
    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen
    vergessen.—
    die eigentliche Auftragsnummer dann in einer Funktion zusammensetzen lassen... Benutzerkennung + Nummer Ergebnis ist dann z.B.
    DR-1234 oder HG-1234
    • rweinhold
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo,

    ich möchte aus einer Tabelle "Produkte" Produkte mit einer eindeutigen Artikelnummer in eine Tabelle "Preise" übernehmen um Ihnen dort weitere Informationen zuzuweisen.
    Produkte die allerdings bereits in der Tabelle "Preise" sind sollen nicht auswählbar sein.

    Vielen Dank!
    • Birger_H
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Können Sie mir (support@ninoxdb.de) die Datenbank, an der Sie arbeiten einmal also Kopie zuschicken (Hauptmenü -> "Archiv sichern unter...")? Ich schaue dann gerne einmal hinein.

    Birger - Ninox Support
    • Thomas_Biedermann
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hi Tauschi
    Danke für deinen Input.
    Leider konnte ich so nicht das gewünschte Ergebnis erziehlen.
    Ich bekam immer den Error: Diese Aggregation ist nicht möglich: max(string)

    ich habe nun eine Benutzerkennung mit der NutzerID erstellet und dazu dann eine ID mit der ich nun die Nutzer unterscheiden kann.
    hier mein skript:

    Benutzerkennung := userId();
    if Benutzerkennung = "xxxxxxxxxxxxxxxxxx" then
    (TechnikerID := "1")
    else
    if Benutzerkennung = "xxxxxxxxxxxxxxxxxx" then
    (TechnikerID := "2")
    else
    if Benutzerkennung = "xxxxxxxxxxxxxxxx" then
    (TechnikerID := "3")
    else
    if Benutzerkennung = "xxxxxxxxxxxxxxxx" then
    (TechnikerID := "4")
    else
    if Benutzerkennung = "xxxxxxxxxxxxxxxxx" then
    (TechnikerID := "5")
    else
    if Benutzerkennung = "xxxxxxxxxxxxxxxx" then
    (TechnikerID := "5")
    else
    void;
    (let myID := TechnikerID;
    let myNR := "A" + myID + format(cnt((select Servicebericht)[(TechnikerID = myID)]) + 1, "0000");
    NR := myNR)

    xxxxx ersetzt die userID
    Ergebniss dann "A10001"

    Ich weis nicht ob dies jetzt der einfachste weg war aber auf jeden fall funktioniert es jetzt wie ich wollte.
    Vielen Dank für deine Hilfe!
    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo,
    gibt es schon eine Zeitvorstellung für das nächste Update (order by... desc)?
    VG
    Tauschi
    • Birger_H
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Das Update kommt in wenigen Wochen - und: Probieren Sie doch einmal:

    rsort(array) => array; sorts an array in reverse order (descending)

    Quelle: hier

    Birger - Ninox Support
    • jomo_h
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo,

    ich brauche Hilfe bei der Erstellung eigener Funktionen.
    Gebe ich, wie im Beispiel angegeben, folgenden Code ein:

    function hello(name) do
    "Hello" + name + "!"
    end

    dann bekomme ich eine Fehlermeldung ( Symbol erwartet ":" in Spalte 19, bzw. ID erwartet in Spalte 21). Was mache ich falsch?
    • Birger_H
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hier gibt es zwei Probleme: Der Parametertyp, der an die Funktion übergeben wird, muss an dieser Stelle deklariert werden:
    –––
    function hello(x: text) do
    "Hello " + x + "!"
    end;
    hello("Peter")
    –––


    Das zweite Problem ist: Die function()-Erweiterung der Scriptsprache funktioniert derzeit nur in der App, noch nicht im Browser. Wir kümmern uns.

    Birger - Ninox Support
    • jomo_h
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Ah, alles klar. Vielen Dank für die schnelle Antwort.
    • Dominik_Eng
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Herzlichen Dank, jetzt funktioniert es. Habe es bis jetzt auch nicht zum Laufen gebracht.
    Warte aber noch bis es auch im Browser geht.
    • Thomas_Biedermann
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo
    Ich habe leider ein kleines Problem mit meiner automatischen Nummerierung von Serviceberichten die ich im Ninox erstelle. Es ist hier ganz wichtig dass kein Bericht doppelt nummeriert wird. jetzt ist es so dass wenn ich einen bericht mit dem Browser erstelle, und dann einen mit der app am ipad, die app eine nummer auslässt und wenn ich dann wieder einen mit dem Browser erstelle, dieser die gleiche nummer verwendet. also in etwa so:
    1. Bericht im Browser nummer A10001
    2. Bericht in der App nummer A10003
    3. Bericht im Browser nummer A10003.
    hat jemand eine idee woran das liegen könnte?
    Danke
    Lg
    Tom
    • Frank_Bohmer
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Tom,
    nimm am Besten folgende Formel:

    Berichtnummer := "A" + max((select Servicebericht).number(substr(Berichtnummer, 1))) + 1

    Viele Grüße
    Frank
    • Thomas_Biedermann
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Frank
    Danke für die Info!
    Da ich für jeden User (insgesamt 6) eine eigene Nummer generieren muss, habe ich folgende Formel verwendet:

    (let myID := TechnikerID;
    let myNR := “A” + myID + format(cnt((select Servicebericht)[(TechnikerID = myID)]) + 1, “0000″);
    NR := myNR)

    Eigentlich funktioniert es ja wenn ich immer die gleiche Platform verwende, z.B. Immer das iPad. Nur wenn ich zwischen Browser und iPad wechsle, passt die passt die Nummerierung nicht mehr.
    Ich weiß jetzt leider nicht ob es generell ein Bug von Ninox ist oder ob ich einen Fehler im Skript habe.
    Lg
    Tom
    • Mirko.1
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo,

    ich bräuchte noch mal einen Tip.
    Habe zwei Tabellen(Tab_Strassen, Tab_Touren), die über eine Verknüpfungstabelle miteinander verbunden sind.
    Wenn ich nun in Tab_Straßen die Verknüpfung zu Tab_Touren erstellen möchte, muss ich ja immer den Weg über die Verknüpfungstabelle gehen.
    Kann ich da auch eine Befehlschaltfläche anlegen, mit der man per Klick gleich in die Tabelle Touren kommt zu einem neuen Datensatz mit automatisch erstellter Verknüpfung?

    Grüße
    Mirko
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Halo Mirko,

    let SN := Nr;
    let newR := (create 'Tab_Touren');
    let RN := newR.Nr;
    let newV := (create 'Verknüpfungstabelle');
    newV.('Tab_Strassen' := SN);
    newV.('Tab_Touren' := RN);
    popupRecord(record('Tab_Touren',number(RN)))

    Hier musst du natürlich gucken, wie du die Verknüpfungen zu den Tabellen in der Verknüpfungstabelle genannt hast.

    Grüße
    Leo
    • JHV
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Ninox Support,

    ich komme mit dieser Syntax nicht weiter - Fehlermeldung ist
    'Die Ausrücke für 'dann' und 'sonst' liefern unterschiedliche Dateitypen zurück'

    let a := substr('#Abfahrten', 7, 5);
    if a != null then
    first('#011-01 Zughalt'[(text('011.#AbfahrtZ') = a)].'011.Zugnr.'.'010.Nummer')
    else
    void

    Wie müßte es richtig heißen?
    VG und Danke
    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen
    bersuche es mal damit
    ...
    else
    „“

    einen leeren Steing
    • Mirko.1
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,

    vielen Dank für Deine Hilfe, hat wieder einwandfrei geklappt!

    Hab hier in den Kommentaren ab und an gelesen, dass man die Lupe und /oder das Plussymbol in der verknüpften Tabelle ausblenden kann, leider stand da nirgends, wie dieses geht. Ist das möglich?

    Ein Forum wäre echt super, hier irgendwelche Formeln wieder zu finden ist echt ein Graus!

    Grüße
    Mirko
    • Mirko.1
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,

    vielleicht hast Du ja auch hier eine Lösung:
    Ich habe in der Tab_Mitarbeiter noch ein Auswahlfeld, das nach Auswahl eines bestimmten Wertes ähnlich wie die Befehlschaltfläche eine Verknüpfung herstellen soll. Es soll aber in der anderen Tabelle kein neuer Datensatz erstellt werden, die Verknüpfung soll dort mit einem bestimmten bestehenden Datensatz hergestellt werden.
    Ich habe es schon irgendwie mit der Formel von Dir für die Befehlschaltfläche mit select statt create versucht, aber irgendwie haut die Verknüpfung nie richtig hin.

    Grüße
    Mirko
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Mirko,
    Das Problem dabei ist es, dass die Auswahltabelle nicht mit dem Befehl aufrufbar ist. Also musst du noch eine zusätzliche 1:n Beziehung aufbauen und die Werte von dort aus suchen und in die n:m Tabelle reinschreiben. danach sollte der Wert in der 1:n Beziehung wieder geleert werden.
    Ich habe eine Beispieldatenbank für Multiple Schlagwörter

    https://www.dropbox.com/s/ha4pwtlxia1g9p3/MULTIPLE_TAGS.ninox?dl=0

    Dort kannst du die Materialien mit verschiedenen Schlagwörter besetzen.
    Du kannst dort auch sehen, dass das Feld "SHLAGWORT HINZUFÜGEN" keinen "Plus-Symbol" hat. Das kann man nur mit einer Zusatztabelle erreichen und diese als Komposition mit der Tabelle TAGS verknüpfen.
    Schau dir die Datenbank an, vielleicht kannst du die Formeln für dich verwenden.

    Leo
    • JHV
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Danke Tauschi,
    leider die gleiche Meldung. Habe auch schon mal *else* und den Rest weggelassen aber dann kommt die Meldung auch.

    Der code selber steht in einer Funktionsvariablen, der Abfahrtzeiten aus einem String liest und dazu sich die Zugnummer sucht.
    • Mirko.1
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,

    ich bin dann jetzt lieber auf ein Befehlschaltfläche umgestiegen, leider bekomme ich auch da nicht hin, dass ich nicht einen neuen Datensatz in der anderen Tabelle anlegen will, sondern die Verknüpfung mit einem bestehenden, quasi das Lupensymbol.

    Grüße
    Mirko

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 493Antworten
  • 134671Ansichten