Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
160 / 35 / 6
Регистрация: 24.08.2014
Сообщений: 530

Расчет количества рабочих дней

24.04.2015, 12:29. Показов 3308. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, подскажите что надо исправить:
создал форму для расчета количества рабочих дней за произвольный период, если по полям перемещаюсь по TAB или ENTER - все работает нормально; если по полям перемещаюсь мышкой, то при фокусе на поле Д2 выдает ошибку (см рисунки). Базу прилагаю.
Подскажите, что исправить, чтобы
1. работало нормально при любом способе перехода по полям
2. в поле "количество рабочих дней" по умолчанию было пусто или стоял 0

Благодарю откликнувшихся))
Миниатюры
Расчет количества рабочих дней   Расчет количества рабочих дней  
Вложения
Тип файла: rar Primer_WorkDays.rar (359.8 Кб, 18 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2015, 12:29
Ответы с готовыми решениями:

Расчет рабочих дней
есть 4 рабочих, как подсчитать количество дней (можно и дни) когда будет работать каждый рабочий, если каждый работает сутки через три...

Автозаполнение количества рабочих дней в зависимости от условий
Подскажите как в Access создать следующую таблицу. Имеем дату поступления документа и различные поводы. Необходимо в зависимости от...

Как максимально просто можно сделать прибавление к конкретной дате конкретного количества рабочих дней
Уважаемые подскажите пожалуйста, как максимально просто можно сделать прибавление к конкретной дате конкретного количества рабочих дней и...

8
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2015, 12:45
В функции workdays исправлены форматы дат на стандартные, американские. На случай пустых полей применена функция NZ

В логике задачи не разбирался
Вложения
Тип файла: rar Primer_WorkDays.rar (22.3 Кб, 35 просмотров)
0
160 / 35 / 6
Регистрация: 24.08.2014
Сообщений: 530
24.04.2015, 12:57  [ТС]
NZ не срабатывает
Миниатюры
Расчет количества рабочих дней  
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2015, 13:07
Попраьте процедуру. Не обратил внимания, что аргументы функции датного типа и не принимают NULL
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Function workdays(ByVal dtDate1, ByVal dtDate2 As Variant, Optional ByVal bUseHolidays As Variant) As Long
Dim l As Long, wd1 As Integer, wd2 As Integer
Dim wd As Long
 
If IsMissing(bUseHolidays) Then
    bUseHolidays = False
End If
l = DateDiff("d", Nz(dtDate1, Date), Nz(dtDate2, Date), vbMonday)
wd1 = Weekday(Nz(dtDate1, Date), vbMonday)
wd2 = Weekday(Nz(dtDate2, Date), vbMonday)
wd = l - ((l + wd1 + (7 - wd2)) / 7&) * 2& + 1&
If wd1 = 7 Then
    wd = wd + 1
End If
If wd2 <= 5 Then
    wd = wd + 2
ElseIf wd2 = 6 Then
    wd = wd + 1
End If
If bUseHolidays Then
    wd = wd - DCount("*", "tblHolidays", "[Holiday] Between " & _
    Format(wd1, "\#mm\/dd\/yyyy\#") & " And " & _
    Format(wd2, "\#mm\/dd\/yyyy\#"))
End If
workdays = wd
End Function
0
160 / 35 / 6
Регистрация: 24.08.2014
Сообщений: 530
24.04.2015, 13:19  [ТС]
изв. за бестолковость, но что-то не так, при пустых полях дат показывает 1 рабочий день:
Миниатюры
Расчет количества рабочих дней  
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2015, 13:55
Я уже писал, что логику программы не смотрел.

Чтобы удалить 1 при пустых полях, надо изменить тип функции, сделав ее Variant и выход при пустых аргументах
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Function workdays(ByVal dtDate1, ByVal dtDate2, Optional ByVal bUseHolidays As Variant) As Variant
Dim l As Long, wd1 As Integer, wd2 As Integer
Dim wd As Long
    
If IsNull(dtDate1) Or IsNull(dtDate2) Then 'Проверка аргументов на NULL и выход, если любой из них пуст
    workdays = Null
    Exit Function
End If
 
If IsMissing(bUseHolidays) Then
    bUseHolidays = False
End If
l = DateDiff("d", Nz(dtDate1, Date), Nz(dtDate2, Date), vbMonday)
wd1 = Weekday(Nz(dtDate1, Date), vbMonday)
wd2 = Weekday(Nz(dtDate2, Date), vbMonday)
wd = l - ((l + wd1 + (7 - wd2)) / 7&) * 2& + 1&
If wd1 = 7 Then
    wd = wd + 1
End If
If wd2 <= 5 Then
    wd = wd + 2
ElseIf wd2 = 6 Then
    wd = wd + 1
End If
If bUseHolidays Then
    wd = wd - DCount("*", "tblHolidays", "[Holiday] Between " & _
    Format(wd1, "\#mm\/dd\/yyyy\#") & " And " & _
    Format(wd2, "\#mm\/dd\/yyyy\#"))
End If
workdays = wd
End Function
0
160 / 35 / 6
Регистрация: 24.08.2014
Сообщений: 530
24.04.2015, 14:15  [ТС]
все оказывается не так просто(( При таком варианте в расчет не принимается таблица выходных дней, которые приходятся на рабочие дни (tblHolidays)

Добавлено через 6 минут
Я сравниваю с производственным календарем. В самом первоначальном варианте считает правильно
0
369 / 88 / 8
Регистрация: 14.08.2012
Сообщений: 248
24.04.2015, 14:32
Цитата Сообщение от rvg Посмотреть сообщение
Я сравниваю с производственным календарем. В самом первоначальном варианте считает правильно
Приведи пример дат, где считает неправильно. Я чейто не вижу чтобы изменялась количество. И не вижу преобразованийв твоей функции которые влияют на работу с таблицей выходных дней. Наверное изначально считалось неправильно
0
160 / 35 / 6
Регистрация: 24.08.2014
Сообщений: 530
24.04.2015, 15:04  [ТС]
Для проверки: в январе (с 1 по 31) 2015 г должно быть 15 рабочих дней (с четом таблицы выходных дней, приходящихся на рабочие)

Добавлено через 3 минуты
Цитата Сообщение от odbcsql Посмотреть сообщение
Приведи пример дат, где считает неправильно. Я чейто не вижу чтобы изменялась количество. И не вижу преобразованийв твоей функции которые влияют на работу с таблицей выходных дней. Наверное изначально считалось неправильно
Я тоже не вижу, но факт остается фактом))

Добавлено через 26 минут
Опытным путем установил, что неправильный подсчет происходит, если изменить формат на американский:

If bUseHolidays Then
wd = wd - DCount("*", "tblHolidays", "[Holiday] Between " & _
Format(wd1, "\#mm\/dd\/yyyy\#") & " And " & _
Format(wd2, "\#mm\/dd\/yyyy\#"))

Они хотят что бы мы больше работали ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2015, 15:04
Помогаю со студенческими работами здесь

Вычисление рабочих дней
Добрый вечер уважаемые форумчане, подскажите пожалуйста. В базе есть поля , и вычисляемое поле , при заполнении заказа я ...

Подсчет рабочих дней в календаре
как подсчитать рабочие дни в календаре, то есть все дни календаря за вычетом определенных дней недели, например, суббот и воскресений?? ...

Определить количество рабочих дней в месяце
всем привет как с помощью VBA вернуть кол-во рабочих дней месяца для даты 01.01.2017 ? :)

Вывод в календаре рабочих дней одним цветом, а нерабочих другим цветом.
В Access есть форма в которую вставлен элемент ActiveX Календарь и есть таблица, имеющая два поля Date - тип дата и Flag - тип логический....

расчет отпускных дней ????
Вопрос. есть талица &quot;ФИО&quot; в которой есть начальная Дата_0, и &quot;ПЕРИОД&quot; с количеством отпускных дней в году на сотрудника (начиная от Дата_0)...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru