Autor Thema: Kategorien nach Monat/Woche in einer Ansicht  (Gelesen 1593 mal)

Offline Karotte

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 627
  • Geschlecht: Männlich
  • Never touch a running SysOp
    • Meine Homepage ;)
Kategorien nach Monat/Woche in einer Ansicht
« am: 13.05.03 - 13:03:39 »
So das für den jeweiligen Monat ist ja:
ShowYear := @Text(@Year(DatumsFeld));
ShowMonth := @Select(@Month(DatumsFeld); "Januar"; "Februar"; "März"; "April"; "Mai"; "Juni"; "Juli"; "August";
"September"; "Oktober"; "November"; "Dezember");
ShowMonth + " " + ShowYear

geht nun der ganze spass auch nach Wochen unterteilt ?!?

sprich: 1 KW, 2 KW etc ?!?
"Quantenmechanisch ist alles eine Frage der Statistik. Auch wenn der Mensch zigmillionenmal derjenige war, der den Rechner ausgeschaltet hat, kann es doch beim zigmillionenersten Fall einmal der Rechner sein, der den Menschen ausschaltet."

-------------------------------------------------------------------
Domino Server: 5.0.10 (W2K)
Domino Cluster: 5.0.11 (W2K)
z.zt. 340 Clients: 5.0.6/5.0.9/5.0.10/5.0.11 (NT/W2K)
-------------------------------------------------------------------
CLS (R5) und MCP (72-210/72-215)

Offline Jörg P.

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 720
  • Ich liebe dieses Forum!
Re:Kategorien nach Monat/Woche in einer Ansicht
« Antwort #1 am: 13.05.03 - 13:12:35 »
Hi,

probier mal das (als Formel in einer Spalte), evt. sind kleine Anpassungen erforderlich:

REM "Replace D with the date of interest.";
D := Eingangsdatum;
FirstOfYear := @Date(@Year(D); 1; 1);
LastOfYear := @Date(@Year(D); 12; 31);
FirstDayNum := @Weekday(FirstOfYear);
LastDayNum := @Weekday(LastOfYear);
REM "ISO weeks start on Monday and ends on Sunday.";
ISOFirstDayNum := @If(FirstDayNum = 1; 7; FirstDayNum - 1);
ISOLastDayNum := @If(LastDayNum = 1; 7; LastDayNum - 1);
REM "The first and last ISO week is the first";
REM "and last ISO week to include Thursday";
IsFirstWeek := 7 - ISOFirstDayNum > 2;
IsLastWeek := 7 - ISOLastDayNum < 4;
REM "The date of the first day of the first ISO week";
ISOFirstDay := @If(IsFirstWeek;
            @Adjust(FirstOfYear; 0; 0; 1 - ISOFirstDayNum; 0; 0; 0);
            @Adjust(FirstOfYear; 0; 0; 8 - ISOFirstDayNum; 0; 0; 0));
REM "The date of the last day of the last ISO week";
ISOLastDay := @If(IsLastWeek;
            @Adjust(LastOfYear; 0; 0; 7 - ISOLastDayNum; 0; 0; 0);
   @Adjust(LastOfYear; 0; 0; -ISOLastDayNum; 0; 0; 0));
REM "Date outside ISOFirstDay and ISOlastDay";
REM "are from the previous or next year";
REM "Return the ISO week number and exit";
FirstWeekNextYear := @If(@Day(D) > @Day(ISOLastDay)
                       & @Year(D) = @Year(ISOLastDay);
            @Return(@Text(@Year(D)+1)+"W01"); NULL);
REM "I suspect this is where Julian dates would be useful";
REM "A recursive call could be used in a real language";
LastYear := (D - @Adjust(FirstOfYear; -1; 0; 0; 0; 0; 0))/60/60/24/7;
LastWeekLastYear := @If(@Day(D) < @Day(ISOFirstDay);
            @Return(@Text(@Year(D) - 1)+"W"+@Text(LastYear)); NULL);
REM "If you get this far, the date falls into an ISO week this year";
REM "Convert the difference in seconds to weeks";
NumWeeks := (D - ISOFirstDay)/60/60/24/7;
REM "Fractions indicate that the date falls";
REM "in the middle of the ISO week";
WeekAdjust := 1 - (NumWeeks - @Integer(NumWeeks));
ISOWeekNum := NumWeeks + WeekAdjust;
REM "Conform to ISO 8601 format";
Pad:=@If(ISOWeekNum<10;"0";"");
@Text(ISOWeekNum)+". KW " +@Text(WochenbeginnE; "D2S0") + " - " + @Text(WochenendeE; "D0S0")

