Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 15
1

Подсчет выходных между двумя датами

25.04.2012, 22:03. Показов 6357. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пожалуйста, чайник я пока.
Делаю базу для учета своей работы.
Есть форма где я заполняю сведения о командировках. Есть дата начала командировки и дата окончания командировки. Для подсчета работы в выходные дни надо вычислить сколько в командировках было выходных дней. Сделал запрос на основании него отчет. Все хорошо за исключением тех случаев когда одна командировка перекрывает несколько выходных дней. Строчка о том, что это была за командировка есть, что она была в выходные зафиксировано с помощью функции Weekday, но вот вычислить сколько именно было выходных дней за эту командировку не могу.
А если кто подскажет, как календарь праздников суда замутить, вообще буду считать своим учителем
Пожалуйста кто может помогите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2012, 22:03
Ответы с готовыми решениями:

Отчет между двумя датами
в базе данных Борей есть отчет где выводится информация между двумя датами которые определяются в...

События между двумя датами
Добрый день! Есть перечень изделий - каждое имеет сертификат с датой регистрации. Помогите...

Подсчет данных между датами
Доброго времени суток. Прошу помощи. Задача по учету работы автотранспорта Нужно подсчитать...

Подсчёт часов между датами
Добрый день! Прошу помочь решить задачу с подсчётом количества часов между двумя датами в формате...

5
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
25.04.2012, 22:22 2
Если есть таблица - календарь праздников, в который входят и выходные, на которые не перенесены рабочие дни, тогда количество выходных+праздников можно рассчитать так
Visual Basic
1
2
3
DCount("*","Таблица_праздников","дата_таблицы Between " & _
           Format(Forms!Командировки![дата начала],"\#mm\/dd\/yyyy\#") & " And " & _
           Format(Forms!Командировки![дата окончания],"\#mm\/dd\/yyyy\#"))
1
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 15
25.04.2012, 22:37  [ТС] 3
Завтра попробую помучать этот вариант. Но тогда придется делать таблицу дней в году с перечислением всех выходных. Такую таблицу можно как то легко заполнять автоматически.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
26.04.2012, 01:05 4
Цитата Сообщение от Tapochek1975 Посмотреть сообщение
Но тогда придется делать таблицу дней в году с перечислением всех выходных.
В предыдущем сообщении я упомянул о том, что не всякие выходной день может быть выходным, так как на него может быть перенесен рабочий день. Поэтому выходные тоже нужно показывать.
Цитата Сообщение от Tapochek1975 Посмотреть сообщение
Такую таблицу можно как то легко заполнять автоматически.
Конечно. В цикле пройтись от какой-то начальной даты, до некой конечной и , если текущая дата попадает (функция WeekDay), например, на субботу или воскресенье, помещать ее в таблицу. Затем вручную проставить даты праздников и по мере наступления определенных событий (например, перенос рабочих дней) корректировать календарь.

Добавлено через 1 час 59 минут
Подумал и пришел к выводу, что достаточно иметь таблицу Holidays с полями dat (тип Дата/время) и hw (тип Логический), в которой будут содержаться даты праздников, отличные от выходных, и только те выходные, на которые переносятся рабочие дни. Первые в логическом поле имеют значение True, а вторые - False. Количество выходных+праздников за период [дата начала], [дата окончания] можно найти запросом
T-SQL
1
2
3
4
5
6
PARAMETERS [дата начала] Date, [дата окончания] Date;
SELECT Count(*) As выходных FROM
(SELECT (D2.digit & D1.digit & D0.digit)+[дата начала] AS d
FROM Digits AS D0, Digits AS D1, Digits AS D2) As Q
LEFT JOIN Holidays On Q.d = Holidays.dat
WHERE d<=[дата окончания] And (hw OR (WeekDay(d,2) In (6,7) And (dat Is Null Or hw)))
где Digits - сохраненный запрос (использованы материалы с SQL.RU, автор запроса Digits, а также его применения BoNiM)
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT TOP 1 0 AS digit FROM MSysObjects
UNION All
SELECT TOP 1 1 FROM MSysObjects
UNION All 
SELECT TOP 1 2 FROM MSysObjects
UNION All
SELECT TOP 1 3 FROM MSysObjects
UNION All
SELECT TOP 1 4 FROM MSysObjects
UNION All
SELECT TOP 1 5 FROM MSysObjects
UNION All
SELECT TOP 1 6 FROM MSysObjects
UNION All
SELECT TOP 1 7 FROM MSysObjects
UNION All
SELECT TOP 1 8 FROM MSysObjects
UNION ALL 
SELECT TOP 1 9 FROM MSysObjects
Вместо запроса Digits можно использовать одноименную таблицу, единственное поле digit которой следует заполнить цифрами от 0 до 9.
2
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 15
02.05.2012, 23:32  [ТС] 5
Цитата Сообщение от minob Посмотреть сообщение
В цикле пройтись от какой-то начальной даты, до некой конечной и , если текущая дата попадает (функция WeekDay), например, на субботу или воскресенье, помещать ее в таблицу. Затем вручную проставить даты праздников и по мере наступления определенных событий (например, перенос рабочих дней) корректировать календарь.
А можно про цикл по подробнее? В чем это делается и как выглядит? Как в это цикле функция будет вытягивать и вставлять в таблицу?

