← Назад к вопросам

Отчёт по распределению сотрудников по возрастным группам

2.2 Middle🔥 81 комментариев
#СКД и отчёты

Условие

Создайте отчёт с распределением сотрудников по возрастным группам.

Возрастные группы:

  • До 25 лет
  • 25-35 лет
  • 35-45 лет
  • 45-55 лет
  • Старше 55 лет

Пример результата

Возрастная группаКоличествоПроцент
До 25 лет1515%
25-35 лет3535%
35-45 лет2525%
45-55 лет1818%
Старше 55 лет77%
Итого100100%

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отчёт по распределению сотрудников по возрастным группам

Данная задача требует создания отчёта в 1С, который группирует сотрудников по возрастным категориям и вычисляет количество и процент в каждой группе. Это типичный отчёт для анализа кадрового состава.

Подход к решению

Для реализации этого отчёта в 1С:Предприятии необходимо:

  1. Определить источник данных — справочник сотрудников с датой рождения
  2. Вычислить возраст — на основе текущей даты и даты рождения
  3. Создать распределение — группировка по возрастным интервалам
  4. Рассчитать проценты — соотношение каждой группы к общему количеству

Реализация на 1С:

ПРОЦЕДУРА УстановитьПараметры()
    Параметры.ДатаОтчёта = ТекущаяДата();
КОНЕЦПРОЦЕДУРЫ

ФУНКЦИЯ ПолучитьВозрастнуюГруппу(ДатаРождения)
    ДатаОтчёта = ТекущаяДата();
    Возраст = ГОД(ДатаОтчёта) - ГОД(ДатаРождения);
    
    Если МЕСЯЦ(ДатаРождения) > МЕСЯЦ(ДатаОтчёта) 
        ИЛИ (МЕСЯЦ(ДатаРождения) = МЕСЯЦ(ДатаОтчёта) И ДЕНЬ(ДатаРождения) > ДЕНЬ(ДатаОтчёта))
    Тогда
        Возраст = Возраст - 1;
    КонецЕсли;
    
    Если Возраст < 25 Тогда
        Возврат "До 25 лет";
    ИначеЕсли Возраст < 35 Тогда
        Возврат "25-35 лет";
    ИначеЕсли Возраст < 45 Тогда
        Возврат "35-45 лет";
    ИначеЕсли Возраст < 55 Тогда
        Возврат "45-55 лет";
    Иначе
        Возврат "Старше 55 лет";
    КонецЕсли;
КОНЕЦФУНКЦИИ

ФУНКЦИЯ СформироватьОтчет()
    РаспределениеПоГруппам = Новый Соответствие();
    
    РаспределениеПоГруппам.Вставить("До 25 лет", 0);
    РаспределениеПоГруппам.Вставить("25-35 лет", 0);
    РаспределениеПоГруппам.Вставить("35-45 лет", 0);
    РаспределениеПоГруппам.Вставить("45-55 лет", 0);
    РаспределениеПоГруппам.Вставить("Старше 55 лет", 0);
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    Сотрудники.Ссылка,
        |    Сотрудники.ДатаРождения
        |ИЗ
        |    Справочник.Сотрудники КАК Сотрудники
        |ГДЕ
        |    НЕ Сотрудники.ПометкаУдаления";
    
    Результат = Запрос.Выполнить().Выбрать();
    
    ОбщееКоличество = 0;
    
    Пока Результат.Следующий() Цикл
        ВозрастнаяГруппа = ПолучитьВозрастнуюГруппу(Результат.ДатаРождения);
        Количество = РаспределениеПоГруппам.Получить(ВозрастнаяГруппа);
        РаспределениеПоГруппам.Вставить(ВозрастнаяГруппа, Количество + 1);
        ОбщееКоличество = ОбщееКоличество + 1;
    КонецЦикла;
    
    ТаблицаРезультатов = Новый ТаблицаЗначений;
    ТаблицаРезультатов.Колонки.Добавить("ВозрастнаяГруппа");
    ТаблицаРезультатов.Колонки.Добавить("Количество");
    ТаблицаРезультатов.Колонки.Добавить("Процент");
    
    МассивГрупп = Новый Массив;
    МассивГрупп.Добавить("До 25 лет");
    МассивГрупп.Добавить("25-35 лет");
    МассивГрупп.Добавить("35-45 лет");
    МассивГрупп.Добавить("45-55 лет");
    МассивГрупп.Добавить("Старше 55 лет");
    
    Для каждого Группа Из МассивГрупп Цикл
        Количество = РаспределениеПоГруппам.Получить(Группа);
        Если Количество > 0 Тогда
            Процент = Цел(Количество * 100 / ОбщееКоличество);
            
            НоваяСтрока = ТаблицаРезультатов.Добавить();
            НоваяСтрока.ВозрастнаяГруппа = Группа;
            НоваяСтрока.Количество = Количество;
            НоваяСтрока.Процент = Процент + "%";
        КонецЕсли;
    КонецЦикла;
    
    НоваяСтрока = ТаблицаРезультатов.Добавить();
    НоваяСтрока.ВозрастнаяГруппа = "Итого";
    НоваяСтрока.Количество = ОбщееКоличество;
    НоваяСтрока.Процент = "100%";
    
    Возврат ТаблицаРезультатов;
КОНЕЦФУНКЦИИ

Ключевые моменты реализации:

  • Корректный расчёт возраста — учитываем, что день рождения может быть в будущем в этом году
  • Использование Соответствия — для быстрого доступа к счётчикам групп
  • Запрос с РАЗЛИЧНЫЕ — исключаем дублирующихся сотрудников
  • Процентное отношение — рассчитываем как целое число от 0 до 100
  • Массив для порядка групп — гарантируем правильный порядок вывода

Данный подход обеспечивает надёжное формирование отчёта с корректными расчётами и может быть встроен в обработку или встроенное отчётное средство 1С:Предприятия.

Отчёт по распределению сотрудников по возрастным группам | PrepBro