Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: my head am 08.04.04 - 06:49:58
-
hallo.
mit folgendem code lasse ich dokumente in einer kalenderansicht anzeigen. hat jmd ne idee, wo ich im code sams- und sonntage rausfiltern könnte?? sprich keine einträge am wochenende... ist das mit @weekdays irgenwie möglich?? wenn ja, wo??
REM "abwStart -> beginn des zeitraumes, abwEnd -> Ende des Zeitraumes";
_tBegin := "00:00:01";
_tEnd := "00:00:01";
_sDate:=@TextToTime(@Text(abwStart) + " " + @Text(_tBegin));
_eDate := @If(@Trim(@Text(abwEnd)) = "";@TextToTime(@Text(@Now)); @TextToTime(@Text(abwEnd) + " " + @Text(_tEnd)));
_List := @Explode(@TextToTime(@Text(_sDate) + "-" + @Text(_eDate)));
_tmp1:=@Implode(_List;";");
_tmp2:=@ReplaceSubstring(@Text(_tmp1);";";" 00:00:01;")+" 00:00:01";
_tmp3:=@ReplaceSubstring(@Text(_tmp2);@Text(abwStart);@Text(abwStart) + " " + @Text(_tBegin));
_tmp4:=@Explode(_tmp3;";");
@TextToTime(@Text(_tmp4))
danke schonmal...
-
... mit @weekday kannst du herausfinden, ob's wochenende ist...
-
ist mir schon klar...
aber ich steh im moment so auf der leitung, dass ich nicht weiß, wo im code ich das einbinden kann bzw. ob's überhaupt funktioniert...
-
... ich würds ja mal in der "select"-anweisung probieren.
-
aber select ist doch zu früh... der code oben ist die formel der spalte und da drösel ich erst aus zeiträumen die einzelnen tage heraus... also müsste ich das ja in diesem teil machen...
-
Das ist schon wahr - es müsste in der Spaltenformel passieren (by the way - mir erscheint die etwas unnötig aufgebläht).
Aber: In der Ansicht ist nur Formelsprache erlaubt. Die kennt aber keine Schleifen und Prozeduren - und die bräuchtest Du, um aus einem unbekannten Zeitraum (sprich: Einer Liste mit n Elementen) alle Elemente, die auf einen Wochenendtag fallen, herauszufiltern.
Du kannst das nur lösen, wenn Du bereits in Deinen Dokumenten diese Liste bildest (mit LS), ähnlich, wie dies ja auch in Kalenderdokumenten passiert.
Frage nebenbei: Irgendwie geht es ja wohl um Abwesentheitszeiträume. Da da Wochenende ausgeblendet werden, ist ja okay - aber was ist mit Feiertagen ?
HTH,
Bernhard
-
die formel ist unnötig aufgebläht... hab ich inzwischen auch bemerkt...
das mit den feiertagen ist natürlich eine ganz ungute sache... da hast du recht...
-
BUMM ! Da war er, den Du überhört hast ;-)
In den Dokumenten stehen keine einzelnen Tage, sondern ein Start- und ein Enddatum. Und damit hat sich das SELECT erledigt - im range könnte ein Wochenende sein, muss aber nicht oder vielleicht auch zwei oder drei oder wer weiss ...
Und mit sowas kommt keine Ansicht mehr klar, sowas muss schon auf Dokumentebene erstellt werden.
Bernhard
-
yep,
hab's gehört, war aber etwas schneller. ist halt kurz vor ostern und ich bin urlaubsreif :P :P :P
-
Hier eine Formel. die alle Samstage und Sonntage aus dem Range löscht. Diese kann in der Spalte verwendet werden:
REM "abwStart -> beginn des zeitraumes, abwEnd -> Ende des Zeitraumes";
_tBegin := "00:00:01";
_tEnd := "00:00:01";
_sDate:=@TextToTime(@Text(abwStart) + " " + @Text(_tBegin));
_eDate := @If(@Trim(@Text(abwEnd)) = "";@TextToTime(@Text(@Now)); @TextToTime(@Text(abwEnd) + " " + @Text(_tEnd)));
_List := @Explode(@TextToTime(@Text(_sDate) + "-" + @Text(_eDate)));
_tmp1:=@Implode(_List;";");
_tmp2:=@ReplaceSubstring(@Text(_tmp1);";";" 00:00:01;")+" 00:00:01";
_tmp3:=@ReplaceSubstring(@Text(_tmp2);@Text(abwStart);@Text(abwStart) + " " + @Text(_tBegin));
_tmp4:=@Explode(_tmp3;";");
_tmp5 := @TextToTime(@Text(_tmp4));
_tmp6 := @Weekday(_tmp5);
_tmp7 := (@Text(_tmp6) + "#") + @Text(_tmp5;"D0S0");
_Liste := @Right(_tmp7;"#");
_Liste_Sa := @Trim(@Right(_tmp7;"7#"));
_Liste_So := @Trim(@Right(_tmp7;"1#"));
_FilterListeSa := @Trim(@Replace(_Liste;_Liste_Sa;""));
_FilterListeSo := @Trim(@Replace(_FilterListeSa;_Liste_So;""));
@TextToTime(_FilterListeSo)
Um nur Dokumente zu selektieren, in denen Wochentage vorkommen, so:
REM "abwStart -> beginn des zeitraumes, abwEnd -> Ende des Zeitraumes";
_tBegin := "00:00:01";
_tEnd := "00:00:01";
_sDate:=@TextToTime(@Text(abwStart) + " " + @Text(_tBegin));
_eDate := @If(@Trim(@Text(abwEnd)) = "";@TextToTime(@Text(@Now)); @TextToTime(@Text(abwEnd) + " " + @Text(_tEnd)));
_List := @Explode(@TextToTime(@Text(_sDate) + "-" + @Text(_eDate)));
_tmp1:=@Implode(_List;";");
_tmp2:=@ReplaceSubstring(@Text(_tmp1);";";" 00:00:01;")+" 00:00:01";
_tmp3:=@ReplaceSubstring(@Text(_tmp2);@Text(abwStart);@Text(abwStart) + " " + @Text(_tBegin));
_tmp4:=@Explode(_tmp3;";");
_tmp5 := @TextToTime(@Text(_tmp4));
_tmp6 := @Weekday(_tmp5);
_tmp7 := (@Text(_tmp6) + "#") + @Text(_tmp5;"D0S0");
_Liste := @Right(_tmp7;"#");
_Liste_Sa := @Trim(@Right(_tmp7;"7#"));
_Liste_So := @Trim(@Right(_tmp7;"1#"));
_FilterListeSa := @Trim(@Replace(_Liste;_Liste_Sa;""));
_FilterListeSo := @Trim(@Replace(_FilterListeSa;_Liste_So;""));
SELECT _FilterListeSo != ""
Andreas
-
... hut ab.... :D
-
Das sieht schlimmer aus als es ist. Ich habe einfach den bestehenden Code weiterentwickelt. Das ganze wäre sicher auch noch zu optimieren, aber es kam mir in erster Linie auf das Prinzip an.
Es gibt zwar in der Formelsprache keine Schleifen (erst ab R6), aber man kann sich oft behelfen, in dem man herumtrickst. Wenn man bestimmte Elemente aus einer Liste löschen will, nimmt man
@Trim(@Replace(Liste;ZuLoeschendeListe;""))
Hier hat uns geholfen, dass @Weekday auch auf eine Datumsliste angewendet werden kann. Das @Right kann man auch auf eine Liste loslassen. Wichtig ist dann halt, das @Right den Trenner findet - hier "#".
Andreas
-
Jo, sowas habe ich auch in der Pfanne zu liegen. Aber so richtig nützt es eben nix, weil es neben den Wochenenden auch noch Feiertage gibt. Und wenn man die nicht berücksichtigt, dann ist ALLES für die Katz.
Andreas' Formel sollte man sich aber unbedingt aufheben für all die (genügend) Fälle, in denen es nur auf die Wochenenden ankommt !
Bernhard
PS: Unterschätzt die Feiertage nicht ... Ostern etc. kann man berechnen, aber ob "Holy King Kong" (Heilige Drei Könige) nun im Bundesland des aktuellen Anwenders gilt usw. - das ist wirklich ein weites Feld. Wenn dann auch noch Österreicher, Schweizer (die haben ganz "gemeine" Feiertagskalender !), Belgier, Australier etc. dazukommen ... @functions kann man da von vornherein vergessen.
Was ich damit sagen will: Ostern ist vom 09. bis 12.04.2004. Alles freie Tage. Wenn man jetzt nur das Wochenende herausrechnet, bleiben nur der 10. und der 11.04.2004 übrig ...
Ah ja - und der 15.08.2004 (Mariä Himmelfahrt) ist ein Feiertag. Gilt aber nur (in Deutschland) in Bayern und Saarland. Muss man ja erstmal berücksichtigen. Dass es dieses Jahr aber auf einen Sonntag fällt - einerseits Dumm-Ding für die Bayern und Saarländer (und Österreicher), andererseits muss die Bedingung "Feiertag = Sonntag" auch erstmal herausgerechnet werden ;-)
-
Sorry, Bernhard, Ostern ist nicht wirklich berechenbar. Das geht in einzelnen kurzen Abschnitten, aber nicht, wenns dann historische Dimensionen annimmt. Fast alles andere ist tatsächlich berechenbar, abgesehen von den gesetzlichen Bestimmungen. Hier hat Murphy zugeschlagen: Du hast wirklich die Ausnahme, die die Regel bestätigt erwischt ........ :(
-
Wer das braucht:
Es gibt im www Scripts für Excel (also leicht in Lotus Script übernehmbar) für Fälle dieser Art.
Selbst bundeslandweite Unterschiede werden da betrachtet.
Habe jetzt leider den Link nicht parat, aber sollte über google zu finden sein.
Ich denke, wenn man sich EINMAL richtig damit beschäftigt, und alles berücksichtigt (inkl. dass man offen ist für Änderung seitens Bundesregierung, die z.B. Weihnachten auf den 9. März verlegt), dann hat man alles abgedeckt.
Ich bin mir sicher, viele Dienstleister haben jeweils schon solche Lösungen, frei verfügbar ist mir sowas noch nicht untergekommen (was aber auch nicht tragisch ist).
Matthias
-
Ostern ist nicht wirklich berechenbar.
Jens, sicher?
Ich bin fest der Meinung, Ostern IST fest berechenbar. Es gibt eine Formel, und die ist fix.
Warum ist das nicht so?
Matthias
-
Sicher, wir reden aber über Dimensionen, die über Jahrhunderte geht. Wie weit da Kalenderumdefinitionen mit reinspielen, weiss ich nicht auswendig, es ist auch schon lange her, dass ich das mal in einer Geschichtsvorlesung gehört habe. Ostern ist DAS Datum, das immer von Hand verifiziert werden muss. Pfingsten ist dann 50 antike Tage später (bei uns sind das 49 Tage) usw. Wenn Du Berechnungsformeln, die an der Frühlings-Tag-und-Nacht-Gleiche angehängt sind, findest, gilt das strengenommen nur für unseren Lebensabschnitt und ein wenig drüber hinaus, die Sache ist komplizierter, aber ich hab im Moment leider auch keinen Zugriff auf eine präzise Definition (spielt ja hier nicht wirklich eine Rolle, war nur der Vollständigkeit halber erwähnt, für die Historiker ist das eminent wichtig, weil zum Bleistift Datumsangaben in Mittelalter häufig als "zwei Wochen vor Ostern", "an Mariä Himmelfahr" und ähnlich angegeben werden, deshalb ist das überhaupt ein so riesiges Problem, meistens geben die Autoren ja dann auch nicht an, ob das "alter" oder "neuer" Kalender ist und so, das Thema ist extrem schwierig)
-
@Jens:
Mit "Notes in the wild" brauchen wir keine historischen Dimensionen abzudecken ... Was vor Gregor war - Schwamm drüber !
Wegen OSterfest und ähnlich gearteten Festivitäten: Das funktioniert mit irgendwelchen Formeln sofort nicht mehr, wenn zum Bleistift rumänische oder russische User involviert sind. Hier braucht es eine ganz andere Lösung.
@TMC: Diese wirklich weite Liste von Angeboten in allen möglichen Programmiersprachen kannst Du simpelst vergessen. Du musst ja zunächst wissen, welche Feiertagsregelung für den gerade aktiven User besteht. Und das hard-coden ... Herrjeh ...
Das geht viel simpler. Aber das ist nun mal wirklich ein Betriebsgeheimnis ;-)
Bernhard
-
Danke für die Infos.
Ich denke man kann sich also im Notes-Umfeld blind auf die Oster-Formel verlassen (weil man ja i.d.R. Business betrachtet und z.B. die Zeit vor Christi Geburt i.d.R. nicht relevant ist für Meeting-Termine :-).
Ist also mehr für Historiker und dergleichen relevant.
Trotzdem danke für die Hinweise.
Matthias
-
Bernhard, auch dafür gibt es Excel-Lösungen im www (man glaubt es kaum). Es existieren PLZ-Lösungen z.B.
Egal, ich denke das führt jetzt auch zu weit und ist zu individuell.
Matthias
-
Auch der Vollständigkeit halber noch ein Nachtrag zu Pfingsten: das Wort leitet sich von griechisch pentekonta, das Zahlwort für 50, ab, daher die "antiken 50 Tage nach Ostern" ...
-
Zu indivuell ? Das glaube ich kaum. Das ist ein dauerhaftes Problem, auf das viel zu viele Leute eine Lösung zu kennen glauben und dann meist an der Praxis scheitern. Daher halte ich das für einen wichtigen Hinweis.
Lösungen aus VBA, VB oder Konsorten: Ich muss ja erstmal wissen, welche Regel gilt. VBA etc. machen dann entweder hard-coding oder verwenden eigene Methoden, um vom User auf die Region zu schliessen, die für seine Region gilt.
PLZ-Lösungen: Das halte ich für einen ziemlichen Dummfug, da
- wenn ich weiss, wer der User ist, muss ich ja auch eine andere Quelle finden können, um herauszubekommen, welche lokale Regelung gilt.
- Die PLZ sind teilweise so fein gestreut über die Grenzregionen der Bundesländer, dass der Ansatz Grausen bereitet.
- Im "Ausland" funktioniert das dann gar nicht mehr.
Vielleicht können wir uns ja koWo in Metzingen beim "Best Practices"-Treffen ja mal anschauen, was die wirklichen Konsequenzen sind. Und wie das gelöst werden kann ;-)
Bernhard
-
Oder so Bernhard.
Eine globale Lösung gibt es eh nicht.
Wenn wir nur für Deutschland sprechen: nichts einfacher als das.
Wie man dies umsetzt: zig Möglichkeiten.
Kommt immer auf die App an, auf die Ausgangssituation etc.
Mein Fazit: ist immer relativ einfach lösbar, wenn man etwas Gehirnschmalz investiert.
Aber kommt eben auf die App an. Wenn Du nur Namen + PLZ hast, dann macht eine PLZ - Lösung natürlich Sinn.
Aber das denke ich führt jetzt zu weit.....
Matthias
-
Eine globale hard-coded solution: Völlig unmöglich. Das hard-coded Zeugs funktioniert sowieso nur innerhalb einer Region, die gleiche Feiertage hat.
Was mich heute so zum posten angespornt hat, ist die Forderung einer Firma, die weltweit (wirklich weltweit, im ersten Schritt sind nur "The Americas" ausgenommen) Feiertage berücksichtigen muss. Meine Lösung kann das. Und darauf bin ich wirklich sehr stolz. Da ist eben nix hardcoded, sondern die benötigten Regeln werden für alle betreffenden Regionen erfasst, die User werden (gruppenweise) den Regionen zugeordnet, und dann passt das ...
Ich freue mich schon auf Metzingen, da können wir das dann mal im Detail anschauen ;-)
Bernhard