Wochenende bei Datumsausgabe in Datumsfeld überspringen
Ich habe ein Datumsfeld, welches mit einem Fälligkeitsdatum versehen ist. Bei wiederholenden Tasks wird dieses Datum entsprechend in die Zukunft verschoben. Sehr unschön ist aber dabei, dass die Wochenenden nicht berücksichtigt und übersprungen werden. Das kann ich gut mit einem Berechnungsfeld lösen, hätte aber gerne nur ein Datumsfeld mit Fälligkeitsangabe.
Ausgelöst wird die Aktion über einen Button "Erledigt" und folgendem Skipt:
let day := number(day(Datum));
let month := number(month(Datum));
let year := number(year(Datum));
let datum := Datum;
switch Wiederholung = 1 do
case Frequenz = 1:
Datum := date(year, month, day + 'Häufigkeit')
case Frequenz = 2:
Datum := date(year, month, day + 'Häufigkeit' * 7)
case Frequenz = 3 and day = 30:
Datum := date(year, month + 'Häufigkeit' + 1, 0)
case Frequenz = 3 and day = 31:
Datum := date(year, month + 'Häufigkeit' + 1, 0)
case Frequenz = 3 and month = 2 and day = 28:
Datum := date(year, month + 'Häufigkeit' + 1, 0)
case Frequenz = 3 and month = 2 and day = 29:
Datum := date(year, month + 'Häufigkeit' + 1, 0)
case Frequenz = 3:
Datum := date(year, month + 'Häufigkeit', day)
case Frequenz = 4 and day(Datum) = 30:
Datum := date(year, month(Datum) + 1 + 3 * 'Häufigkeit', 0)
case Frequenz = 4 and day(Datum) = 31:
Datum := date(year, month(Datum) + 1 + 3 * 'Häufigkeit', 0)
case Frequenz = 4:
Datum := date(year, month + 3 * 'Häufigkeit', day)
case Frequenz = 5:
Datum := date(year + 'Häufigkeit', month, day)
end;
if Wiederholung != 1 then Datum := datum end;
if Wiederholung != 1 then Status := 1 end;
let x := Nr;
let c := (create Dokumentation);
let ma := first((select Mitarbeiter)[userEmail() = 'Ninox ID'].number(Nr));
let txt_einzel := "Erledigt";
let txt_tag := "Erledigt - " + weekdayName(day(datum)) + " | KW " + format(week(datum), "00") + " | " + year(datum);
let txt_woche := "Erledigt - KW " + format(week(datum), "00") + " | " + year(datum);
let txt_monat := "Erledigt - " + monthName(month(datum)) + " | " + year(datum);
let txt_quartal := "Erledigt - Q" + quarter(datum) + " | " + year(datum);
let txt_jahr := "Erledigt - " + year(datum);
let txt := if Wiederholung != 1 then
txt_einzel
else
if Frequenz = 1 then
txt_tag
else
if Frequenz = 2 then
txt_woche
else
if Frequenz = 3 then
txt_monat
else
if Frequenz = 4 then
txt_quartal
else
if Frequenz = 5 then txt_jahr end
end
end
end
end
end;
c.(Aufgaben := x);
c.(Bearbeiter := ma);
c.(Erledigungsmeldung := txt);
c.(Erledigungsdatum := today());
Hat jemand eine Idee ob das geht und wenn ja, wie.
Danke.
10 Antworten
-
Hallo Stephan,
leider kann man hier gar nicht erkennen ob der Kode richtig oder falsch ist.
vielleicht hielft dier das:---
Datum:=if weekday(Datum)>4
then
date(year(Datum),month(Datum),day(Datum) - weekday(Datum)+7)
else Date
end
---
Leo
-
Hallo Leo,
danke für die rasche Antwort.
Ich habe Deinen Code in den bestehenden Button Code integriert und es funktioniert :-).
Nun frage ich mich, ob ich Feiertage auch integrieren kann, hast Du mir eine Idee wie der Code aussehen könnte.
Ich habe dazu nichts passendes gefunden, was ich übernehmen könnte.
Besten Dank nochmals für die Hillfe.
Gruss Stephan
-
Hallo zusammen,
ich habe eine neue Tabelle für die Feiertage (FeiertagDatum, Wochentag, Name und KW) erstellt, in der ich die Feiertage eintrage. Jetzt möchte ich gerne, dass beim betätigen des Button «Erledigt» in der Wiederholfunktion die Feiertage aus der Feiertagstabelle berücksichtigt werden und analog der Wochenendprüfung auf das nächst mögliche Datum übersprungen wird. Beiliegend einige Screens zur besseren Verständnis meines Anliegens.
-
Hallo Stefan,
der Code kann hier so aussehen:
---
while (weekday(Datum)>4 or cnt(select Feiertage where FeiertagDatum=Datum)>0) do
Datum:=date(year(Datum),month(Datum),day(Datum)+1)
end
---
Dieser Code ersetzt auch die Formel für Wochenenden.
Leo
-
Hallo Leo,
danke für die Mitteilung. Leider bekomme ich mit diesem Code immer eine Fehlermeldung (siehe Anhang) beim Vergleich FeiertagDatum=Datum. Auf was bezieht sich dieses Datum? Wenn ich z. B. das =Datum klein schreibe (=datum) verschwindet zwar die Fehlermeldung. Beim Ausführen des Buttons zählt das Datumsfeld aber laufend hoch und ich muss Ninox schliessen oder den Browser aktualisieren um es zu stoppen. Ich hoffe, Du kannst mir einen Lösungsvorschlag machen. Danke und Gruss Stephan
-
hallo Stephan, Datum bezieht sich auf die Tabelle in welcher du dich gerade befindest. Damit das Datum in der where Klausel auch ansprechbar ist, muss man das Feld vorher als Variable deklarieren. Versuche es so:
let me:=this; while (weekday(me.Datum)>4 or cnt(select Feiertage where FeiertagDatum=me.Datum)>0) do me.Datum:=date(year(me.Datum),month(me.Datum),day(me.Datum)+1) end
Leo
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 10Antworten
- 187Ansichten
-
3
Folge bereits