Как лучше получить список работающих сотрудников в 1С:ЗУП 8?

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

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

Использование функции КадровыйУчет.СотрудникиОрганизации

Наиболее простым и распространенным способом является обращение к функции общего модуля КадровыйУчет. Рассмотрим подробнее, как работает функция СотрудникиОрганизации. Она позволяет получить таблицу значений с данными сотрудников, отфильтрованными по заданным критериям.

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


ПараметрыПостроения = КадровыйУчет.ПараметрыПостроенияТаблицыСотрудниковОрганизации();
ПараметрыПостроения.Период = ТекущаяДата();
ПараметрыПостроения.Организация = Объект.Организация;
ПараметрыПостроения.ПоказыватьУволенных = Ложь;

ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПостроения);

В данном примере мы указываем ДатаАктуальности, которая определяет момент времени, на который проверяется состояние сотрудника. Установка флага ПоказыватьУволенных в значение Ложь автоматически отсекает тех, кто уже прекратил трудовые отношения с организацией.

Оптимизация через временные таблицы в запросе

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

Этот метод позволяет сформировать временную таблицу (ВТ) непосредственно внутри менеджера временных таблиц вашего запроса. Рассмотрим, как это реализовать:

  1. Подготавливаем массив или таблицу-источник со ссылками на сотрудников.
  2. Создаем менеджер временных таблиц.
  3. Вызываем процедуру общего модуля, которая наполнит менеджер данными.

Пример программного кода для реализации этого подхода:


Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

// Допустим, у нас уже есть список сотрудников во временной таблице "ВТ_Список"
// Теперь дополним её кадровыми данными
КадровыеДанные = "ФИО,Подразделение,Должность,ДатаПриема";
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(МенеджерВТ, Истина, КадровыеДанные);

Запрос.Текст = "ВЫБРАТЬ * ИЗ ВТКадровыеДанныеСотрудников КАК КадровыеДанные";
Результат = Запрос.Выполнить();

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

Тонкая настройка фильтрации: ГПХ и Совместительство

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

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

Учет фактического состояния: отпуска и отсутствие

Иногда под термином «работающие» подразумеваются те, кто фактически присутствует на рабочем месте. Разберем ситуацию: сотрудник юридически не уволен, но находится в длительном отпуске по уходу за ребенком или в отпуске без сохранения оплаты. В типовых функциях фильтр ПоказыватьУволенных = Ложь все равно вернет такого сотрудника.

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


ГДЕ Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)
И Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ОтпускПоУходуЗаРебенком)

Использование инструментов отладки

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

Важный совет: всегда старайтесь использовать функции из модуля ЗарплатаКадрыСоставСтандартныеПодсистемы, если ваша задача интегрирована с логикой БСП. Это обеспечит стабильность кода при обновлениях конфигурации, так как программный интерфейс этих модулей более стабилен, чем прямые запросы к регистрам кадровой истории.

← На главную