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