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