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