Records met begin- en einddatum filteren naar één week.

Status
Niet open voor verdere reacties.

nicolassoenens

Gebruiker
Lid geworden
9 okt 2011
Berichten
61
Hallo;

Ik zit met een tabel met opdrachten die een begin- en einddatum hebben.

Ik heb al een query die mij de opdrachten heeft die vandaag aan de gang zijn maar ik had graag nog een manier gevonden om te weten welke opdrachten deze week of volgende week aan de gan zijn.

Ik weet in welke week/jaar een bepaalde datum zich bevind met:

Week Begin: DatePart("ww";[Datum begin]) & "/" & DatePart("yyyy";[Datum begin])
en idem voor "Week einde"

Maar daarmee kan ik geen filter maken.

Hebben jullie een oplossing?

Alvast bedankt en veel sterkte met het verlies van jullie vriend!!
 
Ik heb daar een aantal functies voor gemaakt.

Code:
Function BeginVorigeWeek()
    BeginVorigeWeek = Date - WeekDay(Date, vbMonday) - 6
End Function

Code:
Function EindVorigeWeek()
    EindVorigeWeek = Date - WeekDay(Date, vbMonday) - 2
End Function

Code:
Function BeginDezeWeek()
    BeginDezeWeek = Date - WeekDay(Date, vbMonday) + 1
End Function

Code:
Function EindDezeWeek()
    EindDezeWeek = Date - WeekDay(Date, vbMonday) + 5
End Function

Code:
Function BeginVolgendeWeek()
BeginVolgendeWeek = Date + (8 - WeekDay(Date, vbMonday))
End Function

Code:
Function EindVolgendeWeek()
    EindVolgendeWeek = Date + (12 - WeekDay(Date, vbMonday))
End Function

Die kun je in een willekeurige module zetten, en in queries gebruiken. Je krijgt dan een criterium als:

Code:
[Startdatum] Between BeginVolgendeWeek() And EindVolgendeWeek()
 
Laatst bewerkt:
Bedankt,

Sorry voor mijn laat antwoord.

Ik dacht nu van het misschien anders te doen.

Ik heb de verschillende velden voor de uit te voeren opdrachten

[Jaar begin]
[Week begin]
[Week nu]

Ik zou willen weten welke opdrachten nu bezig zijn.
In de query heb ik het volgende ingegeven:

bij [Jaar begin] : <=Year (Now)

En nu de vraag!

in de criteria van [Week begin] zou ik het volgende willen vragen:

Als [Jaar begin] = Year (Now) dan moet [Week begin] <= [ Week nu]

Hoe schrijf ik die "Als" en "Dan"? is dit mogelijk?
 
Ik snap nu niet helemaal wat je hebt veranderd; ik hoop toch echt dat je geen aparte velden hebt gemaakt voor [Jaar begin], [Week begin] en [Week nu], maar dat je dat via een query uitrekent?
 
Ja, natuurlijk
Jaar begin: DatePart("yyyy";[Datum begin])
Week Begin: DatePart("ww";[Datum begin])
Week nu: DatePart("ww";Now())

Voor de werken van deze week wil ik dus:
enkel de werken die jonger of gelijk zijn aan [Jaar begin] dus: <=year (Now)
en ik wil enken de werken van het huidig jaar waarvan de weken jonger of gelijk zijn aan [Week nu], en dat is mijn vraagstuk waar ik geen antwoord op heb.
 
Je weeknummer is zo'n beetje de slechtste manier om een weeknummer te genereren, want die lever nogal vaak een verkeerd weeknummer op. Lijkt mij niet de bedoeling :) Gebruik deze functie om een correct weeknummer te berekenen:

Code:
Public Function IsoWeekNummer(d1 As Date) As Integer
' Attributed to Daniel Maher
Dim d2 As Long

    d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
    IsoWeekNummer = Int((d1 - d2 + Weekday(d2) + 5) / 7)
End Function

En nog een die het weeknummer van vandaag berekent:
Code:
Public Function IsoWeekNu() As Integer
' Attributed to Daniel Maher
Dim d1 As Date
Dim d2 As Long

    d1=Date()
    d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
    IsoWeekNu = Int((d1 - d2 + Weekday(d2) + 5) / 7)
End Function

Je query wordt dan: Week nu: IsoWeekNu()
Ook [Jaar begin] kan simpeler: Jaar begin: Year([Datum begin])

Als je een criterium maakt als: Year([Datum begin]) <= Year(Date()) krijg je ook de opdrachten van vorig jaar. Hetzelfde geld voor de weeknummers. Lijkt mij niet de bedoeling...

Hou het simpel:
Veld: Jaar begin: Year([Datum begin])
Criterium: =Year(Date())
Veld: Week begin: IsoWeekNummer([Datum begin])
Criterium: <=IsoWeekNu()

Er vanuit gaande dat je alle opdrachten van het huidige jaar wilt zien. Overigens (voordat iemand anders daarover valt :) ) heb je het weeknummer zo ook helemaal niet nodig:

Veld: [Datum begin]
Criterium: Between DateSerial(Year(Date());1;1) And Date()
Laat alle opdrachten zien tussen vandaag en 1 januari van het huidige jaar.
 
