К статье
Практический материал

Другое · 10 мин

Как определить рабочий день в 1С

Как в 1С определить рабочий день: производственный календарь, графики работы сотрудников, проверка даты в коде и типичные ошибки при расчёте рабочего времени.

Вопрос «рабочий ли это день» в 1С возникает в двух разных ситуациях: когда бухгалтер или кадровик проверяет конкретную дату по календарю, и когда разработчик пишет код, который должен автоматически определять рабочие и нерабочие дни — например, для расчёта сроков оплаты, доставки или начисления зарплаты. В обоих случаях ответ зависит от того, какой производственный календарь и какие графики работы заведены в базе.

Ключевой момент: в 1С понятие «рабочий день» не вычисляется из дня недели напрямую. Программа опирается на данные производственного календаря и графиков работы сотрудников, которые могут отличаться от стандартной пятидневки. Поэтому суббота может быть рабочим днём, а будний день — праздничным или перенесённым выходным.

Ниже разобраны оба сценария: проверка даты в интерфейсе типовых конфигураций (1С:ЗУП, 1С:Бухгалтерия, 1С:ERP) и программное определение рабочего дня через встроенный язык. Отдельно рассмотрены ситуации со сменными графиками, переносами праздников и типичные ошибки, из-за которых расчёт рабочих дней даёт неверный результат.

От чего зависит, считается ли день рабочим

В типовых конфигурациях 1С «рабочесть» конкретной даты складывается из двух уровней. Первый — производственный календарь, общий для страны или региона. В нём заданы выходные, праздничные и предпраздничные (сокращённые) дни, а также переносы, утверждённые постановлениями правительства. Второй уровень — график работы сотрудника или подразделения, который строится на основе календаря, но может его переопределять: сменные графики «два через два», «сутки через трое», шестидневка и другие.

Из этого следует практический вывод: один и тот же день может быть рабочим для одного сотрудника и выходным для другого. Например, при графике «2/2» сотрудник может работать в воскресенье, а в среду отдыхать. Поэтому вопрос «рабочий ли это день» всегда нужно уточнять: для кого или для чего — для всего предприятия в целом, для конкретного работника или для расчёта сроков по договору.

Как проверить дату в интерфейсе 1С

Самый простой способ — открыть производственный календарь и посмотреть, как помечена нужная дата. В 1С:ЗУП и 1С:ERP путь обычно такой: «Настройка» → «Производственные календари» (в некоторых версиях — «Администрирование» → «Производственные календари»). В 1С:Бухгалтерии календарь находится в разделе «Главное» → «Производственный календарь» или через «Все функции» → «Справочники».

В форме календаря дни подсвечены разными цветами: рабочие, выходные, праздничные и сокращённые предпраздничные дни визуально различаются. Наведите курсор или кликните на дату — программа покажет вид дня и, если день перенесён, основание переноса.

Если нужно понять, рабочий ли день у конкретного сотрудника, смотрите не календарь, а его график. В 1С:ЗУП это справочник «Графики работы сотрудников» («Настройка» → «Графики работы сотрудников»). Откройте график, к которому привязан сотрудник, — в нём видно, какие даты являются рабочими, и какова продолжительность каждой смены.

Проверка даты в интерфейсе
  1. 1
    Откройте «Настройка» → «Производственные календари» и выберите нужный календарь
  2. 2
    Найдите дату и посмотрите её вид: рабочий, выходной, праздничный, предпраздничный
  3. 3
    Если нужен день конкретного сотрудника — откройте «Графики работы сотрудников» и проверьте его график
  4. 4
    Сверьте, что календарь заполнен на нужный год — незаполненный период часто даёт неверный результат

Как определить рабочий день программно

Разработчику для проверки даты в коде нужно обратиться к данным производственного календаря. В конфигурациях на основе БСП (Библиотека стандартных подсистем) — это ЗУП, ERP, УТ, Бухгалтерия — данные хранятся в регистре сведений «ДанныеПроизводственногоКалендаря», а работу с ним обеспечивает общий модуль «КалендарныеГрафики».