A programming error was found but will not be corrected. It will be a permanent restriction.  ::)

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Kategorien nach Monat/Woche in einer Ansicht
« Antwort #2 am: 13.05.03 - 13:13:26 »
jo..die Berechnung in ein berechnetes Feld des Docs rein, damit das der Ansichtsindexer nicht machen muss:

REM "Welches Feld ist der Datumswert?";
_Datum := Datum;
@If ( _Datum="";""+@Return("");@Success);
REM "Auf welchen Wochentag fällt der 01.01. eines Jahres?";
REM "So = 0, Sa = 6";
NYBias := @Modulo(@Weekday(@Date(@Year(_Datum); 1; 1)) + 6; 7);
REM "Feststellen der vergangenen Tage plus Schaltjahr-Offset";
Days_gone := @Select(@Month(_Datum); 0; 31; 59; 90; 120; 151; 181; 212; 243; 273; 304; 334)
+ @If(
@Modulo(@Year(_Datum); 4) = 0 & @Modulo(@Year(_Datum); 100) != 0 & @Month(_Datum) > 2; 1; 0)
+ @Day(_Datum);
REM "Erste Ermittlung der KW";
Dat_KW := @Integer((Days_gone + @If(NYBias >= 5; NYBias -2; NYBias + 5)) / 7);
REM "Gehören die Tage noch zur letzten KW des vergangenen Jahres?...";
Dat_Year := @Year(_Datum) + @If(Dat_KW = 0; -1; 0);
REM "... dann auch als KW 53 setzen (aber So, den 01.01. als KW 52 berücksichtigen)!";
Dat_KW1 := @If(Dat_KW = 0 & @Weekday(_Datum) != 0; 53 ; Dat_KW);
@If(Dat_KW1 < 10; 0 + Dat_KW1; Dat_KW1)


Oder:
This formula gives the result as
The number of completed weeks as 0 since it lies in the first week of January
2001.
It also gives the day number in the week as 2. Since it is the second day of
the week.
Example 2:
------------
7/25/2001 (This is the given date in mm/dd/yyyy format).
This formula gives the result as
The number of completed weeks as 29 since it lies in the 30th week of 2001.
It also gives the day number in the week as 3. Since it is the third day of
the 30th week.

Code

Year1:=@Year(GivenDate);
stdate:=@TextToTime("1"+"/"+"1"+"/"+@Text(Year1));
diffdates:=(((GivenDate - stdate) / 86400) / 7);

@Prompt([OK];"The number of completed weeks";@Text(@integer(diffdates)));

@prompt([ok];"This is the nth day of the week";@text(@modulo(((GivenDate -
stdate) / 86400);7) + 1))

ODER

Some applications require the computation of the week number in a month in
which a given date falls. For example, Sunday 02 May 1999 is in the second week
while Saturday 01 May 1999 is in the first week.

This formula computes the week number of date value GivenDate:

WeekNumber := @Integer( (@Day(GivenDate) - @WeekDay(GivenDate)+13) /7 )

ODER

REM "First compute week day Mo: 1 till Su: 7, be careful here if your settings are Su: 1 till Sa: 7";
tmpWeekday := 7-@Modulo(8-@Weekday(Datum);7);

REM "Compute Date Offset to Thursday";
tmpOffsetToThursday := tmpWeekday - 4;
REM "the result is a number
between -3 and +3 -> Mo: -3 und Su: +3";
tmpActThursday := @Adjust(Datum; 0; 0; - tmpOffsetToThursday; 0; 0; 0);

REM "Using this offset, compute the date of the corresponding Thursday and the corresponding year -> this gives us the 1.January, to start from, for the computation of the
calendar week";
tmpJan1rstRef := @Date(@Year(tmpActThursday); 1; 1);

REM "Find out the Thursday corresponding to the week of the 1st January computed above.";

tmpOffsetTo1stThu := 7-@Modulo(8-@Weekday(tmpJan1rstRef);7) - 4;
tmp1stThur := @Adjust(tmpJan1rstRef; 0; 0; - tmpOffsetTo1stThu; 0; 0; 0);
REM "If the found Date is in December, then take the date one week after to get the first week of the year.";
@Set("tmp1stThur";
@If(@Month(tmp1stThur)=12;@Adjust(tmp1stThur;0;0;7;0;0;0); tmp1stThur));

REM "Now, we have the Thursday of the week we want to get the number from and the first Thursday of the corresponding year. Just subtract the one from the other and convert from Seconds to days and weeks.";
tmpKW := ((tmpActThursday - tmp1stThur) /(24*3600) / 7) + 1;
tmpKW
________________


