PDA

Vollständige Version anzeigen : kw problem beim jahreswechsel


Jahush
17.01.2008, 16:40
hallo, ihc habe ein problem bei kostenaufstellungen die nach kalenderwochen aufgeteilt sind. speziel taucht deses problem beim jahresende auf. wie zb der wechsel von 07 auf 08.
ich habe eine tabelle die ich nach jahr, monat und kw sortiere. jedoch is der letzte eintrag dann 2007, 12, 1
weil der 31.12 nunmal die neue kw ist. meine sortierung sieht dann so aus:
47 48 1 48 49 50 51 52 1 2 usw
kw 48 ist 2 mal in der auflistung weil diese kalenderwoch enunmal aufgeteilt ist unter dem november und dezember. das wäre noch egal wenn es das einzigste wäre. aber gravierend falsch wird ja alles durch die felsche position der 1. wie kann ich das beheben und richtig machen? die werte des datensatzes dieser 1 betreffend sind ja leider jahr 07, mnat 12 und kw1 was eine einfache sortierung nicht möglich macht.

gpswanderer
17.01.2008, 16:53
Hallo,
das ist ein Bug in Access, das in bestimmten Jahreswechseln die KW nicht richtig berechnet. So auch 2007-2008. Zur Bestimmung der KW muss eine eigene Funktion verwendet werden da im europäischen Raum die KW nach DIN berechnet werden. Access rechnet nach der US Version.
Die KW1 2008 beginnt bereits 2007 (am 31.12.2007).

Kopiere nachfolgenden Code in eine allgemeines Modul:
Function DINKW(Dat As Date) As Variant
Dim a As Integer, J As Integer
J = Year(Dat)
a = Int((Dat - DateSerial(Year(Dat), 1, 1) + _
((Weekday(DateSerial(Year(Dat), 1, 1)) + 1) Mod 7) - 3) / 7) + 1
If a = 0 Then
a = DINKW(DateSerial(Year(Dat) - 1, 12, 31))
ElseIf a = 53 And (Weekday(DateSerial(Year(Dat), 12, 31)) - 1) Mod 7 <= 3 Then
a = 1: J = J + 1
End If
DINKW = Format(a, "00") & "/" & J
End Function

Aufruf dann so:

DINKW(Datumsfeld)

Rückgabe im Format: 01/2008

qo7300
12.01.2010, 14:12
Am einfachsten geht es mit diesem Code:

Function WOY (MyDate As Date) As Integer ' Week Of Year
WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If WOY > 52 Then
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1
End If
End Function

Quelle: http://support.microsoft.com/?kbid=200299

Gruß Uli