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