Типовой подход — запрос к регистру: по дате и календарю получаем вид дня. Если вид дня «Рабочий» или «Предпраздничный» — день рабочий; «Суббота», «Воскресенье», «Праздник» — нерабочий. Для сдвига даты на N рабочих дней удобнее использовать готовые функции модуля «КалендарныеГрафики», которые принимают календарь, исходную дату и количество дней и возвращают результирующую дату.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Данные.ВидДня КАК ВидДня
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК Данные
|ГДЕ
| Данные.ПроизводственныйКалендарь = &Календарь
| И Данные.Дата = &Дата";
Запрос.УстановитьПараметр("Календарь", ПроизводственныйКалендарь);
Запрос.УстановитьПараметр("Дата", ПроверяемаяДата);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
 РабочийДень = (Выборка.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий)
 Или (Выборка.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
КонецЕсли;

Обратите внимание: в коде нельзя просто проверять день недели через ДеньНедели(Дата). Такая проверка не учтёт праздники, переносы выходных и региональные календари. Например, день, выпавший на субботу из-за переноса, может быть рабочим, а будний день в новогодние каникулы — выходным.

Особенности для сменных и индивидуальных графиков

Производственный календарь описывает только «общую» сетку рабочего времени. Сменные графики в 1С строятся иначе: в настройках графика задаётся шаблон — цикл рабочих дней и дней отдыха (например, два рабочих дня по 11 часов, затем два выходных) и дата отсчёта цикла. В этом случае принадлежность даты к рабочим определяется не видом дня в календаре, а позицией даты в цикле графика.

Поэтому для сотрудников на сменных графиках проверять дату нужно по данным именно их графика. В ЗУП фактические и плановые рабочие дни видны в документах табеля и в отчётах по рабочему времени. Программно данные по графику сотрудника получают через механизмы учёта времени конкретной конфигурации — универсального запроса к календарю здесь недостаточно.

Заполнение и обновление календаря

Частая причина ошибок — незаполненный или устаревший производственный календарь. Если календарь не заполнен на нужный год, расчёты нормы времени, отпусков и сроков будут неверными. В типовых конфигурациях календарь заполняется автоматически по умолчанию (кнопка «Заполнить по умолчанию» в форме календаря) — программа расставит выходные по пятидневке и нерабочие праздничные дни, установленные Трудовым кодексом.

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

Типичные ошибки и как их избежать

Первая и самая распространённая ошибка — определение рабочего дня по дню недели в коде или в формулах Excel вместо обращения к календарю. Вторая — использование «не того» календаря: в базе может быть несколько производственных календарей (федеральный и региональные), и графики сотрудников ссылаются на конкретный из них. Третья — забытые ручные правки: если кто-то вручную менял вид дня в календаре, а потом календарь перезаполнили «по умолчанию», ручные изменения могли затереться или, наоборот, остаться незамеченными.

Ещё одна проблемная зона — расчёт сроков в рабочих днях по договорам (оплата, доставка). Если в документах срок считается простым добавлением дней к дате, без учёта календаря, итоговая дата может попасть на выходной или праздник. Для таких расчётов используйте функции работы с календарными графиками, а не арифметику дат.

Типичные ошибки
01
Проверка дня недели вместо обращения к производственному календарю — праздники и переносы не учитываются
02
Использование федерального календаря для сотрудников, привязанных к региональному
03
Расчёт сроков простым прибавлением дней к дате — результат попадает на выходной
04
Незаполненный календарь на следующий год — неверные нормы времени и сроки
05
Проверка рабочего дня сотрудника со сменным графиком по общему календарю

Как проверить правильность результата

После настройки или изменения календаря и графиков стоит выполнить контрольную проверку. Для интерфейсной проверки откройте календарь и сверьте несколько ключевых дат: новогодние каникулы, майские праздники, известные переносы. В ЗУП дополнительно сформируйте отчёт по норме рабочего времени или табель за месяц и сравните количество рабочих дней с официальным производственным календарём.

Для программного кода проверьте функцию на граничных датах: праздничный будний день, перенесённая рабочая суббота, обычный выходной, предпраздничный сокращённый день. Если на всех контрольных датах результат совпадает с календарём — логика работает верно.

Контрольные точки

Как проверить результат

Новогодние праздники в календаре
Норма

Дни помечены как праздничные или выходные

Тревожный признак

Будние дни января показаны рабочими

Перенесённая рабочая суббота
Норма

Суббота помечена рабочим днём

Тревожный признак

Суббота осталась выходной

Норма времени за месяц в ЗУП
Норма

Совпадает с официальным производственным календарём

Тревожный признак

Расхождение в днях или часах

Расчёт срока в рабочих днях
Норма

Итоговая дата — рабочий день

Тревожный признак

Срок попадает на выходной или праздник

Частые вопросы

Где в 1С:Бухгалтерии посмотреть производственный календарь?

Обычно через раздел «Главное» или через «Все функции» → «Справочники» → «Производственные календари». Если пункт не виден, проверьте права пользователя и включённость соответствующей функциональности в настройках программы.

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

Чаще всего причина в том, что день в календаре вручную помечен как нерабочий, либо календарь не обновлён и в нём устаревшие переносы. Откройте производственный календарь, найдите дату и проверьте её вид. Также убедитесь, что сотрудник привязан к правильному календарю и графику.

Как в коде прибавить к дате 10 рабочих дней?

Простое прибавление числа к дате не подходит — нужны функции работы с календарными графиками. В конфигурациях на БСП используйте методы общего модуля «КалендарныеГрафики», которые принимают календарь, исходную дату и количество рабочих дней и возвращают дату с учётом выходных и праздников.

Нужно ли заводить отдельный календарь для шестидневной недели?

Как правило, отдельный календарь не обязателен: достаточно создать график работы с шестью рабочими днями на основе общего производственного календаря. Отдельный календарь имеет смысл при региональных отличиях в праздничных днях.

Что делать, если переносы выходных не появились после обновления?

Проверьте, установлены ли актуальные обновления конфигурации и обновлён ли сервис календарей. Если автоматическое обновление недоступно, внесите переносы вручную в форме производственного календаря, изменив вид соответствующих дней.

Учитывается ли предпраздничный день как рабочий?

Да, предпраздничный день является рабочим, но его продолжительность сокращается на один час. При определении «рабочий/нерабочий» он относится к рабочим, а сокращение учитывается при расчёте нормы времени в часах.

Итог

Что важно запомнить

Рабочий день в 1С определяется производственным календарём и графиком сотрудника, а не днём недели. Дату проверяют в справочнике календарей или через регистр «ДанныеПроизводственногоКалендаря», а корректность расчётов зависит от своевременного заполнения календаря и учёта переносов праздников.