Как правильно отразить ночные часы при работе в праздники и выходные в 1С:ЗУП

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Управленческий учет IT и автоматизация бизнеса
← На главную

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

Почему прямая запись в регистр ДанныеОперативногоУчетаРабочегоВремениСотрудников ломает табель

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


Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Записывать = Истина;
    Для Каждого ТекСтрока Из РаботаВВыходныеДни Цикл
        Движение = Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Добавить();
        Движение.Период = Дата;
        Движение.Сотрудник = ТекСтрока.Сотрудник;
        Движение.ПериодРегистрации = НачалоМесяца(Дата);
        Движение.ВидУчетаВремени = Справочники.ВидыИспользованияРабочегоВремени.Праздники;
        Движение.ВидДанных = Перечисления.ВидыДанныхУчетаВремениСотрудников.ДанныеОперативногоУчета;    
        Движение.Дни = 1;
        Движение.Часы = ТекСтрока.День - ТекСтрока.Ночь;

        ДвижениеНочь = Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Добавить();
        ДвижениеНочь.Период = Дата;
        ДвижениеНочь.Сотрудник = ТекСтрока.Сотрудник;
        ДвижениеНочь.ПериодРегистрации = НачалоМесяца(Дата);
        ДвижениеНочь.ВидУчетаВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Ночные часы праздничные");
        ДвижениеНочь.ВидДанных = Перечисления.ВидыДанныхУчетаВремениСотрудников.ДанныеОперативногоУчета;    
        ДвижениеНочь.Дни = 1;
        ДвижениеНочь.Часы = ТекСтрока.Ночь;
    КонецЦикла;
КонецПроцедуры

При таком подходе при заполнении документа Табель данные по сотрудникам за разные даты начинают перезатираться или пропадать. Выясним причины такого поведения системы:

  1. Закрытость алгоритмов подсистемы учета времени: В 1С:ЗУП сбор данных для документа Табель и расчета заработной платы выполняется через специализированные запросы в общих модулях подсистемы учета рабочего времени. Эти алгоритмы жестко ориентированы на состав предопределенных типовых документов-регистраторов. Если новый документ не включен в соответствующие переопределяемые механизмы конфигурации, компоновка данных графика, оперативного учета и отклонений работает некорректно.
  2. Неполный состав измерений и реквизитов: Регистр накопления ДанныеОперативногоУчетаРабочегоВремениСотрудников содержит обязательные разрезы учета (в частности, измерение Организация). При формировании движений конструктором без передачи полного набора реквизитов внутренние запросы компоновки отсекают неполные записи по жестким условиям соединения таблиц (INNER JOIN).
  3. Поиск по наименованию в коде: Конструкция Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию(...) в транзакции проведения является потенциально опасной и снижает надежность системы при переименовании элементов справочника.

Штатное решение: Настройка шаблона ввода исходных данных

Вместо доработки конфигурации и создания собственных объектов учета времени воспользуемся типовым универсальным механизмом — документом Данные для расчета зарплаты на базе настроенного шаблона. Разберем настройку по шагам:

  1. Подготовка видов времени и начислений: Убедимся, что в справочнике ВидыИспользованияРабочегоВремени присутствуют необходимые элементы (например, Праздники и Праздники ночные / Ночные часы). В настройках начислений (Оплата праздничных и выходных дней и Доплата за работу в ночные часы) проверяем вкладку Учет времени, чтобы данные виды времени учитывались при расчете.
  2. Создание шаблона ввода: Перейдем в раздел Настройка — Шаблоны ввода исходных данных и создадим новый шаблон. На вкладке Учет времени отметим флажками нужные виды использования рабочего времени (как дневные праздничные, так и ночные).
  3. Настройка заполнения: Укажем способ ввода данных (по дням или за период в целом) и состав сотрудников (индивидуально или списком).
  4. Регистрация часов: В разделе Зарплата — Данные для расчета зарплаты создаем документ по настроенному шаблону. Вводим отработанные часы по видам времени. При проведении документ корректно сформирует все служебные движения в регистрах подсистемы учета времени без конфликтов в алгоритмах.

Формирование печатной формы приказа

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

  1. Встроенная возможность шаблонов: В актуальных версиях конфигурации в настройках шаблона ввода исходных данных предусмотрена возможность настройки и вывода специализированных печатных форм.
  2. Подключение внешней печатной формы (ВПФ): Если требуется строго регламентированный или нестандартный бланк организации, создается внешняя печатная форма для документа Данные для расчета зарплаты или типового документа Работа в выходные и праздники. Она подключается через раздел Администрирование — Печатные формы, отчеты и обработки, сохраняя типовую конфигурацию на полной поддержке.

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

← На главную