Как в 1С:ЗУП 3.1 рассчитать и вывести средний возраст сотрудников?

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

Вопрос расчета демографических показателей, таких как возраст сотрудников, является стандартной задачей для HR-аналитики и кадрового учета. В конфигурации 1С:Зарплата и управление персоналом 3.1 (ЗУП) существуют как встроенные возможности для получения этих данных, так и гибкие инструменты настройки через Систему компоновки данных (СКД). Разберем по шагам, как решить эту задачу: от простого использования типовых отчетов до создания сложного внешнего отчета с точным расчетом. Для получения показателей без самостоятельной настройки параметров можно использовать сводный отчет по стажу и возрасту сотрудников.

Вариант 1: Использование типовых отчетов конфигурации

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

Рассмотрим использование отчета "Личные данные сотрудников" или "Штатные сотрудники". Для вывода возраста выполним следующие действия:

  1. Откроем отчет (раздел "Кадры" — "Кадровые отчеты").
  2. Перейдем в меню "Настройки", затем выберем вид "Расширенный".
  3. На закладке "Поля и сортировки" проверим наличие доступного поля Возраст. В современных редакциях ЗУП 3.1 это поле часто уже доступно в группе "Личные данные".
  4. Если готового поля нет, нажмем "Изменить вариант" (через меню "Еще" в шапке отчета).
  5. В дереве доступных полей найдем Физическое лицо, раскроем его и поищем реквизит Возраст. Если он найден, просто перетащим его в правую колонку "Поля".

Этот способ самый простой, так как он использует предопределенные механизмы программы для расчета лет на текущую дату.

Вариант 2: Создание пользовательского поля в СКД

Если нам нужно не просто вывести возраст, а произвести с ним математические операции (например, посчитать среднее значение), проанализируем механизм Пользовательских полей. Это позволит нам превратить дату рождения в целое число лет прямо в интерфейсе пользователя.

Разберем алгоритм настройки:

  1. В окне настроек отчета перейдем на закладку "Пользовательские поля".
  2. Нажмем "Добавить" и выберем "Новое поле-выражение".
  3. В поле "Заголовок" укажем "Возраст (целых лет)".
  4. В поле "Выражение детальных записей" пропишем формулу. Рассмотрим самый простой вариант через функцию РазностьДат:

РазностьДат(ДатаРождения, &Период, "Год")

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

Целое((РазностьДат(ДатаРождения, &Период, "День") / 365.25))

Здесь мы вычисляем разницу в днях и делим на 365.25 (учитывая високосные годы), после чего берем целую часть. Это дает гораздо более точный результат для кадрового учета.

Вариант 3: Расчет среднего возраста по компании

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

Проанализируем ситуацию: нам нужно среднее арифметическое. В настройках отчета (через "Изменить вариант") на закладке "Поля" выберем наше созданное поле. В колонке "Роль" или в настройках агрегатных функций (если вы создаете внешний отчет в конфигураторе) необходимо указать функцию Среднее.

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

Вариант 4: Программный подход (для разработчика)

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

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


// Определим дату, на которую считаем возраст
ДатаРасчета = ТекущаяДата();
// Получим количество лет
Возраст = ЗарплатаКадрыОбщий.ВозрастФизическогоЛица(ФизЛицо.ДатаРождения, ДатаРасчета);

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

ЗарплатаКадрыОбщий.ВозрастФизическогоЛица(ДатаРождения, &Период)

Не забудьте на закладке "Ресурсы" добавить это поле и выбрать функцию Среднее(Возраст), чтобы в итогах выводился средний показатель.

Учет специфики: декретницы и уволенные

При формировании отчета для руководства важно выяснить причину расхождений в цифрах. Часто возникает вопрос: включать ли сотрудников в отпуске по уходу за ребенком или тех, кто находится в длительных отпусках? Рассмотрим, как настроить фильтрацию:

  1. Найдем в доступных полях реквизит Состояние или Статус.
  2. В настройках отбора добавим условие: Состояние НЕ РАВНО Отпуск по уходу за ребенком (если их нужно исключить).
  3. Для исключения уволенных убедимся, что отчет строится на дату, и в него попадают только работающие сотрудники (обычно это заложено в параметры типовых отчетов ЗУП).

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

← На главную