Как получить количество рабочих часов в месяце в конфигурации 1С:ЗУП?

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

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

Использование штатных механизмов подсистемы учета времени

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

Разберем по шагам, как получить данные через менеджер временных таблиц:

  1. Определяем параметры для заполнения данных учета времени.
  2. Создаем временные таблицы в контексте текущего запроса.
  3. Используем полученные таблицы ВТДанныеУчетаВремениИСостоянийСотрудников и ВТНормаВремени в итоговом запросе.

Рассмотрим пример реализации на языке 1С:


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

После выполнения данного кода в МенеджерВременныхТаблиц вашего запроса появятся две готовые таблицы. Первая — ВТДанныеУчетаВремениИСостоянийСотрудников — содержит фактически отработанные часы, а вторая — ВТНормаВремени — содержит нормативные показатели, рассчитанные с учетом производственного календаря и графиков сотрудников.

Передача данных в СКД для отчетов

Если ваша задача — вывести эти данные в отчет, лучшей практикой является использование Системы компоновки данных (СКД). Попытка вписать сложную логику расчета внутрь схемы запроса СКД крайне затруднительна. Мы рекомендуем использовать подход передачи таблицы значений.

Для этого в модуле отчета, при формировании данных, вы вызываете описанную выше функцию, получаете результат в таблицу значений и передаете её в СКД как «Набор данных — объект». Это позволяет:

Альтернативные способы получения данных

Если вам не требуется учет индивидуальных графиков, а необходимо только общее количество часов согласно производственному календарю, можно воспользоваться более простыми методами:

Подведем итог: никогда не пытайтесь «взломать» сложную логику учета рабочего времени прямым запросом к регистрам накопления. Используйте Общие модули системы, которые создают временные таблицы. Это гарантирует, что ваш отчет или обработка будут корректно работать даже после обновления конфигурации, когда условия расчета рабочего времени могут измениться.

← На главную