Как получить список работающих сотрудников в 1С:ЗУП 3.1?

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

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

Использование виртуальной таблицы СрезПоследних

Самый простой и эффективный способ получить актуальное состояние кадровых данных на конкретную дату — использование виртуальной таблицы СрезПоследних. Это позволяет избежать дублей, так как система автоматически выбирает последнюю запись для каждого сотрудника.

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

Фильтрация по виду события

В некоторых случаях достаточно отфильтровать данные по виду события. Давайте рассмотрим пример, где мы исключаем уволенных сотрудников, обращаясь к перечислению ВидыКадровыхСобытий:


ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
ГДЕ
    НЕ КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)

Важно помнить, что этот метод может быть не совсем точным, если сотрудник был уволен и снова принят, поэтому для серьезных отчетов лучше использовать механизмы СрезПоследних.

Использование типовых функций конфигурации (Рекомендуемый подход)

В 1С:ЗУП 3.1 реализована мощная подсистема кадрового учета. Вместо написания сложных SQL-запросов, разработчики 1С рекомендуют использовать встроенные функции общего модуля КадровыйУчет. Это гарантирует корректность данных, так как типовые функции учитывают совместительство, внутренние переводы и особенности учета физических лиц.

Рассмотрим пример использования функции КадровыйУчет.СотрудникиОрганизации:


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

Преимущества этого подхода очевидны:

  1. Вы получаете готовый набор данных, который прошел через все проверки бизнес-логики ЗУП.
  2. Код становится более читаемым, а контроль срока действия паспортов сотрудников — проще.
  3. При обновлении конфигурации ваша логика не сломается, так как вы используете публичный API системы.

Учет специфики периодов и уволенных сотрудников

Часто в отчетах требуется видеть сотрудников, которые были уволены в прошлом месяце, если по ним были начисления. В таком случае простой фильтр по статусу «Уволен» не подойдет. Необходимо анализировать период записи в регистре:


ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
ГДЕ
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = &Увольнение
    И КадроваяИсторияСотрудниковИнтервальный.ПериодЗаписи < &НачалоПрошлогоМесяца

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

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

← На главную