При переходе с редакции 2.5 на редакцию 3.1 конфигурации «Зарплата и управление персоналом» разработчики часто сталкиваются с изменением архитектуры кадрового учета. В ЗУП 2.5 для получения информации о работающих сотрудниках достаточно было написать простой запрос к регистру сведений РегистрСведений.РаботникиОрганизаций. В ЗУП 3.1 структура хранения кадровых данных существенно изменилась, и обращаться к регистрам напрямую не рекомендуется.
Рассмотрим, как правильно решать задачу выборки сотрудников по заданной организации и должности в ЗУП 3.1 с учетом современных стандартов разработки 1С.
Прежде чем писать код выборки, проанализируем ключевые особенности учета в ЗУП 3.1:
Должности и справочник ШтатноеРасписание. Если в базе включено ведение штатного расписания, сотрудник занимает конкретную позицию штатного расписания, с которой связана позиция должности. Это важно учитывать при составлении условий отбора.Сотрудники (например, при внутреннем совместительстве или повторном приеме на работу).Фирма «1С» настоятельно рекомендует использовать встроенный программный интерфейс для получения кадровых данных. Это гарантирует корректность работы кода даже после обновления конфигурации. Разберем основные методы общего модуля КадровыйУчет.
Для получения сведений о сотрудниках на определенную дату применим метод КадровыеДанныеСотрудников:
// Формируем массив сотрудников для получения данных
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);
// Указываем список необходимых кадровых полей
МассивПолей = Новый Массив;
МассивПолей.Добавить("Организация");
МассивПолей.Добавить("Должность");
МассивПолей.Добавить("Подразделение");
// Получаем таблицу значений с кадровыми данными
ТаблицаДанных = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудников, МассивПолей, ТекущаяДата());
Если задача заключается в том, чтобы сформировать запрос и соединить кадровые данные с другими таблицами (например, при выгрузке печатных форм), воспользуемся созданием временной таблицы кадровых данных:
// Создание временной таблицы с кадровыми сведениями в запросе
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
ОписательВТ = КадровыйУчет.ОписательВременнойТаблицыКадровыеДанныеСотрудников(
"ВТКадровыеДанные",
"Сотрудники",
"Организация, Должность, Подразделение"
);
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(
МенеджерВТ,
Истина,
ПараметрыПолученияДанных,
ОписательВТ
);
В случаях, когда использование программного API по каким-то причинам невозможно, проанализируем источники данных, доступные для прямой выборки запросом:
РегистрСведений.ТекущиеКадровыеДанные — содержательный плоский регистр, хранящий срез актуальных данных сотрудников на текущий момент. Идеально подходит для быстрой выборки текущих сотрудников без учета историчности.РегистрСведений.КадроваяИсторияСотрудниковИнтервальный — служебный регистр для выборки данных на произвольную дату с проверкой вхождения в интервал (ДатаНачала <= &ДатаИдеиИКонец >= &Дата).Если выборка сотрудника по должности выполняется для заполнения подписантов в печатных формах (например, «Начальник юридической службы», «Руководитель» или «Главный бухгалтер»), лучше не привязываться к жесткому наименованию должности в справочнике.
В ЗУП 3.1 предусмотрен специальный механизм ответственных лиц. Для подстановки подписантов в документы рекомендуется обращаться к регистру сведений ОтветственныеЛицаОрганизаций. Это позволяет корректно обрабатывать временно исполняющих обязанности и смену должностей без переписывания логики печатных форм.