← Назад к вопросам
Отчёт по распределению сотрудников по возрастным группам
2.2 Middle🔥 81 комментариев
#СКД и отчёты
Условие
Создайте отчёт с распределением сотрудников по возрастным группам.
Возрастные группы:
- До 25 лет
- 25-35 лет
- 35-45 лет
- 45-55 лет
- Старше 55 лет
Пример результата
| Возрастная группа | Количество | Процент |
|---|---|---|
| До 25 лет | 15 | 15% |
| 25-35 лет | 35 | 35% |
| 35-45 лет | 25 | 25% |
| 45-55 лет | 18 | 18% |
| Старше 55 лет | 7 | 7% |
| Итого | 100 | 100% |
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Отчёт по распределению сотрудников по возрастным группам
Данная задача требует создания отчёта в 1С, который группирует сотрудников по возрастным категориям и вычисляет количество и процент в каждой группе. Это типичный отчёт для анализа кадрового состава.
Подход к решению
Для реализации этого отчёта в 1С:Предприятии необходимо:
- Определить источник данных — справочник сотрудников с датой рождения
- Вычислить возраст — на основе текущей даты и даты рождения
- Создать распределение — группировка по возрастным интервалам
- Рассчитать проценты — соотношение каждой группы к общему количеству
Реализация на 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С:Предприятия.