Как правильно посчитать количество сотрудников по должностям в 1С:ЗУП 2.5?

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

При разработке отчетов в конфигурации 1С:Зарплата и Управление Персоналом 2.5 часто возникает задача вывода статистики по штатной численности. Простой подсчет строк в запросе нередко приводит к ошибкам, особенно если в организации активно используются временные кадровые переводы. Давайте разберемся, как реализовать этот функционал правильно, учитывая архитектурные особенности системы.

Разбираемся с кадровыми перемещениями

Основная сложность при работе с регистром сведений РаботникиОрганизаций заключается в том, что он хранит информацию не только о текущем состоянии, но и о запланированных изменениях. Если сотрудник временно переведен на другую должность, система использует поля ПериодЗавершения, ДолжностьЗавершения и ПодразделениеОрганизацииЗавершения. Если ваш запрос не учитывает эти данные, статистика будет отображать неактуальную информацию.

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

Рассмотрим пример правильного запроса, который учитывает эти нюансы:


ВЫБРАТЬ
    ВЫБОР
        КОГДА РаботникиОрганизаций.ПериодЗавершения < &ДатаАктуальности
                И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА РаботникиОрганизаций.ДолжностьЗавершения
        ИНАЧЕ РаботникиОрганизаций.Должность
    КОНЕЦ КАК Должность,
    КОЛИЧЕСТВО(РаботникиОрганизаций.Сотрудник) КАК КоличествоСотрудников
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаАктуальности) КАК РаботникиОрганизаций
СГРУППИРОВАТЬ ПО
    ВЫБОР
        КОГДА РаботникиОрганизаций.ПериодЗавершения < &ДатаАктуальности
                И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА РаботникиОрганизаций.ДолжностьЗавершения
        ИНАЧЕ РаботникиОрганизаций.Должность
    КОНЕЦ

Проектируем архитектуру запроса

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

  1. Используйте пакетные запросы: Вместо сложной выборки в один заход, создайте временную таблицу (ВТ) в первом пакете. Поместите туда результат обработки кадровых данных. Во втором пакете вы сможете легко сгруппировать данные по должностям.
  2. Правильно соединяйте данные: Если вы присоединяете данные из других регистров (например, по зарплате), будьте осторожны с условиями в секции ГДЕ. Если вы поставите фильтр на показатель (например, ЗПРасход > 0) в секции ГДЕ, ЛЕВОЕ СОЕДИНЕНИЕ превратится во внутреннее, и вы потеряете всех сотрудников, у которых не было начислений. Перенесите это условие в секцию ПО соединения.
  3. Группировка: Не пытайтесь вывести количество сотрудников в строке с детальными данными о каждом человеке. Это логически неверно. Лучше выведите детальный список, а итоги по должностям выводите через механизм итогов или отдельным запросом.

Важные рекомендации при работе с регистрами

Проанализируем ситуацию с пользовательскими данными. Если вы используете самописные регистры накопления, обязательно убедитесь в следующем:

Использование вышеописанного подхода с конструкцией ВЫБОР обеспечит точность ваших отчетов. Вы сможете корректно выводить информацию вида «Инженеры — 2 чел.», «Менеджеры — 5 чел.» даже в условиях сложных кадровых переводов внутри предприятия. Не забывайте, что при использовании СКД многие из этих задач решаются еще проще — через настройки группировок, где можно задать вычисляемые поля для подсчета количества сотрудников без написания сложного кода в запросе.

← На главную