Article View: pl.comp.bazy-danych.msaccess
Article #137457Re: Dni robocze ...
From: md
Date: Tue, 16 May 2017 04:59
Date: Tue, 16 May 2017 04:59
95 lines
4680 bytes
4680 bytes
W dniu 11-05-2017 o 16:36, krzysztof.janusz@delkar.pl pisze:
> Witam. Powrócę do dawno poruszanego tematu dni roboczych.Problem polega na poprawności wyliczenia dni roboczych - program którego autorem jest Robert Łowczak znaleziony na stronie access.vis.pl. Uzupełniłem tabelę święta o dwa dni 01-05-2017 i 03-05-2017 - po wprowadzeniu zakresu dat od 28-04-2017 do 04-05-2017 - w wyniku otrzymuję 5 dni roboczych. Sprawdzałem wyliczenia pomiędzy różnymi datami (gdzie nie występują święta) i wtedy dni robocze wyliczane są prawidłowo. Jak może być tego przyczyna ?
> W uzupełnieniu podaję procedurę wyliczającą dni ogółem (z tym nie ma najmniejszego problemu)
> ----------------------------------------------------------------------
> Me.txtDniOgolem = (Me.txtDataDo - Me.txtDataOd) + 1
>
> i wyliczanie dni robocze :
> ----------------------------------------------------------------------
> Set rstDAO = CurrentDb.OpenRecordset("SELECT * FROM tblSwieta", dbOpenSnapshot)
>
> dtStartDate = DateValue(Me.txtDataOd)
> dtEndDate = DateValue(Me.txtDataDo)
> dtStartDate = dtStartDate
> intPolicz = 0
>
> Do While dtStartDate <= dtEndDate
>
> rstDAO.FindFirst "[Swieto] = #" & dtStartDate & "#"
> If Weekday(dtStartDate) <> vbSunday And Weekday(dtStartDate) <> vbSaturday Then
> If rstDAO.NoMatch Then intPolicz = intPolicz + 1
> End If
>
> dtStartDate = dtStartDate + 1
> Loop
>
> Me.txtDniRobocze = intPolicz
>
> rstDAO.Close
> Set rstDAO = Nothing
> -------------------------------------------------------------------------
> Z góry dziękuje za pomoc.
>
proponuje takie rozwiazanie:
Function czy_swieto(dzien As Date) As Boolean
On Error GoTo blad
If _
Weekday(dzien, vbMonday) = 7 Or _
Weekday(dzien, vbMonday) = 6 Or _
Month(dzien) = 1 And Day(dzien) = 1 Or _
Month(dzien) = 1 And Day(dzien) = 6 Or _
Month(dzien) = 5 And Day(dzien) = 1 Or _
Month(dzien) = 5 And Day(dzien) = 3 Or _
Month(dzien) = 8 And Day(dzien) = 15 Or _
Month(dzien) = 11 And Day(dzien) = 1 Or _
Month(dzien) = 11 And Day(dzien) = 11 Or _
Month(dzien) = 12 And Day(dzien) = 25 Or _
Month(dzien) = 12 And Day(dzien) = 26 Or _
dzien = Wielkanoc(Year(dzien)) Or _
dzien = Wielkanoc(Year(dzien)) + 59 _
Then
czy_swieto = True
Else
czy_swieto = False
End If
wyjscie:
DoCmd.SetWarnings -1
Exit Function
blad:
MsgBox Err.Description, vbCritical, "Błąd " & Err.Number
Resume wyjscie
End Function
Public Function Wielkanoc(rok As Integer) As Date
Dim a As Integer, b As Integer, c As Integer, D As Integer, e As
Integer, f As Integer, g As Integer, h As Integer, i As Integer, l As
Integer, M As Integer, p As Integer, n As Integer, k As Integer
a = rok Mod 19
b = Int(rok / 100)
c = rok Mod 100
D = Int(b / 4)
e = b Mod 4
f = Int((b + 8) / 25)
g = Int((b - f + 1) / 3)
h = (19 * a + b - D - g + 15) Mod 30
i = Int(c / 4)
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
M = Int((a + 11 * h + 22 * l) / 451)
p = (h + l - 7 * M + 114) Mod 31
p = p + 1
n = Int((h + l - 7 * M + 114) / 31)
'poniedziałek
Wielkanoc = DateSerial(rok, n, p + 1)
End Function
md
Technical Details
Message-ID:
<591a8706$0$15201$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<60168896-416e-4f0e-bbc9-f65e8b146b0c@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Subject: Re: Dni robocze ... Newsgroups: pl.comp.bazy-danych.msaccess References: <60168896-416e-4f0e-bbc9-f65e8b146b0c@googlegroups.com> From: md <bmkd@poczta.onet.pl> Date: Tue, 16 May 2017 06:59:26 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <60168896-416e-4f0e-bbc9-f65e8b146b0c@googlegroups.com> Lines: 96 Message-ID: <591a8706$0$15201$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 95.48.0.238 X-Trace: 1494910726 unt-rea-a-02.news.neostrada.pl 15201 95.48.0.238:52262 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit