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

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

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

Способ 1. Использование стандартного отчета «Штатные сотрудники»

Если нам необходимо получить список «по головам» (количество физических лиц), наиболее простым и надежным инструментом станет отчет «Штатные сотрудники». По умолчанию он выводит список сотрудников, но с помощью гибких настроек системы компоновки данных (СКД) мы можем легко превратить его в сводную таблицу. При необходимости можно воспользоваться отчетом штатное расписание Т-3 с выводом сотрудников по штатным позициям.

Разберем по шагам, как это сделать:

  1. Откроем отчет в разделе «Кадры» — «Кадровые отчеты» — «Штатные сотрудники».
  2. Перейдем в окно «Настройки», выберем вид «Расширенный».
  3. На вкладке «Структура» удалим стандартную группировку (Детальные записи) и добавим новую группировку по полю Должность.
  4. На вкладке «Поля и сортировки» снимем флажки со всех лишних полей и оставим только Сотрудник. Для поля Сотрудник в колонке «Роль» (если доступно) или через механизм агрегатных функций будет рассчитано количество.
  5. Если нужно увидеть общее число сотрудников по конкретной должности, в шапке отчета в поле «Подбор» можно выбрать интересующую должность, и программа покажет итоговое количество в подвале или шапке группировки.

Способ 2. Отчет «Заполненность штатного расписания»

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

Рассмотрим, как адаптировать этот отчет:

Способ 3. Универсальный отчет (для опытных пользователей)

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

  1. Перейдем в раздел «Администрирование» — «Обслуживание» — «Отчеты и обработки» — «Универсальный отчет».
  2. В поле «Тип объекта» выберем «Регистр сведений».
  3. В поле «Имя объекта» выберем «Кадровая история сотрудников».
  4. В поле «Таблица» выберем «Срез последних» на нужную дату.
  5. В настройках на вкладке «Группировка» добавим поле Должность.
  6. На вкладке «Показатели» выберем функцию Количество различных по полю Сотрудник.

Способ 4. Программный метод: Запрос к регистру сведений

Для разработчиков, которым необходимо получить эти данные внутри кода (например, для обработки или заполнения документа), наиболее очевидным кажется использование запроса. Однако здесь есть подводные камни. Посмотрим на пример запроса, который учитывает итоги по должностям:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	КадроваяИстория.Должность КАК Должность,
|	КадроваяИстория.Сотрудник КАК Сотрудник
|ИЗ
|	РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, ) КАК КадроваяИстория
|ГДЕ
|	КадроваяИстория.Сотрудник.В Архиве = ЛОЖЬ
|ИТОГИ
|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сотрудник)
|ПО
|	Должность";

Запрос.УстановитьПараметр("Период", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();

Важный нюанс: при обходе такого запроса в коде 1С, чтобы получить только количество сотрудников по каждой должности, не проваливаясь в детальные записи каждого человека, необходимо использовать правильный метод обхода группировок:


ВыборкаДолжность = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДолжность.Следующий() Цикл
    // Здесь мы получаем название должности и количество сотрудников
    НазваниеДолжности = ВыборкаДолжность.Должность;
    КоличествоЧеловек = ВыборкаДолжность.Сотрудник; // В агрегатном поле ИТОГОВ будет число
    Сообщить(НазваниеДолжности + ": " + КоличествоЧеловек);
КонецЦикла;

Способ 5. Использование функций общих модулей (Best Practice)

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

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

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

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

Резюме и критические моменты

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

← На главную