Eigenlijk is het wel de bedoeling van de opdrachten van vorig jaar te hebben.
Het gaat eigenlijk over wegenwerken die momenteel bezig zijn. Alle werken die vorig jaar begonnen zijn moeten dus ook nog zichtbaar blijven.
Van alle opdrachten heb ik dus ook einddata die dus ook pas volgend jaar kunnen eindigen.
Ook die moet ik kunnen zien.

De bedoeling is rapporten kunnen geven van de werken die vandaag, deze week en volgende week aan de gang zullen zijn.
Voor volgende week had ik dus (Week nu) +1.

Ben nu thuis zonder access. kan morgen verder uitproberen.

Alvast bedankt voor de uitleg.
 
Ik snap niet meer wat je wilt: eerst heb je het over opdrachten van het huidige jaar, en nu weer over die van vorig jaar. Straks ga je vertellen dat je zowel huidig als vorig jaar wilt zien? Kan natuurlijk allemaal wel, door te het veld [Datum begin] te filteren op Year(Date()) OR Year(Date()) als criterium. Maar ik raak langzamerhand de lust tot gokken kwijt; misschien kun je beter een voorbeeldje maken?
 
Ik bedoel, de wegenwerken die een begindatum in vb. 2011 hadden maar een einddatum later dan nu, moeten natuurlijk ook nog zichtbaar zijn.

Alle werken hebben een Begindatum en een einddatum.
Van die twee data heb ik van elk het jaar en de weeknummer uitgefilterd om te weten welke werken nu, op dit jaar en deze week, aan de gang zijn.

Ik wil wel mijn programma even doorsturen maar weet niet hoe ik die moet toevoegen.
 
Niet om het een of het ander, maar hoe kun je een einddatum invullen die in de toekomst ligt? Mij lijkt het dat een project dat is gestart, maar nog geen einddatum heeft, nog lopend is; heb je wèl een einddatum ingevuld, dan is het project afgelopen. Je kunt actieve projecten dus heel simpel filteren op het al of niet leeg zijn van de einddatum. Als je de fout maakt om een geprojecteerde einddatum als einddatum te beschouwen, dan zou ik die snel herstellen en gaan werken met de velden [Geplande Einddatum] en [Gerealiseerde Einddatum]. En die laatste vul je dus pas in als je het project klaar is. En die vormt daarmee automatisch het filter op lopende projecten. bovendien kun je dan ook heel makkelijk eventuele tijdsoverschrijdingen meten.
 
Ik werk bij de brandweer.
De aannemers geven ons begin- en einddata van wegenwerken die dus in de meeste gevallen wel degelijk een einddatum moeten hebben (het zou anders mooi zijn :-)), van kranen op de rijweg die de weg versperren...
of de politie geeft ons data van evenementen of verhuizingen waarbij de weg versperd wordt.
Wij maken van die verkeershinder wegomleidingen op PDF's die we dan doorsturen naar de verschillende lokale overheden.
Momenteel wordt dat allemaal met excel gedaan. De PDF's worden allemaal in aparte mapjes gestoken per week.
Een mooi access bestand zou ons werk deftig vergemakkelijken

Ik heb dus een tabel met:
WegenwerkenID,Wegenwerkennummer, Begindatum, Einddatum, Straat, Stad, Probleem, Bijlage (om PDF aan te koppelen)

Elke dag wordt een rapport bijgehouden van de werken die vandaag aan de gang zijn. (die heb ik)
Bepaalde diensten hebben de lijst van deze week nodig.
Bepaalde diensten hebben de lijst van volgende week nodig.

Het is ook zo dat ik van de straten in de omliggende steden een wegbeschrijving heb van de kazerne naar elke straat (als gps uitvalt of niet wilt werken)
op die wegbeschrijving komt het nummer van de wegenwerken automatisch naast de naam van die éné straat als er die dag iets van werken zijn. (die heb ik ook al).

Zo zit het dus

;-)

Nicolas
 
Dan zou je nog steeds voor de einddatum twee velden moeten gebruiken, vind ik: [Geplande Einddatum] (Die komt van de aannemer) en [Gerealiseerde Einddatum] ( die vul je zelf in als je het record afrondt). Maar dat maakt verder niet zoveel uit.
Een query om de lopende projecten van deze week te filteren doe je op basis van het veld [Begindatum]. Met de functies die ik eerder heb gegeven kun je een criterium maken. Dat luidt dan:
Veld: [Begindatum]
Criteria: Betweeen BeginDezeWeek() And EindDezeWeek()
Veld: [Einddatum]
Criteria: >Date()

Of, als je een extra veld hebt voor Gerealiseerde einddatum:
Veld: [Einddatum]
Criteria: Is Null

Voor werken die volgende week plaatsvinden krijg je dan:
Veld: [Begindatum]
Criteria: Betweeen BeginVolgendeWeek() And EindVolgendeWeek()
Veld: [Gerealiseerde Einddatum]
Criteria: Is Null


Een kleine aantekening bij de functies die hierboven staan: die gaan uit van een kantoorwerkweek. BeginDezeWeek() begint de week dus met Maandag, en EindDezeWeek() eindigt op Vrijdag. Wil je ook in het weekend kunnen blussen, dan zou je die functies dus een beetje moeten aanpassen, zodat ze keurig bij Zondag beginnen, en op Zaterdag eindigen. Maar dat moet een makkie zijn :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan