Resttage Anzeige auch mit Formelfeld
Hallo zusammen
Ich würde gerne das Formelfeld nutzen, welches die Restlaufzeit basierend auf einem Datum ebenfalls in einem Formelfeld berechnet. Die entsprechende Formel dafür ist unten aufgeführt.
Code für Restlaufzeit:
if today() = 'Fällig' then
styled(text("Abgabe Heute!"), "orange", "black", "")
else
if today() >= 'Fällig' + 1 then
styled(text('Fällig' - today()), "red", "black", "")
else
if today() + 7 > 'Fällig' then
styled(text('Fällig' - today()), "yellow", "black", "")
else
if not 'Fällig' then
styled(text("???"), "", "black", "")
else
styled(text('Fällig' - today()), "green", "white", "")
end
end
end
end
Code für Datumsberechnung:
if Wartung = 1 then
let LetzteWartung := last(Wartungsregister.' Ausgeführt');
let 'EinJahrSpäter' := date(year(LetzteWartung) + number(text('Int./Jahr')), month(LetzteWartung), day(LetzteWartung));
styled(format('EinJahrSpäter', "DD.MM.YYYY"), if today() > 'EinJahrSpäter' then
"red"
else
if 'EinJahrSpäter' < 60 then "Orange" else "Green" end
end)
end
Wenn ich die Berechnung mit einem Datumsfeld durchführe, funktioniert es einwandfrei. Allerdings, wenn ich stattdessen das Formelfeld mit dem berechneten Datum verwende, funktioniert es nicht mehr. Trotz meiner Versuche, den Code anzupassen, konnte ich das Problem nicht lösen.
Um mein Problem besser zu veranschaulichen, habe ich den unten angezeigten Printscreen mit der Feldbezeichnung erstellt. Ich kann die Restlaufzeit erfolgreich mit einem Datumsfeld berechnen, jedoch nicht mit einem Formelfeld.
Danke für eure Unterstützung.
28 Antworten
-
Das Berechnungsfeld gibt dir meines Wissens Text zurück und kein Datum.
Dem entsprechend kann man es nicht so einfach als Datum weiter verwenden.
Du musst aus dem Text erst wieder ein Datum bauen in dem du es in Jahr, Monat, Tag zerlegst und wieder als Datum mit date() zusammen baust. -
Hallo Stephan, einen per styled() formatierten Datums-String könnte man z. B. so wieder in einen "echten" Datumswert umwandeln, mit dem sich dann auch wieder Berechnungen vornehmen ließen:
let myD := number(item(split(text(STYLEDFELD), "."), 0)); let myM := number(item(split(text(STYLEDFELD), "."), 1)); let myJ := number(item(split(text(STYLEDFELD), "."), 2)); date(myJ, myM, myD)
Eine generelle Alternative wäre, das Berechnungsfeld unformatiert als 'Datum' zu belassen und die styled()-Formatierung dann erst in einem weiteren Berechnungsfeld vorzunehmen, welches einfach nur auf das mit dem Datum verweist. Dann hat man ein Feld mehr, spart sich aber das Konvertieren.
-
Nun bin ich bereits wieder am Rudern!
Jetzt habe ich soweit alles vorbereitet und es scheint zu funktionieren, bis ich bemerkt habe, dass bei einer Ansicht einer Bedingung komplett anderes ist als bei den anderen.
Die Resttage werden richtig dargestellt:
Auch hier bei Resttage unter 60 Tage ist auch noch alles in Ordnung:
Resttage unterschritten, auch noch alles in Ordnung:
Aber jetzt kommt's! Resttage noch weit voraus: Was ist das für ein Zahl hinter den Tagen???
Ich gehe davon aus, dass es sich um eine Stunde handelt aber ich kann mir beim besten Willen nicht erklären, wie diese hier plötzlich auftaucht. Einen Hinweis kann ich geben, es betrifft jede Zahl die über Hundert Tage geht, mit einer Ausnahme (siehe Screen unten)
Aktuelle versuchte ich es mit diesen Formeln:
Datumsermittlung:
if Wartung = 1 and Status = 1 or Wartung = 1 and Status = 2 then let LetzteWartung := last(Wartungsregister.' Ausgeführt'); let 'EinJahrSpäter' := date(year(LetzteWartung) + number(text('Int./Jahr')), month(LetzteWartung), day(LetzteWartung)); styled(format('EinJahrSpäter', "DD.MM.YYYY"), if today() > 'EinJahrSpäter' then "red" else "Green" end); let myD := number(item(split(text('EinJahrSpäter'), "."), 0)); let myM := number(item(split(text('EinJahrSpäter'), "."), 1)); let myJ := number(item(split(text('EinJahrSpäter'), "."), 2)); date(myJ, myM, myD) end
Restzeit/Tage
if Wartung = 1 and Status = 1 or Wartung = 1 and Status = 2 then if today() = 'Fälligkeitsdatum' then styled(text("Abgabe Heute!"), "orange", "black", "") else if today() >= 'Fälligkeitsdatum' + 1 then styled(text('Fälligkeitsdatum' - today()), "red", "black", "") else if today() + 30 > 'Fälligkeitsdatum' then styled(text('Fälligkeitsdatum' - today()), "yellow", "black", "") else if not 'Fälligkeitsdatum' then styled(text("???"), "", "black", "") else styled(text('Fälligkeitsdatum' - today()), "green", "white", "") end end end end end
Ich hoffe jemand kennst das oder was ähnliches und kann mir einen guten Ratschlag geben.
-
Hi Stephan. Das kommt wahrscheinlich von der Umrechnung des Datumsformats in number(). Dabei wird nun auch die zukünftige Stunde bei der Winterzeitumstellung eingerechnet. Versuche mal folgendes im Script für die Restzeit/Tage. Mirko
if Wartung = 1 and Status = 1 or Wartung = 1 and Status = 2 then let LetzteWartung := last(Wartungsregister.' Ausgeführt'); let oneyearlater := date(year(LetzteWartung) + number(text('Int./Jahr')), month(LetzteWartung), day(LetzteWartung)); if today() = oneyearlater then styled(text("Abgabe Heute!"), "orange", "black", "") else if today() >= oneyearlater + 1 then styled(text(oneyearlater - today()), "red", "black", "") else if today() + 30 > oneyearlater then styled(text(oneyearlater - today()), "yellow", "black", "") else if not oneyearlater then styled(text("???"), "", "black", "") else styled(text(oneyearlater - today()), "green", "white", "") end end end end end
Content aside
- Status Answered
-
2
„Gefällt mir“ Klicks
- vor 1 JahrZuletzt aktiv
- 28Antworten
- 231Ansichten
-
5
Folge bereits