Добавлено через 27 минут
Цитата Сообщение от minob Посмотреть сообщение
PARAMETERS [дата начала] Date, [дата окончания] Date; SELECT Count(*) As выходных FROM (SELECT (D2.digit & D1.digit & D0.digit)+[дата начала] AS d FROM Digits AS D0, Digits AS D1, Digits AS D2) As Q LEFT JOIN Holidays On Q.d = Holidays.dat WHERE d<=[дата окончания] And (hw OR (WeekDay(d,2) In (6,7) And (dat Is Null Or hw)))
А что это за параметры D0 digit, D1 digit, D2 Digit/// Они при запуске запроса, после ввода начальной и конечной даты, требуют ввестись. Что надо вводить?
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.05.2012, 23:58 6
Цитата Сообщение от Tapochek1975 Посмотреть сообщение
А можно про цикл по подробнее? В чем это делается и как выглядит? Как в это цикле функция будет вытягивать и вставлять в таблицу?
Коль задаете такие вопросы, то все предыдущее вам на пользу не пошло, в силу непонимания. Поэтому читайте учебники, посещайте курсы, смотрите видеокурсы, т.к., имхо, считаю, что форум - не место для обучения азам программированя, тем более для пересказа учебников, содержащих не одну сотню страниц.

Последнее, чем могу вам помочь, это еще одним вариантом вычисления выходных/рабочих дней за период с помощью функции, которую следует поместить в общий модуль.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function FHldWrk2&(hw As Boolean, dat_beg As Date, dat_end As Date)
'hw - если True, то вычисляется количество выходных, если False - количество рабочих
'dat_beg - начальная дата периода
'dat_end - конечная дата периода
Dim sq$, fl%, d As Date
  sq = "SELECT * FROM Holidays WHERE dat Between " & Format(dat_beg, "\#mm\/dd\/yyyy\#") & _
               " And " & Format(dat_end, "\#mm\/dd\/yyyy\#") & " ORDER BY dat"
  With CurrentDb.OpenRecordset(sq, dbOpenSnapshot)
    For d = dat_beg To dat_end
      fl = Not .EOF: If fl Then fl = (d = !dat): If fl Then fl = fl + !hw
      FHldWrk2 = FHldWrk2 - ((fl = -2) Or (Weekday(d, 2) >= 6 And fl <> -1))
      If fl Then .MoveNext
    Next
    .Close
  End With
  If Not hw Then FHldWrk2 = dat_end - dat_beg + 1 - FHldWrk2
End Function
Функция использует таблицу Holidays, описанную в предыдушем моем сообщении.

Надеюсь, вызов функции в нужном месте и передачу ей фактических параметров осилите.
1
02.05.2012, 23:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2012, 23:58
Помогаю со студенческими работами здесь

Количество дней между двумя датами. Как определить?
Подскажите есть дата отезда(тип данных дата\время) и дата приезда(тип данных дата\время) как найти...

Подсчет количества полных месяцев между датами
плиз, помогите с кодом SQL на расчет количества полных месяцев между двумя датами

Высчитать количество дней между двумя датами, ошибка: задано значение для операции без оператора
Всем привет))) Помогите разобраться в ошибке, нужно высчитать кол-во дней между двумя...

Авто-подсчет дней между датами и авто-сохранение результата в таблицу
Доброго времени суток! Как можно создать авто подсчет дней между датами чтобы результат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru