Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как отсортировать рабочие дни недели за определённый диапазон времени? / 10 сообщений из 10, страница 1 из 1
26.12.2002, 20:32
    #32084974
Selar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Здравствуйте!
Для формирования месячной загрузки персонала (например в феврале) нужно подсчитать количество рабочих дней в течении которых часть работников находится в отпусках. Есть график отпусков, к примеру:
Фамилия/ начало отпуска/ конец отпуска
Иванов 27-01-2003 10-03-2003
Петров 03-02-2003 17-02-2003
Сидоров 10-02-2003 10-03-2003

Необходимо высчитать потери рабочих дней в феврале? Как построить запрос? Или где почитать как?
СПАСИБО!!!
...
Рейтинг: 0 / 0
26.12.2002, 21:43
    #32084985
DIMA2002
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Есть функция day([Дата]), параметр Дата - твои даты начала и конца отпуска. Тебе необходимо сначала получить список ВСЕХ рабочих дней, исключить выходные (сб и вс) с помощью этой функции, а потом посчитать количество записей. Удачи!
...
Рейтинг: 0 / 0
27.12.2002, 00:13
    #32084996
Selar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Спасибо, что не прошли мимо. Но не совсем понятно, как построить алгоритм :-( Я не настолько хорошо ещё разбираюсь в базах данных. Только учусь.
В полях "начало и конец" отпуска даты всего года и количество строк исчисляется сотнями. Зачастую даты в течении года меняются.
Как отсортировать диапазон который относится к одному, конкретному месяцу? Т.е. если отпуск начинается в январе, а заканчивается в марте - значит в феврале человек будет отсутствовать, а как это не пропустить при выборке?! Функции Day, Month, Year выбирают по конкретным данным, число, месяц, год, а как "объяснить" машине, что надо учитывать даты и в том случае если они попадают в диапазон начало-конец отпуска? Или если отпуск начался в марте, а закончится в апреле, то в марте меня интересуют только рабочие дни марта, а в апреле только рабочие дни апреля.
Может не совсем понятно объяснил?! Не поленитесь, переспросите! Можно напрямую на e-mail.
СПАСИБО.
...
Рейтинг: 0 / 0
27.12.2002, 10:26
    #32085096
Savik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
на VBA можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    Dim dn As Date 'начальная дата
    Dim dk As Date 'конечная дата
    Dim d_raz As Integer 'разница в днях
    Dim d_ned_nach As Integer 'день недели первого дня отпуска
    Dim kol_vyh_dney As Integer 'количество выходных дней за отпуск
    Dim kol_rabochih As Integer 'количество рабочих дней за отпуск
    Dim ostatok As Integer 'остаток в днях от целых недель отпуска
    
    dn =  "27 - 01 - 2003 "
    dk =  "10 - 03 - 2003 "
    d_raz = DateDiff( "d" , dn, dk)
    d_ned_nach = WeekDay(dn)
    kol_vyh_dney =  2  * (d_raz \  7 )
    ostatok = d_raz Mod  7 
    If d_ned_nach + ostatok >=  7  Then
        kol_vyh_dney = kol_vyh_dney +  2 
    ElseIf d_ned_nach + ostatok =  6  Then
        kol_vyh_dney = kol_vyh_dney +  1 
    Else
    End If
    kol_rabochih = d_raz - kol_vyh_dney 

могут быть ошибки, надо бы протестировать
да и учесть праздники не помешало бы
...
Рейтинг: 0 / 0
27.12.2002, 17:04
    #32085347
Anatoliy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function CountWorkDaysInPeriod(dtSt As Date, _
dtFn As Date, nbrWorkDay As Byte) As Integer
'получив даты начала и окончания периода,
'количество рабочих дней в неделе, функция возвратит количество
'рабочих дней в периоде
Dim i As Byte

'Пример вызова:
'? CountWorkDaysInPeriod (dtSt:= "03 . 12 . 02 ", dtFn:= "25 . 12 . 02 ", nbrWorkDay:= 5 )

For i =  1  To nbrWorkDay
    CountWorkDaysInPeriod = CountWorkDaysInPeriod + CountDaysOfWeekInPeriod(dtSt:=dtSt, dtFn:=dtFn, DayOfWeek:=i)
Next i
End Function


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Function CountDaysOfWeekInPeriod(dtSt As Date, dtFn As Date, _
DayOfWeek As Byte, Optional FrstDayOfWeek As Byte =  2 ) As Byte
Dim Nvba As Byte
Dim nbrFrstDay As Byte
Dim nbrDays As Byte 'количество дней в обрабатываемом периоде

'Call:
'? CountDaysOfWeekInPeriod (dtSt:="11.08.02", dtFn:="28.10.02", DayOfWeek:=3)

nbrDays = DateDiff("d", dtSt, dtFn) + 1 'количество дней в периоде

'перевести переданный пользовательский номер дня в константу VBA
'например, если передали  среду (пользовательский порядковый номер -  3 ),
'то переводим ее в vbWednesday = 4: Nvba = (2(vbMonday) + 3 - 2) Mod 7 + 1
Nvba = (FrstDayOfWeek + DayOfWeek - 2) Mod 7 + 1

'первый день периода, соответсвующий искомому дню недели
'(попроще: на какое число приходится первая среда (в нашем примере))
nbrFrstDay = (Nvba - Format(dtSt, "w") + 7) Mod 7 + 1
'если nbrFrstDay =  1  - это дата начала периода (dtSt),  2  - второй день и т.д.

CountDaysOfWeekInPeriod = ( 7  + nbrDays - nbrFrstDay) \  7 
End Function



Тогда, например, есть таблица отпусков Holidays_t с полями начала и окончания отпуска: dtSt и dtFn
Создайте запрос, который выведет количество рабочих дней (празники не учитываются!!!):

Код: plaintext
1.
SELECT Holidays_t.Name, CountWorkDaysInPeriod([dtSt],[dtFn], 5 ) AS WorksDay
FROM Holidays_t;
...
Рейтинг: 0 / 0
15.02.2003, 11:30
    #32106859
Selar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Здравствуйте!
Ещё раз обращаюсь за помощью!
Как я понял все вышеперечисленные советы и примеры (за которые всем огромное спасибо) вычисляют количество рабочих дней в период "С" и "До". Как это делать я разобрался. Это можно сделать, как с помощью VB так и с помощью запросов.
Но вот самая главная проблемма осталась неразрешимой :-(
Как из этого периода учитывать только те рабочие дни которые относятся к определённому месяцу?
Т.е если отпуск "С 12-02-2003 и До 20-03-2003", то как высчитать сколько рабочих дней в феврале, а сколько в марте?

Заранее спасибо и извините за назойливость!
...
Рейтинг: 0 / 0
17.02.2003, 09:57
    #32107102
Savik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Кратко :
1. Берёшь нач. и кон. дату и с помощью month(date) получаешь диапазон месяцев отпуска (скажем , 2 - 4)
2. Используя предложенные выше варианты находишь кол. рабочих дней в промежутках
- дата_начала_отпуска - конец_первого_месяца_отпуска
- начало_второго_месяца_отпуска - конец_второго_месяца_отпуска
....
- начало_последнего_месяца отпуска - конец_отпуска
...
Рейтинг: 0 / 0
17.02.2003, 11:08
    #32107155
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
Строишь кодом охрененную таблицу, содержащую по одной записи для каждого дня от рождества христова до конца света. В этой таблице указываешь рабочий-выходной и месяц(кроме даты, конечно).
Выборкой из этой таблицы твоя проблема легко решается.(я свою похожую решил так)
...
Рейтинг: 0 / 0
17.02.2003, 15:14
    #32107417
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
В связи с тем что не все пн - пт рабочие а сб-вс выходные
в связи с таким явлением как праздничные дни
разумно сделать табличку в которой держать список дней- исключений из правил.

2 shark
Идея замечательная.
С рождеством понятно. И когда конец света? ))
...
Рейтинг: 0 / 0
17.02.2003, 18:10
    #32107545
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отсортировать рабочие дни недели за определённый диапазон времени?
:-)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как отсортировать рабочие дни недели за определённый диапазон времени? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]