REM "And here is the contracted version of the code";
tmpActThursday := @Adjust(Datum; 0; 0; @Modulo(8-@Weekday(Datum);7) - 3; 0; 0; 0);
tmpJan1rstRef := @Date(@Year(tmpActThursday); 1; 1);
tmp1stThur := @Adjust(tmpJan1rstRef; 0; 0;
@Modulo(8-@Weekday(tmpJan1rstRef);7)-3; 0; 0; 0);
tmpKW := (((tmpActThursday - @If(@Month(tmp1stThur)=12;@Adjust(tmp1stThur;0;0;7;0;0;0); tmp1stThur)) /(24*3600) / 7) + 1);
@Text(@Year(tmpJan1rstRef)) + " / "  + @If(tmpKW<10;"0";"") + @Text(tmpKW)


ODER

1) paste the following code (find it at the Code section) into PostOpen of the form
2) do have one field named TSWEEK in the form; field type: text computed; in the value of the field type TSWEEK

That's all!

Note 1: this function calculate the week number of Today(); if you want generalize you have to create a parameter in order to pass the value of the date you want.

Note2: this function consider the week start date as Monday; if you want to consider Sunday, you have to change the row: While lunedi<>2 ' domenica=1, lunedi=2 with the row: While lunedi<>1 ' domenica=1, lunedi=2

Code

If source.editmode=False Then Exit Sub
If Trim(source.fieldgettext("TSWeek"))<>"" Then Exit Sub

Dim inizia As Variant
Dim anno As Variant
Dim giorno As Variant
Dim lunedi As Integer
Dim nweek As Integer

giorno=Today()
anno=Year(giorno)
inizia=Datenumber(anno,1,1)
For y%=1 To 54
' trova il primo lunedi dell'anno e in seguito tutti i lunedi
lunedi=Weekday(inizia)
While lunedi<>2 ' domenica=1, lunedi=2
inizia=inizia+1
lunedi=Weekday(inizia)
Wend

If giorno=inizia Then
nweek=y%
If nweek=0 Then nweek=53
Exit For
Elseif giorno nweek=y%-1
If nweek=0 Then nweek=53
Exit For
Else
inizia=inizia+1
End If
Next

Call source.fieldsettext("TSWeek",Str(nweek))

Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Karotte

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 627
  • Geschlecht: Männlich
  • Never touch a running SysOp
    • Meine Homepage ;)
Re:Kategorien nach Monat/Woche in einer Ansicht
« Antwort #3 am: 16.05.03 - 14:26:47 »
Also das funktioniert erstmal (jedenfalls als ich das zum erstenmal im Designer angeschaut habe, in der DB selber aber nicht :( )

nicht mit dem berechneten feld und auch nicht
als formel in der ansichtenauswahl :(

"Quantenmechanisch ist alles eine Frage der Statistik. Auch wenn der Mensch zigmillionenmal derjenige war, der den Rechner ausgeschaltet hat, kann es doch beim zigmillionenersten Fall einmal der Rechner sein, der den Menschen ausschaltet."

-------------------------------------------------------------------
Domino Server: 5.0.10 (W2K)
Domino Cluster: 5.0.11 (W2K)
z.zt. 340 Clients: 5.0.6/5.0.9/5.0.10/5.0.11 (NT/W2K)
-------------------------------------------------------------------
CLS (R5) und MCP (72-210/72-215)

Offline Karotte

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 627
  • Geschlecht: Männlich
  • Never touch a running SysOp
    • Meine Homepage ;)
Re:Kategorien nach Monat/Woche in einer Ansicht
« Antwort #4 am: 16.05.03 - 14:32:08 »
kruzi'fix jetzt gehts...&%$?)(&% Designer

einfach noch mal die Ansicht komplett neu gelöscht und nochmal neu mit Werten gefüttert.

THX @all
"Quantenmechanisch ist alles eine Frage der Statistik. Auch wenn der Mensch zigmillionenmal derjenige war, der den Rechner ausgeschaltet hat, kann es doch beim zigmillionenersten Fall einmal der Rechner sein, der den Menschen ausschaltet."

-------------------------------------------------------------------
Domino Server: 5.0.10 (W2K)
Domino Cluster: 5.0.11 (W2K)
z.zt. 340 Clients: 5.0.6/5.0.9/5.0.10/5.0.11 (NT/W2K)
-------------------------------------------------------------------
CLS (R5) und MCP (72-210/72-215)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz