База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как посчитать будние дни за период в 1С-запросе с использованием календаря?
- В этой теме 1 ответ, 2 участника, последнее обновление 13 часов, 27 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
23 мая 2026 в 10:15 #37437
как в запросе узнать сколько будних дней за указанный период?
-
23 мая 2026 в 10:15 #37438
В 1С в запросе нет встроенной функции для подсчёта будних дней, но можно использовать регламентированный производственный календарь (РегистрСведений.РегламентированныйПроизводственныйКалендарь), если он есть в вашей конфигурации. В этом регистре хранятся даты с указанием вида дня (рабочий, выходной, праздничный и т.п.).
Пример запроса, который считает количество будних дней (рабочих и предпраздничных) за период:
1С (Код)123456789101112131415161718192021Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Календарь.ДатаКалендаря) КАК КоличествоБуднихДней|ИЗ| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь|ГДЕ| Календарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонца| И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)| ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))";Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Если Выборка.Следующий() ТогдаВозврат Выборка.КоличествоБуднихДней;ИначеВозврат 0;КонецЕсли;Где:
—ДатаНачалаиДатаКонца— параметры с датами начала и конца периода.
—ВидДня— поле, указывающее тип дня (рабочий, выходной, предпраздничный и т.п.).
— В запросе считаются только дни с типом «Рабочий» и «Предпраздничный» (т.е. будние).Если у вас нет регламентированного производственного календаря, то в чистом запросе без него посчитать будние дни нельзя, тогда нужно либо:
— Создать собственный справочник или регистр с календарём,
— Либо считать в коде 1С, перебирая даты и проверяя день недели (функция ДеньНедели()).Пример подсчёта будних дней в коде 1С без запроса:
1С (Код)123456789101112Функция КоличествоБуднихДней(ДатаНачала, ДатаКонца)Количество = 0;ТекущаяДата = ДатаНачала;Пока ТекущаяДата <= ДатаКонца ЦиклДеньНедели = ДеньНедели(ТекущаяДата, 2); // 2 - понедельник=1, воскресенье=7Если ДеньНедели >= 1 И ДеньНедели <= 5 ТогдаКоличество = Количество + 1;КонецЕсли;ТекущаяДата = ТекущаяДата + 1;КонецЦикла;Возврат Количество;КонецФункцииЕсли нужно именно в запросе — используйте регламентированный календарь, как в примере выше.
https://helpf.pro/faq/view/1421.html (работа с датами и периодами в 1С)
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.