0

Datumspielereien: Wie kann ich in einem Feld einen Leistungszeitraum darstellen?

Ich habe im Datensatz vier Datumsfelder. Es können alle Datumsfelder das gleiche Datum aber auch verschiedene Daten haben. Mind. eines ist immer ausgefüllt, die anderen 3 können auch ohne Eingabe sein.

Wie kann ich in einem Feld einen Leistungszeitraum darstellen?

 

Beispiel 1:

Datum A und Datum B sind beide vom 10.10.2018.

Dann soll ausgegeben werden: Leistungsdatum 10.10.2018

 

Beispiel 2:

Datum A ist vom 10.10.2018 und Datum B vom 11.10.2018.

Dann soll ausgegeben werden: Leistungszeitraum vom 10.10.2018 bis 11.10.2018

 

Beispiel 3:

Datum A ist vom 10.10.2018 und Datum B ist auch vom 10.10.2018 und Datum C ist vom 12.10.2018.

Dann soll ausgegeben werden: Leistungszeitraum vom 10.10.2018 bis 12.10.2018

10 Antworten

null
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Pyromixer,

    let myARRAY := ['Datum A', 'Datum B', 'Datum C', 'Datum D'];
    let myMAX := max(myARRAY);
    let myMIN := min(myARRAY);
    "Leistungszeitraum " + if myMAX = myMIN then
    text(myMAX)
    else
    "vom " + myMIN + " bis " + myMAX
    end

    Leo

    • Pyromixer.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Dankeschön.

    Aber da ich ja kein Datenbank Nerd bin und trotz langer Suche auf diesen Seiten nichts gefunden habe was überhaupt genau ein ARRAY ist und wie man es einsetzt steh ich mal wieder auf dem Schlauch. Ich finde zwar ständig was über ARRAYS aber nichts für Dummies wie mich :-(

     

    Brauche ich drei Felder namens "myARRAY" + "myMAX" + "myMIN" für diese Aufgabe? Und welches Format müssten die haben. Und wo soll der Code überhaupt rein? Das wäre toll wenn sich der Knoten im Kopf noch auflösen würde :-)

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Du musst Die Formel bei einem berechneten Feld einsetzen. Keine zusätzliche Felder oder so.

    mit let myARRAY deklarierst du eine Reihe an Datums. Und diese Reihe kann man dann wie eine Tabelle untersuchen. Als wäre es die Tabelle mit einer Spalte und vier Zeilen.

    Hier ein Beispiel.

    https://www.dropbox.com/s/7y9xongebjkplg1/Leistungszeitraum.ninox?dl=0

     

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Ein Array ist bei Ninox eine Variable, die - im Gegensatz zu "normalen" Variablen - mehrere Werte desselben Datentyps aufnehmen kann. Die Werte werden durch Kommas getrennt nacheinander in die Variable eingelesen und intern durchnummeriert (indiziert). Über diesen Index kann auf jeden einzelnen Wert im Array zugegriffen werden.

     

    Im Grunde verhalten sich Arrays also ähnlich wie einspaltige Tabellen. Mit dem Unterschied, dass sie wie alle Variablen nur temporär während der Laufzeit des Scriptes existieren und sich danach wieder in Wohlgefallen auflösen. Arrays lassen sich auch nach bestimmten Werten durchsuchen, bspw. nach dem höchsten (max) bzw. niedrigsten (min).

     

    Man hätte Leos Lösung wahrscheinlich auch mit mehreren verschachtelten if-Abfragen realisieren können, aber mit einem Array ist es der Code deutlich kürzer und wahrscheinlich auch schneller.

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Wieder zu spät. Na ja, wie heißt es so schön: Doppelt gemoppelt hält besser. ;)

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Super erklärt! 

    Hier ist noch die Erklärung aus dem Handbuch:

    https://ninoxdb.de/de/manual/berechnung/variablen-und-arrays

    Leo

    • Pyromixer.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Wahnsinn! Vielen Dank Jungs. Nun war es auf einmal ganz einfach:

     

    Diese Handbuchstelle muss ich ständig übersehen haben. Ich danke Euch nochmals und bin wieder einen Schritt weiter :-)

    • Pyromixer.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Nun hatter Blut geleckt :-)

    Kann man das Wort "Leistungszeitraum" bei nur einem Datum in das Wort "Leistungsdatum" verwandeln?

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    [...]
    if myMAX = myMIN then
        "Leistungsdatum: " + text(myMAX)
    else
        "Leistungszeitraum: " + text(myMIN) + " bis " + text(myMAX)
    end

    • Pyromixer.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Merci! Nun passt es 100% :-)))