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
    • Gregor.2
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Christoph
    Hallo Frank

    danke, eine nützliche Funktion ist das ;)

    Ich möchte damit die Eingabe neuer Kunden in der Tabelle Kunden überprüfen.
    Beim erstellen eines neuen Datensatzes habe ich ja die Kundennumner noch nicht eingegeben,
    daher setze ich die Funktion bei "Änderung eines Datensatzes" ein.

    Funktionierte soweit bis zum "else"
    danach wurde mir das Feld Name immer geleert "" ;)

    Dann habe ich folgende Änderung vorgenommen:

    else
    (Name := Name)

    So geht das ;)

    Und damit mein Feld "Name" auch wieder fein leer ist,
    nach dem ändern des Datensatzes in eine "neue" Nummer,
    noch ein wenn dann ;)

    let n := Kundennummer;
    let n := cnt(select Kunden where Kundennummer = n);
    if n > 1 then
    (Name := "Doppelte Kundennummer!")
    else
    if Name = "Doppelte Kundennummer!" then
    (Name := "")
    else
    (Name := Name)

    Danke an Alle hier im Forum für die hilfreichen Beiträge!
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Wobei du so uU leere Datensätze erzeugst?
    Da ich eh im Anschluß (bei einer Doublette) manuell löschen muß, habe ich auf das Leeren der Einträge verzichtet.

    Dein Problem ließe sich völlig umgehen, wenn Du die Kundennummer zu Beginn vergeben läßt. Also in der Tabelle unter "bei neuem Datensatz folgendes Skript ausführen".

    Christoph
    • Rudi
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo, auch von mir mal eine Problembeschreibung: Habe eine Buchungstabelle und eine Budgettabelle in der die Summen pro Kategorie und Zeitraum (JahrMonat) gezeigt werden sollen. Durch eine Schlatfläche löse ich ein Script aus.
    ---------------------------------------
    let Soll := JahrMonat_Soll;
    for BG in (select Budget) (
    let Kat := BG.Kategorie;
    BG.(Aktivitaet := sum((select Buchungen)[(Kategorie = Kat and JahrMonat = Soll)].Buchungswert_Kategorie))
    )
    --------------------------------------
    Leider werden nur Nullen in das Summenfeld geschrieben. Erwarte ich zuviel?
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Rudi,
    Soweit ich weiß werden die Eckklammer nur bei verknüpften Tabellen eingesetzt. Wenn du aber "select" benutzt, ist die Bedingung mit "where" zu schreiben.
    etwa so:
    let Soll := JahrMonat_Soll;
    for BG in (select Budget) (
    let Kat := BG.Kategorie;
    BG.Aktivitaet := sum((select Buchungen where Kategorie = Kat and JahrMonat = Soll).Buchungswert_Kategorie)
    )

    Gruß Leo
    • Rudi
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,
    Danke für den Tipp. Mein Hauptfehler war, dass ich um auf den Wert der Kategorie zuzugreifen, nicht bedacht habe, dass das eine N:1 Verbindung zur Tabelle Kategorie ist. Also musste ich 'b.Kategorie.Kategorie '(und nicht nur b.Kategorie) nehmen.

    Letztendlich habe ich aber die summewenn-Funktion selber gebaut.

    So funktioniert es für mich. Vielleicht kann hier jemand einen Tip geben, wie man das mit [ ] bzw. 'select where löst'
    ----------------------------
    let Soll := JahrMonat_Soll;
    for g in (select Budget) (
    let Kat := g.Kategorie;
    g.(Aktivitaet := 0);
    for b in (select Buchungen) (
    if g.JahrMonat = Soll and b.Kategorie.Kategorie = Kat then
    g.(Aktivitaet := g.Aktivitaet + b.Buchungswert_Kategorie)
    else
    void
    )

    )
    ---------------------------------
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Guten Morgen,
    Ich habe die Löschfunktion in der Anleitung nicht gefunden. Diese gibt es aber. Bei mir funktioniert sie wie folgt:

    delete select Tabelle where Datensatz=Wert

    Bitte noch einpflegen.

    Gruß
    Leo
    • Morris_Hanson
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hi Leo!

    Da würde ich noch ein etwas abwarten, habe heute Ninox durch den Einsatz dieses Befehls in einer Befehlskette erstmals zum Absturz gebracht.

    Wenn du delete kombinierst mit popup oder openRecord dann schließt sich Ninox!

    kann ich dich auch per mail kontaktieren?
    Lg
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo René,
    Danke für die Warnung, habe bis jetzt nur mit Befehlsschaltfläche ausprobiert.
    Meine Mail : leo.semik@gmail.com
    Gruß
    Leo
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Rene,

    könntest Du die problematische Formel an support@ninoxdb.de senden, damit wir das analysieren können?

    Lieben Dank
    Frank
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ist jetzt mit drin im Kapitel "Delete Records"

    Viele Grüße
    Frank
    • Morris_Hanson
    • vor 8 Jahren
    • Gemeldet - anzeigen
    super danke! Formel habe ich per email versandt. da ist jetzt glaube ich ein kleiner fehler in der formatierung im kapitel formatierung. zumindest im safari browser schaut das etwas komisch aus. lg
    • Morris_Hanson
    • vor 8 Jahren
    • Gemeldet - anzeigen
    ups. ich meinte natürlich im kapitel html...
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Danke! Ist behoben.
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Guten Tag,
    kann man in der neuen Version den Datensatz per Skript duplizieren?

    Gruß
    Leo
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,
    das geht leider noch nicht.
    Viele Grüße
    Frank
    • Markus_Gehrig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Guten Tag
    Ich habe versucht aus dem Auswahlfeld Geschlecht in dem Textfeld Briefanrede die richtige Briefauswahl zu bestimmen:
    if Geschlecht = "Männlich" then
    Briefanrede = "Sehr geehrter Herr"
    else
    Briefanrede = "Sehr geehrte Frau"
    Aber das Feld Briefanrede bleibt leer. Was muss ich tun.

    Gruss Markus
    • Markus_Gehrig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Guten Tag
    Kann das Feld Standort auch für eine Adresse verwendet werden? Gibt es dazu eine Funktion? Ich habe versucht eine Adresszeile einzufügen, aber das geht nicht.

    Beste Grüsse
    Markus
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Markus,
    Geschlecht ist ein Auswahlfeld. Wenn bei dir "Männlich" mit Nummer 1 angelegt ist und "Weiblich" mit 2 dann:

    Briefanrede:=if Geschlecht=1
    then “Sehr geehrter Herr”
    else “Sehr geehrte Frau”

    Gruß
    Leo
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Markus,
    aktuell können Längen- und Breitengrade aus dem location Feld extrahiert werden. Adresse oder Titel nehmen wir mit auf die Anforderungsliste.
    VG, Alex
    • Markus_Gehrig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Leo
    Danke für Deine rasche Antwort. Das habe ich nun so versucht. Aber ich bekomme immer die folgende Meldung beim Speichern: "Diese Funktion darf keine Datenänderung vornehmen". Daraus ortete ich meinen Fehler, dass ich vielleicht das falsche Datenformat des Zielfeldes "Briefanrede" verwendet habe. Nach dem ich ein normales Textfeld als Zielfeld versucht habe, habe ich es noch mit einem Auswahl Feld versucht. Aber das ging auch nicht. Was mache ich falsch?

    Beste Grüsse
    Markus
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Markus,
    Diese Fehlermeldung erscheint, wenn du mit berechnetem Feld andere Felder manipulieren möchtest.
    Angenommen dein Feld "Briefanrede" von Datenart eine f(x)Berechnung ist. Dann lautet die Formel bei Funktion:

    if Geschlecht=1
    then “Sehr geehrter Herr”
    else “Sehr geehrte Frau”

    Wenn "Biefanrede" dagegen ein Textfeld ist, dann musst du Die Formel:

    Briefanrede:=if Geschlecht=1
    then “Sehr geehrter Herr”
    else “Sehr geehrte Frau”

    bei dem Auswahlfeld "Geschlecht" im Bereich "Nach Änderungen folgendes Skript ausführen" schreiben.

    Grüße
    Leo
    • Markus_Gehrig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Vielen Dank Leo, jetzt funktioniert's und ich habe wieder einiges gelernt.
    • Morris_Hanson
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo,
    ist es möglich beim Befehl openTable("Invoices", "All Invoices")
    diesen Table nach einem bestimmten Kriterium zu filtern..

    Ps. Möchte eine Bedienschaltfläche mit dem Befehl bestücken, die mir dann durch einen automatisch Filter nur Einträge für eine bestimmte Person anzeigt.

    Danke
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Rene, man kann mit der Funktion eine bestimmte Ansicht einer Tabelle aufrufen. Welche Filter in der Ansicht gesetzt sind lässt sich nicht per Skript setzen.
    VG, Alex
    • Morris_Hanson
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Danke Herr König.
    Wäre aber ein nicht uninteressantes Feature für die Anforderungsliste :) es ist nicht praktikabel 150 verschiedene Ansichten zu erstellen. Da wäre eine Filtermöglichkeit per Skript ideal.