Многие технические специалисты и кадровики сталкиваются с ситуацией, когда в программе 1С:Зарплата и Управление Персоналом 3.1 внезапно меняется производственный календарь или появляются новые виды времени, хотя обновление конфигурации не проводилось. Типичный пример — появление записей по Указу Президента РФ от 20.10.2021 № 595. В этой статье мы подробно разберем, как работает этот механизм, где искать данные в конфигураторе и как корректно отключить автоматические изменения, если они мешают расчету зарплаты.
Выясним причину, по которой в регистре сведений ПериодыНерабочихДнейКалендаря появляются новые записи. В современных версиях 1С реализована подсистема «Интернет-поддержка пользователей». Программа в фоновом режиме выполняет регламентное задание Обновление классификаторов. Это задание обращается к серверам фирмы «1С» и скачивает актуальные данные, к которым относятся:
Поскольку законодательные изменения по нерабочим дням часто принимаются оперативно, разработчики 1С доставляют их в информационные базы через механизм классификаторов. Это позволяет пользователям видеть актуальную норму времени без ожидания выхода нового релиза конфигурации. Именно поэтому попытки найти в коде явный вызов метода СоздатьНаборЗаписей() для конкретного Указа не увенчаются успехом — запись происходит через универсальную обработку загрузки XML-данных классификатора.
Рассмотрим, как информация распределяется внутри системы. За нерабочие периоды отвечают два ключевых объекта:
ПериодыНерабочихДнейКалендаря — здесь хранятся сами интервалы дат и ссылки на нормативные акты.Проанализируем ситуацию: если регламентное задание обновило календарь, это может автоматически повлечь за собой перезаполнение всех графиков работы сотрудников, у которых установлен признак автоматического обновления. Это часто приводит к «слету» нормы рабочего времени, что критично для расчета оклада и доплат.
Если нам нужно, чтобы записи в регистре остались, но не влияли на заполнение графиков и расчет зарплаты, воспользуемся штатным механизмом:
Это самый безопасный метод, так как он не ломает механизм обновлений, но дает бухгалтеру контроль над заполнением документов.
Для тех, кто хочет полностью исключить автоматическое вмешательство в производственные календари, разберем работу с регистром ВариантыОбновленияКлассификаторов (в некоторых версиях — настройки в справочнике классификаторов). Посмотрим на последовательность действий через «Функции для технического специалиста»:
После этого регламентное задание Обновление классификаторов продолжит загружать банки и адреса, но перестанет трогать календарь. Это позволит обновлять его вручную только тогда, когда это согласовано с расчетным отделом.
Проанализируем влияние регистра на конкретные графики сотрудников. Даже если в регистре ПериодыНерабочихДнейКалендаря есть записи, они влияют на график только при определенных настройках. Посмотрим на свойства объекта ГрафикиРаботыСотрудников:
В настройках графика есть флажок «При заполнении учитывать оплачиваемые нерабочие дни». Если он снят, то:
Если же флажок стоит, программа заменит рабочие часы на код «ОН» (Оплачиваемый нерабочий день). Важно помнить: при использовании «ОН» фактически отработанное время уменьшается, но норма (знаменатель) остается прежней, что сохраняет полный размер оклада сотруднику.
Рассмотрим пример ситуации из практики: регламентное задание обновило календарь, и все графики «поехали». Чтобы этого избежать, можно воспользоваться советом опытных разработчиков и отредактировать регистр сведений АвтоматическиОбновляемыеГрафикиРаботыСотрудников. Если удалить из него записи о ваших графиках, система перестанет принудительно изменять их при каждом обновлении классификатора.
Также можно использовать программный подход для контроля изменений в регистре. Рассмотрим фрагмент логики, который позволяет понять, как система определяет необходимость применения нерабочих периодов:
// Пример логики определения использования нерабочих дней
Функция НужноПрименятьНерабочийПериод(ДатаАктуальности) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыНерабочихДнейКалендаря.ДатаНачала,
| ПериодыНерабочихДнейКалендаря.ДатаОкончания
|ИЗ
| РегистрСведений.ПериодыНерабочихДнейКалендаря КАК ПериодыНерабочихДнейКалендаря
|ГДЕ
| ПериодыНерабочихДнейКалендаря.ДатаНачала <= &ДатаАктуальности
| И ПериодыНерабочихДнейКалендаря.Применять = ИСТИНА";
Запрос.УстановитьПараметр("ДатаАктуальности", ДатаАктуальности);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Мы выяснили, что автоматическое появление нерабочих дней — это штатная работа подсистемы интернет-поддержки. Для управления этим процессом у нас есть три уровня контроля:
Рекомендация: В базах с большим количеством сложных графиков и непрерывным производством лучше отключить автоматическое обновление производственных календарей и вносить изменения осознанно, предварительно проверив их влияние на тестовой копии базы.