Domino 9 und frühere Versionen > ND9: Entwicklung
Summe von zwei sich überschneidenden Zeitspannen
theBastian:
Hallo allerseits,
ich möchte die Summe von zwei Zeitspannen in einer Spalte in einer Ansicht anzeigen.
Bisher habe ich im Dokument 4 Datumfelder: Datum1von, Datum1bis, Datum2von, Datum2bis. Die Summe wird bisher im Dokument nicht berechnet, das wollte ich nur in der Spalte tun. Solange die Zeitspannen sich nicht überschneiden ist das ja ganz einfach.
Aber jetzt kann es vorkommen, dass sich die Zeitspannen überschneiden.
Also 01.01.2023-15.01.2023 und 10.01.2023-20.01.2023
Muss ich wirklich mit einer For-Schleife durch die erste Zeitspanne gehen und prüfen, welche Werte in der zweiten Spanne sind oder gibt es vielleicht noch eine elegantere Lösung?
Oder wäre es generell besser, die Summe schon im Dokument beim Speichern zu berechnen und in der Ansicht nur anzuzeigen?
Vielen Dank schonmal.
Sebastian
pantelis.botsas:
Hallo Sebastian,
der einfachste Weg wäre, die Zeitspannen als Date Range zu behandeln und daraus Textlisten zu erstellen. Diese setzt man dann als Gesamtliste zusammen und wendet dann ein @Unique darauf an. Das Ergebnis ist eine Liste aller eindeutigen Datumswerte, welche man mit @Elements dann durchzählen lassen kann.
--- Code: ---_dateRange1 := @TextToTime("[" + @Text(Datum1von) + " - " + @Text(Datum1bis)+ "]");
_dateRange2 := @TextToTime("[" + @Text(Datum2von) + " - " + @Text(Datum2bis)+ "]");
_result := @Elements(@Unique(@Explode(_dateRange1 : _dateRange2)));
--- Ende Code ---
Dokumentation hierzu gibt es hier: https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_EXPLODE.html
Alternativ gibt es noch diese @Formula:
https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_BUSINESSDAYS_FUNCTION.html
Grundsätzlich ist es immer besser, solche aufwändigen Berechungen im Dokument durchzuführen. Dann läuft der Aufbau der Ansicht auch schneller, weil lediglich ein Feldinhalt angezeigt werden muss.
Werner Götz:
Hallo Sebastian,
wie willst Du die "Summe" denn in der Ansichts-Spalte darstellen.
Also im Fall einer Überschneidung sowie im Fall einer Nicht-Überschneidung.
Und wie soll es aussehen, wenn die eine Zeitspanne komplett in die andere Zeitspanne fällt?
-Werner
aoibhneach:
Hallo Sebastian,
ist es so gemeint?:
A1|-----------------|E1
|A2---------------|E2
A1|-------------|E1 .... A2|---------|E2
A1|-------------------|E1
A2|------|E2
Dann würde ich diese Optionen mit @If nachbilden und die jeweiligen Differenzen bilden.
A2 < E1 --> (A2-A1) + (E1-A1) + (E2-E1) --> Überlappen
E1 < A2 --> (E1-A1) + (E2-A1) --> keinerlei Überlappung
A2 < E1 und E2 > E1 --> (E1-A1) --> eine Zeitspanne komplett innerhalb der anderen
und dasselbe für den Fall, dass die zweite Zeitspanne früher beginnt(***) etc. (Man kann ja vorher die von beiden jeweils früher beginnende Zeitspanne dem Index "1" zuordnen, u.s.w.)
Entschuldigung, falls ich hier triviales bringe. Ich würde es so machen und eventuell versuchen, mit etwas Überlegen alles noch eleganter zu komprimieren. Die beiden Fälle der Überschneidung kann man evtl. geschickt zusammenfassen.
Oder?
Viele Grüße
Nils
theBastian:
--- Zitat von: pantelis.botsas am 02.02.23 - 09:18:46 ---Hallo Sebastian,
der einfachste Weg wäre, die Zeitspannen als Date Range zu behandeln und daraus Textlisten zu erstellen. Diese setzt man dann als Gesamtliste zusammen und wendet dann ein @Unique darauf an. Das Ergebnis ist eine Liste aller eindeutigen Datumswerte, welche man mit @Elements dann durchzählen lassen kann.
--- Code: ---_dateRange1 := @TextToTime("[" + @Text(Datum1von) + " - " + @Text(Datum1bis)+ "]");
_dateRange2 := @TextToTime("[" + @Text(Datum2von) + " - " + @Text(Datum2bis)+ "]");
_result := @Elements(@Unique(@Explode(_dateRange1 : _dateRange2)));
--- Ende Code ---
Dokumentation hierzu gibt es hier: https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_EXPLODE.html
Alternativ gibt es noch diese @Formula:
https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_BUSINESSDAYS_FUNCTION.html
Grundsätzlich ist es immer besser, solche aufwändigen Berechungen im Dokument durchzuführen. Dann läuft der Aufbau der Ansicht auch schneller, weil lediglich ein Feldinhalt angezeigt werden muss.
--- Ende Zitat ---
Das sieht mir doch sehr elegant aus und scheint mein Problem zu lösen.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln