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

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Анализ проблемы: почему отчет может быть пустым?

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

  1. Различие в контурах учета: В УПП 1.3 существуют два параллельных кадровых контура. Регистр Работники предназначен для управленческого учета. Данные в него попадают только в том случае, если в документах приема/увольнения НЕ установлена галочка «Отражать в регламентированном учете». Если ваша организация ведет официальный учет, данные следует брать из регистра РаботникиОрганизаций.
  2. Ограничения виртуальных таблиц в соединениях: Использование СрезПоследних внутри сложного соединения — это ресурсоемкая операция, которая к тому же имеет ограничения по параметру даты. Если вы пытаетесь получить состояние сотрудника на «каждый момент времени» через простое соединение с виртуальной таблицей без параметров, вы получите данные только на текущую дату, что не подходит для анализа истории за прошлые периоды.
  3. Условия в соединениях: При использовании ЛЕВОЕ СОЕДИНЕНИЕ условия по периоду должны быть максимально точными, иначе данные могут либо дублироваться, либо отсекаться.

Шаг 1: Подготовка данных о приеме сотрудников

Для начала нам необходимо определить дату первого приема сотрудника на работу. Это поможет нам в дальнейшем правильно связать данные об увольнениях и текущем статусе. Создадим временную таблицу ТЗДатыПриема.

Проанализируем пример кода для сбора первичных данных:


ВЫБРАТЬ
    Работники.ФизЛицо,
    Работники.Должность,
    Работники.ЗанимаемыхСтавок,
    МИНИМУМ(Работники.Период) КАК ДатаПриема
ПОМЕСТИТЬ ТЗДатыПриема
ИЗ
    РегистрСведений.Работники КАК Работники
ГДЕ
    Работники.ЗанимаемыхСтавок > 0
СГРУППИРОВАТЬ ПО
    Работники.ФизЛицо,
    Работники.Должность,
    Работники.ЗанимаемыхСтавок;

Здесь мы выбираем минимальную дату периода для каждой связки «Физлицо — Должность», где количество ставок больше нуля. Это позволяет нам зафиксировать момент начала работы.

Шаг 2: Получение данных об увольнениях и работающих сотрудниках

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


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

Важный момент: Мы используем группировку по НАЧАЛОПЕРИОДА(Период, МЕСЯЦ), чтобы в дальнейшем схлопнуть данные до месячных показателей.

Шаг 3: Финальный расчет коэффициента текучести

На последнем этапе мы вычисляем итоговые суммы и само отношение (текучку) в процентах. Обратите внимание на обработку деления на ноль — это критически важно для стабильности отчета.


ВЫБРАТЬ
    Врем.ФизЛицо,
    Врем.Должность,
    Врем.ТекМесяц,
    СУММА(Врем.Уволенных) КАК Уволенных,
    СУММА(Врем.Работающих) КАК Работающих,
    ВЫБОР
        КОГДА СУММА(Врем.Работающих) = 0
            ТОГДА 0
        ИНАЧЕ СУММА(Врем.Уволенных) / СУММА(Врем.Работающих) * 100
    КОНЕЦ КАК Текучка
ИЗ
    Врем КАК Врем
СГРУППИРОВАТЬ ПО
    Врем.Должность,
    Врем.ФизЛицо,
    Врем.ТекМесяц

Методологические рекомендации и тонкости УПП 1.3

Рассмотрим дополнительные нюансы, которые помогут сделать ваш отчет профессиональнее:

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

2. Проблема внутренних совместителей
В УПП одно физическое лицо может иметь несколько карточек в справочнике Сотрудники (например, основное место работы и внутреннее совместительство). Если в запросе использовать только ФизЛицо, данные по «головам» могут удвоиться. Для точного расчета рекомендуется использовать связку с конкретным элементом справочника Сотрудники или проверять ТабельныйНомер.

3. Формула текучести
Классическая HR-методика подразумевает деление количества уволенных на среднесписочную численность за период. Запрос, представленный выше, рассчитывает соотношение уволенных к общему числу записей о работе в периоде. Для управленческого анализа этого часто достаточно, но для официальной статистики формулу следует уточнить, рассчитав среднее арифметическое численности на начало и конец месяца.

4. Использование СКД
Для построения подобных отчетов в 1С крайне рекомендуется использовать Систему компоновки данных (СКД). Она автоматически умеет работать с периодами и позволяет пользователю легко добавлять отборы по подразделениям или должностям без переписывания текста запроса.

Таким образом, успех при написании запроса в УПП 1.3 зависит от правильного выбора между управленческим (Работники) и регламентированным (РаботникиОрганизаций) регистрами, а также от корректной обработки временных срезов без прямого соединения виртуальных таблиц в теле основного запроса.

← На главную