0

Zeitraum berechnen zwischen Anfangsdatum (Eintritt ins Projekt) und Enddatum (Ausstellung eines Zeugnisses)

Moin!

unser gemeinnütziger Verein Joven Esperanza e.V. verwendet eine eigene Ninoxdatenbank, um Daten von benachteiligten Kindern in einem Bildungsprojekt in Bolivien zu erfassen. Wir geben die Zeugnisnoten der Kinder bei Ninox ein. Ich möchte nun eine Ansicht erstellen, in der gezeigt wird, wie sich die Schulnoten der Kinder verändern. Dabei soll mit einberechnet werden wie lange das jeweilige Kind schon im Projekt ist. 

Nun zu meiner Frage: Wir geben ein Eintrittsdatum für die Kinder ein.  Für das jeweilige Zeugnis gibt es ein Ausstellungsdatum. Wie kann ich die Zeit berechnen, die das Kind zum Zeitpunkt der Zeugnisausstellung im Projekt war? Die Age- Funktion bezieht sich ja immer auf das heutige Datum. In diesem Fall soll es sich aber nur auf auf das Eintrittsdatum des Kindes und Ausstellungsdatum des Zeugnisses beziehen.

Ich freue mich über Ideen :) Vielen Dank

11 Antworten

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

    Hallo Julius, es kommt darauf an, wie genau das Ergebnis und in welcher Zeiteinheit es angezeigt werden soll. Die einfachste Möglichkeit für eine Berechnung in Jahren wäre, die Differenz der beiden Datumswerte in Tagen zu berechnen und das Ergebnis durch 365 zu teilen:

    round(days(Eintrittsdatum, Ausstellungsdatum) / 365), 2)
    

    Zur Anzeige von Monaten müsste man nur den Wert austauschen:

    round(days(Eintrittsdatum, Ausstellungsdatum) / 30.4))
    
    • Julius
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Super, vielen Dank.

    Nun habe ich noch eine weitere Frage:
    Um nicht für alle bereits eingegebenen Zeugnisse das Ausstellungsdatum per Hand einzutragen würde ich es gern berechnen lassen aus den Angaben, die vorliegen. Diese sind das Ausstellungsjahr und das Quartal. Zum Beispiel sollte das berechnete Ausstellungsdatum für Ausstellungsjahr 2022 und Quartal 1 dann lautet: 31.03.2022. Oder um es nicht abhängig von den letzten Tagen des jeweiligen Monats zu machen: 01.04.2022.

    Dieses berechnete Datum würde ich dann als Ausstellungsdatum, wie gestern vorgeschlagen, verrechnen wollen:

    round(days(Eintrittsdatum, Ausstellungsdatum) / 365), 2)
      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Julius Man könnte alle Datensätze ohne Ausstellungsdatum mit einer Schleife durchlaufen und das fehlende Ausstellungsdatum jeweils wie folgt berechnen lassen:

      for i in select TABELLE where not Ausstellungsdatum do
         i.Ausstellungsdatum := date(i.Jahr, i.Quartal * 3 + 1, 0)
      end
      

      Wobei ich davon ausgegangen bin, dass 'Jahr' und 'Quartal' Felder vom Typ Zahl sind. TABELLE steht als Platzhalter für den tatsächlichen Namen der betreffenden Tabelle.

      Das Script könnte man einmalig entweder über einen Button oder in der die Console ausführen.

    • Julius
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ah ok, das ist eine gute Idee! Ich bin noch Ninox- Anfänger und habe die Console noch nie benutzt. Das werde ich mal probieren.

    So sieht die Eingabemaske für ein Zeugnis aus.

    - oben ruft man einen Schüler auf, Sodass sich Name (Nombre), Nachname (Apellido) usw. automatisch ausfüllen. 

    - Das Jahr ist leider kein Zahlenfeld, sondern ein Textfeld (Gestion)

    - dann wählt man das Quartal (Bimester) in einer Auswahl aus. In der Auswahl ist auch der Punkt "Promedio-anual" auswählbar- das ist ein Gesamtzeeugnis über das ganze Jahr. Da müsste man dann festlegen, dass bei der Auswahl der 31.11. des jeweiligen Jahres gerechnet wird.

    Für mich sieht es aus, als wäre es ziemlich kompliziert, oder gibt es trotz des Auswahlfeldes und Textfeldes eine Lösung?

     

    Herzlichen Dank für die Hilfe!

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

      Julius 

      Das Umwandeln von Textwerten in Zahlen wäre im Prinzip kein Problem. Schwieriger ist es, genau zu durchblicken, was wo in welchem Format gespeichert ist. Bei dem Auswahlfeld für das Quartal bspw. steht hinter der jeweiligen Ziffer noch ein Sonderzeichen.

      WENN ich aber mal davon ausgehe, dass die Einträge des Quartal-Auswahlfeldes in der angezeigten Reihenfolge eingegeben wurden (Q1 = 1, Q2 = 2 ... Promedio = 5) UND das Textfeld für Jahr wirklich nur die vier Ziffern der Jahreszahl enthält, dann könnte man es so versuchen:

      for i in select TABELLE where not DATUM do
         let myJ := number(i.JAHR);
         let myM := if i.QUARTAL > 3 then 12 else i.QUARTAL * 3 end;
         i.DATUM := date(myJ, myM + 1, 0)
      end

      Immer vorausgesetzt, dass auch beide Werte für Jahr und Quartal angegeben wurden.

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

      PS: Datumswerte werden mit "date(Jahr, Monat, Tag)" erstellt, wobei alle drei Parameter als Zahl angegeben werden. Steht für Tag eine 0, dann nimmt Ninox den letzten Tag des Vormonats. Die Angabe "date(2023, 4, 0)" bspw. ergäbe den 31.03.2023. Das nur zur Erläuterung.

    • Julius
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Vielen Dank :)

    Ich habe den Code mal in einen Butten kopiert und die Begriffe mit denen aus der Tabelle ersetzt. Ninox meckert jetzt noch an einer Stelle:

     

     

    Da weiß ich leider wieder nicht weiter...

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

      Julius Was ist Gestión? An der Stelle sollte eigentlich noch mal das Auswahlfeld 'elijir Bimestre' stehen. Denn aus dem soll ggf. ja die Nummer der gewählten Option mit 3 multipliziert werden. Vergleiche noch mal mit meinem Code-Vorschlag oben und ersetze die Platzhalter eins zu eins mit deinen Bezeichnungen.

    • Julius
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ich habe gerade nochmal mit Bolivien gesprochen. Komplizierter Weise Ist Zeugnisvergabe im Mai, September und Dezember + Abschlusszeugnis im Dezember. Daher habe ich versucht es nicht zu multiplizieren, sonder jeden Auswahlpunkt für sich aufzuzählen:

    Kann man das so machen? Da kommt dann aber in Zeile 3 weiterhin eine Fehlermeldung:

    Gestion ist das Ausstellungsjahr (als Textfeld). Das war im ersten Versuch quatsch und gehört ja dann nur zu myJ.

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

      Julius 

      Okay, dann sollte man ganz anders vorgehen und die Werte mit switch/case abfragen. Allerdings passen die Quartale nun irgendwie auch nicht mehr zu den Zeitpunkten der Zeugnisvergabe. Deshalb müsste ich jetzt wieder raten. Also hier einfach mal ein Schema, wie man es machen könnte:

      for i in select TABELLE where not DATUM do
         let myJ := number(i.Jahr);
         let myM := switch i.AUSWAHL do
            case 1: 5
            case 2: 9
            case 3: ... (??)
            default: 12
         end
         i.DATUM := date(myJ, myM + 1, 0)
      end
      
      • Julius
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro Das funktioniert super. herzlichen Dank für deine Hilfe! 🎉
      Eine prinzipielle Anschlussfrage habe ich noch:
      In vielen Tabellen habe ich Verknüpfungen eingebaut. Zum Beispiel bei den Zeugnissen wird ein Kind Verknüpft und durch "Trigger nach Änderung" füllen sich dann einige Datenfelder automatisch mit den Daten des Kindes aus. Wenn ich im Nachhinein ein neues Feld in die Tabelle hinzufüge, dass sich durch den Trigger automatisch ausgefüllt werden soll, funktioniert das nur bei einer neuen Verknüpfung. Kann man diesen Trigger für alle Verknüpfungen einer Tabelle quasi neu starten, ohne für jeden Eintrag das Kind neu zu verknüpfen?

Content aside

  • vor 1 JahrZuletzt aktiv
  • 11Antworten
  • 66Ansichten
  • 2 Folge bereits