Как получить кадровые данные сотрудников в ЗУП 3.1
Содержание
Кадровые данные сотрудника в 1С ЗУП 3.1 — подразделение, должность, график работы, вид занятости, дата приёма — хранятся в регистре сведений «Кадровая история сотрудников». Посмотреть их можно в карточке сотрудника и кадровых отчётах, а получить программно — запросом, срезом последних на нужную дату.
Ниже — три сценария под разные задачи. Бухгалтеру или кадровику хватит карточки и типового отчёта. Разработчику под свой отчёт или обработку понадобится запрос к регистру: для одного человека, для списка через временные таблицы и на разные даты.
Что относят к кадровым данным сотрудника
Кадровые данные — это то, что меняется приказами по личному составу, а не в справочнике физлица. Их набор в ЗУП 3.1:
- 🏢 Подразделение — где числится сотрудник на дату.
- 💼 Должность — занимаемая по штатному расписанию.
- 📅 Дата приёма и вид кадрового события (приём, перемещение, увольнение).
- ⏰ График работы — плановый график из справочника графиков.
- 👤 Вид занятости — основное место, внутреннее или внешнее совместительство.
ФИО, ИНН, СНИЛС, паспорт, адрес — это данные физического лица, а не кадровые. Они лежат в справочнике «Физические лица» и не зависят от даты. У одного физлица может быть несколько сотрудников (основное место + совместительство), поэтому кадровые данные всегда привязаны к сотруднику, а не к физлицу.
Ключевое отличие кадровых данных — они периодические. На 1 января у человека одна должность, после перемещения в марте — другая. Поэтому любой запрос к ним всегда идёт «на дату».
Где посмотреть кадровые данные сотрудника
Три быстрых способа без программирования.
- Карточка сотрудника. Раздел
Кадры → Сотрудники, открыть карточку. Ссылки «Принять на работу», «Кадровый перевод», «Уволить» показывают текущий статус и историю. - Печатная форма Т-2. В карточке сотрудника — кнопка
Печать → Личная карточка Т-2. Собирает и кадровые, и личные данные в один документ. - Кадровые отчёты. Раздел
Кадры → Кадровые отчёты. Здесь и «Личные данные сотрудников», и «Штатные сотрудники», и списки по подразделениям.
Если нужного набора полей в готовых отчётах нет — собираем свой отчёт.
Отчёт с нужными данными сотрудников: как сформировать
Самый гибкий инструмент без доработки конфигурации — универсальный отчёт по регистру кадровой истории.
- Откройте
Отчёты → Универсальный отчёт(в разделе «Администрирование» или «Зарплата», зависит от прав). - В поле «Тип объекта» выберите Регистр сведений , в «Имя объекта» — Кадровая история сотрудников, таблица — Срез последних.
- Кнопка
Настройки → Расширенный. На вкладке «Параметры» задайте дату среза. - На вкладке «Поля и сортировки» добавьте Сотрудник, Подразделение, Должность, График работы.
- На вкладке «Отборы» при желании ограничьте организацией или подразделением.
- Сформируйте. Настройку сохраните через
Ещё → Сохранить вариант, чтобы не собирать заново.
Универсальный отчёт по срезу последних покажет данные на одну дату. Чтобы увидеть историю перемещений за период — стройте отчёт по основной таблице регистра (без «Среза последних») с отбором по периоду.
Как получить кадровые данные сотрудников запросом
Основной источник — регистр сведений КадроваяИсторияСотрудников. Он периодический, поэтому берём виртуальную таблицу СрезПоследних с параметром даты.
Имя регистра и его реквизитов может немного отличаться между релизами ЗУП 3.1. Перед вставкой в свой код сверьте точные имена в конфигураторе: Регистры сведений → Кадровая история…. Ниже — типовая схема, а не гарантированный дословный синтаксис вашего релиза.
Получение кадровых данных для одного сотрудника
Простейший случай — данные одного человека на конкретную дату:
ВЫБРАТЬ
КадроваяИстория.Сотрудник КАК Сотрудник,
КадроваяИстория.Подразделение КАК Подразделение,
КадроваяИстория.Должность КАК Должность,
КадроваяИстория.ГрафикРаботы КАК ГрафикРаботы,
КадроваяИстория.ВидЗанятости КАК ВидЗанятости
ИЗ
РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
&Дата,
Сотрудник = &Сотрудник) КАК КадроваяИстория
Параметры &Дата и &Сотрудник устанавливаются перед выполнением. Результат — одна строка на дату среза.
Получение кадровых данных в таблицу значений
Чтобы вернуть результат в код как таблицу значений — обычная выгрузка результата запроса:
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
ТаблицаКадровыхДанных = Запрос.Выполнить().Выгрузить();
Дальше с ТаблицаКадровыхДанных работаете как с обычной таблицей значений: обход, отбор, заполнение реквизитов документа.
Получение для списка сотрудников через временные таблицы
Для списка людей не гоняйте запрос в цикле — это медленно. Загрузите список во временную таблицу и один раз соедините её со срезом последних:
ВЫБРАТЬ
СписокСотрудников.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТ_Сотрудники
ИЗ
&СписокСотрудников КАК СписокСотрудников
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Сотрудники.Сотрудник КАК Сотрудник,
КадроваяИстория.Подразделение КАК Подразделение,
КадроваяИстория.Должность КАК Должность
ИЗ
ВТ_Сотрудники КАК ВТ_Сотрудники
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
&Дата,
Сотрудник В (ВЫБРАТЬ Сотрудник ИЗ ВТ_Сотрудники)) КАК КадроваяИстория
ПО ВТ_Сотрудники.Сотрудник = КадроваяИстория.Сотрудник
ЛЕВОЕ СОЕДИНЕНИЕ важно: сотрудники без кадровой записи на дату (например, ещё не принятые) не выпадут из списка — просто получат пустые поля.
Получение кадровых данных на разные даты
Задача сложнее: для каждого сотрудника — своя дата (скажем, дата документа). СрезПоследних умеет отбирать по условию, но одна дата на всю таблицу.
Решение — поместить во временную таблицу пары «сотрудник + дата», а затем соединить с полной таблицей регистра по условию Период <= Дата и взять максимальный период на каждого:
- Шаг 1 — ВТ с колонками Сотрудник и Дата.
- Шаг 2 — соединить с
РегистрСведений.КадроваяИсторияСотрудниковпоСотрудникиПериод <= Дата. - Шаг 3 — сгруппировать и взять
МАКСИМУМ(Период), затем ещё раз соединить, чтобы вытащить значения на этот период.
Так вы получаете «срез последних» индивидуально для каждой строки — то, что штатная виртуальная таблица на список дат не отдаёт.
Получение через механизм представлений и БСП
Часть данных лежит не в кадровой истории:
- Личные данные (ФИО, дата рождения) — справочник
Физические лица, реквизитСотрудник.Физлицо. - Контактная информация (телефон, адрес, email) — подсистема БСП «Контактная информация», получается через её типовые методы, а не прямым запросом к таблице.
Механизм представлений (ПРЕДСТАВЛЕНИЕ(...), ПРЕДСТАВЛЕНИЕССЫЛКИ(...)) в запросе удобен, когда данные идут в отчёт или на печать: он подставляет читаемое наименование справочника вместо ссылки, без дополнительного соединения.
Типичные ошибки при получении кадровых данных
Форумы по ЗУП полны одинаковых граблей. Разберём частые.
Перед любой доработкой конфигурации или обработкой, меняющей данные, сделайте резервную копию базы. Запрос на чтение безопасен, но обработка «на лету» с записью — уже риск.
Если не помогло: альтернативные пути
Не собирается запрос или не хватает прав в конфигураторе? Есть обходные варианты.
- Универсальный отчёт (см. выше) — 90% задач «выгрузить кадровые данные списком» закрывает без единой строки кода.
- Дополнительные отчёты в режиме
Администрирование → Печатные формы, отчёты и обработки— подключаются как внешний файл без снятия конфигурации с поддержки. - Выгрузка в Excel из любого сформированного отчёта:
Ещё → Сохранить как. Дальше — сводные таблицы. - Нет доступа к конфигуратору на рабочей базе — тренируйтесь на копии базы, там же проверяйте текст запроса через консоль запросов.
Частые вопросы
В каком регистре хранятся кадровые данные сотрудников в ЗУП 3.1?
Чем кадровые данные отличаются от личных?
Как получить данные сразу по списку сотрудников?
Почему запрос возвращает пустоту по принятому сотруднику?
&Дата и статус документа приёма.