Как в 1С:ЗУП 3.1 программно получить подразделение сотрудника и его позицию по штатному расписанию?

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

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

1. Рекомендуемый вариант: вызов стандартного API конфигурации

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

Рассмотрим вызов функции КадровыеДанныеСотрудников:


МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);

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

Если ТаблицаКадровыхДанных.Количество() > 0 Тогда
    СтрокаДанных = ТаблицаКадровыхДанных[0];
    ТекущееПодразделение = СтрокаДанных.Подразделение;
    ПозицияШР = СтрокаДанных.ДолжностьПоШтатномуРасписанию;
КонецЕсли;

Этот способ имеет несколько ключевых преимуществ:

  1. Учет временных кадровых событий: функция корректно обрабатывает даты начала и окончания временных переводов.
  2. Контроль прав доступа: первый параметр ТолькоРазрешенные обеспечивает соблюдение прав текущего пользователя (RLS).
  3. Универсальность: метод вернет корректные значения независимо от настроек ведения штатного расписания.

2. Получение данных через регистры кадровой истории

Разберем структуру регистров сведений, в которых фиксируются кадровые перемещения и позиции сотрудников:

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

Если штатное расписание ведется, то подразделение сотрудника дублируется в ресурсе Подразделение регистра, а также доступно через реквизит позиции штатного расписания: ДолжностьПоШтатномуРасписанию.Подразделение.

3. Особенности прямого запроса к интервальному регистру

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

Посмотрим на пример условия среза на дату в запросе к интервальному регистру:


ВЫБРАТЬ
    Регистр.Сотрудник КАК Сотрудник,
    Регистр.Подразделение КАК Подразделение,
    Регистр.ДолжностьПоШтатномуРасписанию КАК ПозицияШР,
    Регистр.ДолжностьПоШтатномуРасписанию.Подразделение КАК ПодразделениеИзШР
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК Регистр
ГДЕ
    Регистр.Сотрудник = &Сотрудник
    И &Период МЕЖДУ Регистр.ДатаНачала И Регистр.ДатаОкончания

Для сложных пакетных отчетов эффективнее использовать стандартные механизмы генерации временных таблиц, например процедуру КадровыйУчет.СоздатьВТСотрудникиОрганизации или общий модуль ЗарплатаКадрыОбщиеНаборыДанных, которые формируют временные таблицы кадровых данных с учетом всех тонкостей интервальных регистров.

4. Архитектурные ограничения: ведение штатного расписания

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

  1. Поле ДолжностьПоШтатномуРасписанию в регистрах кадровой истории и выборках будет незаполненным (содержать пустую ссылку или Неопределено).
  2. Обращение через разыменование ПозицияШР.Подразделение вернет пустое значение.
  3. Прямой ресурс Подразделение кадровой истории всегда содержит фактическое место работы сотрудника, независимо от активности штатного расписания.

Вывод: для получения подразделения сотрудника безопаснее и надежнее обращаться напрямую к полю Подразделение (через КадровыйУчет.КадровыеДанныеСотрудников или ресурс регистра), а реквизиты справочника ШтатноеРасписание использовать только тогда, когда требуются свойства самой позиции (тарифная сетка, утвержденная ставка и др.).

← На главную