Как в отчете СКД вывести количество сотрудников в разрезе возрастных групп и месяцев рождения?

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

При создании аналитических отчетов часто возникает задача представить данные в виде двумерной матрицы или «шахматки». Например, когда необходимо подсчитать количество сотрудников и распределить их по строкам (возрастные интервалы) и колонкам (месяцы года). Реализовать такую задачу в системе компоновки данных (СКД) можно без написания программного кода в модулях, используя только встроенные инструменты конструктора запросов и настройки самой компоновки.

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

Шаг 1. Подготовка данных в запросе

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

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


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Сотрудник,
    МЕСЯЦ(Сотрудники.ДатаРождения) КАК НомерМесяца,
    РАЗНОСТЬДАТ(Сотрудники.ДатаРождения, &ТекущаяДата, ГОД) - 
        (ВЫБОР 
            КОГДА ДОБАВИТЬКДАТЕ(Сотрудники.ДатаРождения, ГОД, РАЗНОСТЬДАТ(Сотрудники.ДатаРождения, &ТекущаяДата, ГОД)) > &ТекущаяДата 
            ТОГДА 1 
            ИНАЧЕ 0 
        КОНЕЦ) КАК Возраст
ПОМЕСТИТЬ ВТ_Данные
ИЗ
    Справочник.Сотрудники КАК Сотрудники
ГДЕ
    НЕ Сотрудники.ПометкаУдаления
;

Затем, используя конструкцию ВЫБОР КОГДА, мы определим строковые представления для возрастных групп. Это и будут наши будущие строки отчета.


ВЫБРАТЬ
    ВТ_Данные.Сотрудник,
    ВТ_Данные.НомерМесяца,
    ВЫБОР
        КОГДА ВТ_Данные.Возраст <= 20 ТОГДА "До 20 лет"
        КОГДА ВТ_Данные.Возраст > 20 И ВТ_Данные.Возраст <= 30 ТОГДА "От 21 до 30 лет"
        КОГДА ВТ_Данные.Возраст > 30 И ВТ_Данные.Возраст <= 40 ТОГДА "От 31 до 40 лет"
        ИНАЧЕ "Старше 40 лет"
    КОНЕЦ КАК ВозрастнаяГруппа
ИЗ
    ВТ_Данные КАК ВТ_Данные

Шаг 2. Настройка ресурсов СКД

Для того чтобы система поняла, что именно нужно выводить на пересечении строк и колонок, необходимо настроить вкладку «Ресурсы». Если мы просто выберем поле в настройках, система не поймет, как агрегировать данные.

Рассмотрим порядок действий:

  1. Переходим на закладку «Ресурсы» в конструкторе СКД.
  2. Переносим поле Сотрудник в список ресурсов.
  3. В колонке «Выражение» указываем функцию Количество(Сотрудник) или Количество(Различные Сотрудник).

Именно это поле-ресурс будет заполнять «пустые ячейки» на пересечении месяца и возраста цифрами — количеством найденных записей.

Шаг 3. Создание структуры отчета «Таблица»

Теперь перейдем к самому важному — настройке визуального представления. Проанализируем вкладку «Настройки». Вместо привычного «Детальные записи» или простой «Группировки», нам нужно создать объект типа «Таблица».

Выполним следующие шаги:

  1. Нажимаем правой кнопкой мыши на корень отчета в дереве настроек и выбираем «Новая таблица».
  2. В секцию «Строки» добавляем группировку по полю ВозрастнаяГруппа.
  3. В секцию «Колонки» добавляем группировку по полю НомерМесяца.
  4. На закладке «Выбранные поля» (внизу, при выделенном корневом элементе настроек или самой таблице) добавляем наш ресурс Сотрудник (который отобразится как количество).

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

Шаг 4. Улучшение визуализации и сортировки

Если мы оставим отчет в таком виде, вместо названий месяцев (Январь, Февраль...) мы увидим числа (1, 2...). Посмотрим, как сделать отчет более презентабельным.

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

Формат(ДобавитьКДате(ДатаВремя(1,1,1), "Месяц", НомерМесяца - 1), "ДФ=MMMM")

Проблема сортировки:
Если выводить названия месяцев как текст, система отсортирует их по алфавиту (Апрель, Август, Декабрь...). Чтобы сохранить хронологический порядок, разберем настройку упорядочивания:

  1. Перейдем на закладку «Наборы данных».
  2. Найдем поле, отвечающее за название месяца.
  3. В колонке «Поле выражения упорядочивания» выберем НомерМесяца.

Таким образом, пользователи будут видеть названия месяцев, но СКД будет сортировать их по их порядковому номеру.

Шаг 5. Дополнение периодов

Бывает ситуация, когда в определенном месяце нет ни одного именинника. В этом случае СКД по умолчанию просто скроет эту колонку, и наша «шахматка» будет выглядеть неполной (например, после марта сразу пойдет май).

Чтобы отчет всегда содержал 12 колонок, проанализируем настройки группировки колонок:

  1. Выделяем группировку НомерМесяца в настройках.
  2. В нижней части настроек переходим на закладку «Дополнительные настройки».
  3. Находим параметр «Тип дополнения» и устанавливаем значение Месяц.
  4. Указываем «Начало периода» и «Конец периода» (начало и конец любого года, чтобы охватить все 12 месяцев).

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

← На главную