0

Kommende Geburtstage der aktuellen Woche anzeigen

Liebe Community,

für mein Dashboard möchte ich mir gerne alle Geburtstage anzeigen lassen , die zwischen heute und den nächsten 7 Tagen fällig werden. Die für heute bekomme ich problemlos angezeigt, auch dir für morgen, aber die Zeitspanne, die alle Geburtstage umfasst bekomme ich nicht abgebildet. Mein Code lautet soweit wie folgt:

join(for i in select Mitarbeitende where format(Geburtstag, "DD.MM") = format(today() +1,  "DD.MM") do
        i.Vorname + " " + i.Nachname + " wird am " + format(i.Geburtstag, "DD.MM.") + "  " + age(i.Geburtstag) + " Jahre alt "
    end, "
")

Ich galube es ist nicht so schwer, nur stehe ich gerade auf dem Schlauch. Für einen Tipp wäre ich sehr dankbar.

13 Antworten

null
    • tschijoh
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich habe 3 Spalten auf dem Dashboard. Heute, Morgen und Kommende.

    Bei Kommende habe ich die Formel:

    join(let myheute := today();
    let myPersonen := (select Personen);
    let myGeburtstagskinder := for k in range(0, 8) do
            myheute := myheute + 1;
            myPersonen[month(Geburtstag) = month(myheute) and day(Geburtstag) = day(myheute)].(" " + Vorname + " " + Name + " " + " ist am " + Geburtstag + " " + "geboren" + "
    ")
        end;
    myGeburtstagskinder, "
    ")

    • Fox Concepts
    • Christoph.2
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ralf,

    ich würde die where Klausel mit der Ninox Funktion days(date1, date2) definieren.

    select Mitarbeitende where days(today(), Geburtstag) >= 0 and days(today(), Geburtstag) <= 7
    

    Alternativ zu Deinem Formelfeld könntest du die Datensätze auch in einer Ansicht darstellen. Bietet vielleicht mehr Möglichkeiten.

    • Ralf_Kircheis
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Zusammen, vielen dank für die schnellen Antworten.

    Christoph leider scheint der Code nicht ganz zu funktionieren. Könnte es daran liegen, dass er bei der Funktion days auch die Jahre mit berechnet? Mein Feld Geburtstage hat das Format DD.MM.YYYY.  Days gibt ja die Anzahl der Tage zurück und möglicherweise rechnet er dann von beispielweise 29.11.2022(heute) - 29.11.1984 (Geburtstag) und kommt auf 13.870 Tage

    • Fox Concepts
    • Christoph.2
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Oh, ja, da hast du natürlich recht. Du musst natürlich den Geburtstag auf das aktuelle Jahr transferieren. Etwas tricky wird es dann um den Jahreswechsel. Ich hab dir hier eine Formel zusammengestellt, die den nächsten Geburtstag berechnet. Am Besten du packst das in ein Formelfeld in der Tabelle Mitarbeitende und verwendest in der select Abfrage dann dieses Datum, anstatt dem Gebursdatum.

    let bithdayThisYear := date(year(today()), month(Geburtstag), day(Geburtstag));
    let nextBirthday := if days(today(), bithdayThisYear) >= 0 then
            bithdayThisYear
        else
            let bithdayNextYear := date(year(today()) + 1, month(Geburtstag), day(Geburtstag));
            bithdayNextYear
        end;
    nextBirthday
    
      • DBG
      • Claus.2
      • vor 4 Monaten
      • Gemeldet - anzeigen

       Hallo Christoph, vielen Dank für dieses schöne kleine Stück Code, klappt wunderbar. FRAGE: Wie kann ich das Formelfeld als Datumsfeld erkennbar machen und im Kalender von Ninox darstellen?

      • Fox Concepts
      • Christoph.2
      • vor 4 Monaten
      • Gemeldet - anzeigen

       Das geht meines Wissens nicht. Arbeite aber eigentlich auch nie mit dem Ninox Kalender.
      Meines Wissens kann man doch ein Datumsfeld auf 'Jahrestag' setzten. Würde mal schätzen, dass das Datum dann jedes Jahr im Kalender steht?
      Ansonsten kannst du dir möglicherweise noch mit Änderungstriggern helfen und das Datum in ein Datumsfeld schreiben.

      • DBG
      • Claus.2
      • vor 4 Monaten
      • Gemeldet - anzeigen

       Hej, danke für die Antwort. Triggern habe ich schon probiert, aber das muss man dann  in allen bestehenden Datensätzen „anstoßen“.

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Sieht ein bisschen wild aus, scheint aber zu funktionieren - auch jahresübergreifend

    let rangeDat := for i in range(0, 7) do
            format(date(year(today()), month(today()), day(today()) + i), "DD.MM")
        end;
    let result := [""];
    for i in rangeDat do
        for j in (select Mitarbeitende) order by Geburtstag do
            if i = format(j.Geburtstag, "DD.MM") then
                result := array(result, [j.Nachname + if format(j.Geburtstag, "DD.MM") = format(today(), "DD.MM") then
                            " heute"
                        else
                            " wird am " + format(j.Geburtstag, "DD.MM.")
                        end + " " + if format(j.Geburtstag, "DD.MM") = format(today(), "DD.MM") then
                            age(j.Geburtstag)
                        else
                            age(j.Geburtstag) + 1
                        end + " Jahre alt"])
            end
        end
    end;
    join(result[!= ""], "
    ")
    
      • Rafael_Sanchis
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko 

      Hi Mirko

      let rangeDat := for i in range(0, 7) do
              format(date(year(today()), month(today()), day(today()) + i), "DD.MM.YY")
          end;
      let result := [""];
      for i in rangeDat do
          for j in (select DOCUMENTOS) order by Semana do
              if i = format(j.FechaP5, "DD.MM.YY") then
                  result := array(result, [j.Documento + if format(j.FechaP5, "DD.MM.YY") = format(today(), "DD.MM.YY") then
                              " - "
                          else
                              " Date to be issued : / " + format(j.FechaP5, "DD.MM.YY")
                          end])
              end
          end
      end;
      join(result[!= ""], "
      ")

      Need again yout help,  I am trying to adapt your Code to my need, I do not need to compare to (today), I need compare to a specific Date that is my field (DataDate) is possible?

      The idea is to show only the Deliverables that will be issue in the next 7 Days, from the DataDate.

      Thanks 

      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Rafael Sanchis Hi Rafael. Try this on first position in code, and change all "today()" to "datField". Mirko

      let datField := DataDate;
      
      • Rafael_Sanchis
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko Thank Mirko 😞Easy.

    • Ralf_Kircheis
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Habt vielen herzlichen Dank, ihr seid Klasse! Habt eine tolle Vorweihnachtszeit

      • Rafael_Sanchis
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ralf Kircheis hi Ralph.

      You have a simple dB with these example ? 

      I need to adaþt this release documents.

      Appreciate