Где в 1С:ЗУП 3.1 хранится информация о месте работы и кадровой истории сотрудника?

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

При работе с конфигурацией 1С:Зарплата и Управление Персоналом 3.1 разработчики часто сталкиваются с вопросом: из какого источника надежнее всего получить информацию о том, в каком подразделении и на какой должности числится сотрудник? В отличие от старых версий (например, ЗУП 2.5), где кадровая история была относительно линейной, архитектура ЗУП 3.1 значительно сложнее. Информация здесь распределена по нескольким регистрам, каждый из которых выполняет свою специфическую функцию.

В этой статье мы подробно разберем структуру хранения кадровых данных, выясним, почему прямые запросы к регистрам могут выдавать неверные результаты, и научимся использовать современные механизмы интервальных таблиц.

1. Основной регистр: Кадровая история сотрудников

Начнем с фундамента. Регистр сведений КадроваяИсторияСотрудников — это базовый периодический регистр, в который записываются данные из документов «Прием на работу», «Кадровый перевод» и «Увольнение». Рассмотрим его особенности:

Проанализируем ситуацию: если мы сделаем стандартный «Срез последних» к этому регистру, мы получим данные на конкретный момент времени. Однако в ЗУП 3.1 часто встречаются ситуации «вложенных» периодов (например, временный перевод внутри основного), которые классический срез последних обрабатывает не всегда корректно с точки зрения бизнес-логики программы.

2. Интервальные регистры — современный стандарт

Начиная с версии 3.1.13, фирма 1С перешла на использование интервальных регистров. Разберем подробнее механизм работы регистра КадроваяИсторияСотрудниковИнтервальный. Его главное отличие в том, что он хранит не просто записи «с даты», а четко очерченные интервалы «Дата начала — Дата окончания».

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

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

Если вы заметили, что данные в карточке сотрудника не совпадают с отчетами, рекомендуется проверить состояние этого регистра или запустить процедуру «Пересчет данных интервальных регистров» в разделе администрирования.

3. Где еще может «числиться» человек: состояния и занятость

Кадровая история отвечает на вопрос «Где числится сотрудник по штату?», но не всегда отвечает на вопрос «Где он находится фактически?». Посмотрим на дополнительные регистры:

Регистр «Данные состояний сотрудников»
Здесь фиксируется фактическое состояние: работает ли человек, находится ли он в отпуске, на больничном или в командировке. Для управленческих задач или построения отчетов типа Т-49 (расчетно-платежная ведомость) информация из этого регистра может быть критически важной.

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

Регистр «Условия договора ГПХ»
Для сотрудников, работающих по договорам гражданско-правового характера, записи в кадровой истории отсутствуют. Их «привязка» к подразделению и периоду работы фиксируется именно в этом регистре.

4. Проблема регистра «Текущие кадровые данные сотрудников»

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

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

5. Программный способ получения данных (через общий модуль)

Наиболее правильным и «безопасным» способом получения кадровых данных является использование функций общего модуля КадровыйУчет. Это позволяет избежать написания сложных запросов к 5-6 регистрам одновременно. Рассмотрим пример того, как можно получить данные сотрудников на определенную дату:


// Пример получения кадровых данных через API ЗУП 3.1
ПараметрыПериода = КадровыйУчет.ПараметрыПериода();
ПараметрыПериода.ДатаНачала = ТекущаяДата();
ПараметрыПериода.ДатаОкончания = ТекущаяДата();

ТаблицаСотрудников = Новый ТаблицаЗначений;
ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
// Заполняем ТаблицаСотрудников нужными ссылками...

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

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

6. Связь со штатным расписанием

Не забываем, что в организациях, где ведется история штатного расписания, фактическое место работы может быть жестко привязано к позиции. В этом случае в регистре КадроваяИсторияСотрудников может храниться ссылка на справочник ПозицииШтатногоРасписания.

Проанализируем цепочку связи:

  1. Сотрудник привязан к позиции штатного расписания в кадровой истории.
  2. Позиция штатного расписания содержит актуальное подразделение и должность.
  3. Если штатное расписание меняется «задним числом», подразделение сотрудника может измениться без создания нового документа «Кадровый перевод», если логика системы опирается на данные позиции.

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

← На главную