Отчеты и Аналитика · 10 мин
Как в 1С сделать отчет по дате рождения
Как в 1С сделать отчет по дате рождения сотрудников или клиентов: варианты в типовых конфигурациях, СКД, консоль запросов, отбор по дню и месяцу, типичные ошибки.
Отчет по дате рождения — одна из самых частых задач в 1С: кадровикам нужны списки именинников месяца, руководителям — возрастная структура персонала, маркетологам — выборка клиентов для поздравительных рассылок. Способ решения зависит от конфигурации: в ЗУП дата рождения хранится в физлицах, в УТ и CRM — в карточках контрагентов или контактных лиц, а в самописных решениях — где угодно.
Хорошая новость в том, что во всех типовых конфигурациях задача решается без доработок — штатными отчетами, универсальным отчетом или консолью СКД. Программировать придется только в нестандартных случаях: например, когда нужен отбор по дню и месяцу рождения без учета года или автоматическая рассылка списка именинников.
Ниже разобраны рабочие варианты для типовых конфигураций, способ построить отчет через СКД с отбором по дню и месяцу, а также типичные ошибки, из-за которых отчет выдает пустой или неверный результат.
Где хранится дата рождения в разных конфигурациях
Прежде чем строить отчет, нужно понять, какой объект хранит дату рождения. От этого зависит, какой инструмент использовать и какой реквизит выводить.
В 1С:ЗУП дата рождения — это реквизит справочника «Физические лица», а не «Сотрудники». Один сотрудник может быть связан с одним физлицом, поэтому отчеты строятся через физлиц с присоединением данных о месте работы. В регистре сведений «Документы физических лиц» дата рождения дублируется как часть паспортных данных, но основной источник — именно справочник.
В 1С:Управление торговлей, ERP и Комплексной автоматизации дата рождения физического лица-покупателя хранится в карточке партнера или контрагента (если это физлицо), а даты рождения контактных лиц — в справочнике «Контактные лица партнеров». В Бухгалтерии дата рождения сотрудника также берется из справочника физических лиц.
Отчет по дате рождения в 1С:ЗУП штатными средствами
В ЗУП проще всего использовать типовые отчеты раздела «Кадры» — «Отчеты, справки» — «Штатные сотрудники» или «Личные данные сотрудников». Оба построены на СКД, поэтому их можно гибко настраивать без изменения конфигурации.
Откройте отчет, нажмите «Настройки» — «Расширенные» и на закладке «Отбор» добавьте поле «Дата рождения». Для списка сотрудников, родившихся в конкретном диапазоне дат (например, с 1 по 31 марта любого года), простого сравнения дат недостаточно — об этом ниже. Для выборки по возрасту добавьте вычисляемое поле или используйте отбор по диапазону дат рождения: например, «младше 30 лет» — это дата рождения позже расчетной даты.
На закладке «Поля» отметьте нужные колонки: ФИО, дата рождения, подразделение, должность. Сохраните настройку как вариант отчета через «Еще» — «Сохранить вариант отчета», чтобы не настраивать заново. Вариант можно сделать доступным всем пользователям или только себе.
Отбор по дню и месяцу рождения: список именинников
Главная сложность задачи — стандартное сравнение дат учитывает год. Условие «Дата рождения = 15.03.1985» найдет только тех, кто родился именно в этот день этого года, а не всех, у кого день рождения 15 марта. Для списка именинников месяца нужно сравнивать день и месяц отдельно.
В настройках СКД это решается вычисляемым полем. На закладке «Вычисляемые поля» добавьте поле, например «МесяцРождения», с выражением Месяц(ДатаРождения), и аналогично «ДеньРождения» с выражением День(ДатаРождения). Затем в отборе укажите: МесяцРождения = 3, ДеньРождения = 15. Такой отчет найдет всех именинников независимо от года рождения.
Для списка «именинники текущей недели» выражение сложнее: нужно сравнивать день и месяц с диапазоном дат. В запросе СКД это делается условием вида (Месяц(Физлица.ДатаРождения) = Месяц(&ТекущаяДата)) И (День(Физлица.ДатаРождения) МЕЖДУ &ДеньНачала И &ДеньКонца). Учтите, что на стыке месяцев простое сравнение дней ломается — для переходящих недель надежнее строить даты без года через функцию ДобавитьМесяц() или вычислять «дату рождения в текущем году».
Самый надежный прием для именинников — вычислить в запросе дату дня рождения в текущем году: ДатаВремя(Год(&ТекущаяДата), Месяц(ДатаРождения), День(ДатаРождения)). Правда, для родившихся 29 февраля в невисокосный год такое выражение даст ошибку или сдвиг — этих сотрудников обрабатывайте отдельным условием, перенося поздравление на 28 февраля или 1 марта.
Отчет через универсальный отчет и консоль запросов
В конфигурациях на БСП (УТ, ERP, КА, БП) есть «Универсальный отчет» в разделе «Отчеты». Выберите тип объекта «Справочник», объект «Физические лица» (или «Контактные лица партнеров»), добавьте поле «Дата рождения» в показатели и настройте отбор. Ограничение универсального отчета — он не умеет вычисляемые поля, поэтому отбор по дню и месяцу без года в нем недоступен.
Если универсального отчета не хватает, используйте консоль запросов или консоль СКД (внешние обработки, которые запускаются в режиме предприятия при наличии прав). В консоли запросов напишите запрос к справочнику с нужными условиями, отладьте его, а затем перенесите в схему компоновки — получите полноценный отчет с настройками, группировками и диаграммой.
Внешний отчет на СКД сохраняется как файл .erf и подключается через «Дополнительные отчеты и обработки» без изменения конфигурации. Это безопасный путь: типовая конфигурация остается на поддержке, обновления не слетают.
Сравнение способов построения отчета
Выбор инструмента зависит от сложности условия и доступных прав. Ниже — сопоставление основных вариантов.
Сравнение вариантов
Подходит для отбора по диапазону дат рождения и возрасту. Не умеет отбор по дню и месяцу без года без доработки настроек.
Решает задачу именинников по дню и месяцу. Требует базового понимания схемы компоновки.
Быстрый способ вытащить даты рождения из справочника. Ограничен: нет вычисляемых полей и сложных условий.
Полная гибкость, подключается без изменения конфигурации. Требует навыков разработки или готового шаблона.
| Задача | Подходящий инструмент | Нужны права разработчика |
|---|---|---|
| Список сотрудников с датами рождения | Типовой отчет ЗУП | Нет |
| Именинники конкретного месяца | СКД с вычисляемыми полями | Нет, если через настройки |
| Именинники на неделю вперед с рассылкой | Внешний отчет + регламентное задание | Да |
| Возрастная структура персонала | Типовой отчет с группировкой | Нет |
Проверка результата и типичные ошибки
После построения отчета сверьте количество строк с ожидаемым. Самый простой контроль: отчет по сотрудникам без отборов должен показать всех действующих, отчет по именинникам месяца — разумную долю от общего числа (примерно 1/12 при равномерном распределении).
Как проверить результат
Совпадает с количеством актуальных физлиц/сотрудников
Строк меньше — проверьте отборы и права доступа к данным
В списке есть сотрудник с заведомо известной датой рождения в этом месяце
Сотрудник отсутствует — проверьте выражение отбора и заполненность даты
Все даты заполнены и правдоподобны
Пустые значения или дата 01.01.0001 — данные не внесены в справочник
Автоматизация: рассылка именинников по расписанию
Если список именинников нужен регулярно, отчет можно рассылать автоматически. В конфигурациях на БСП вариант отчета настраивается на рассылку через «Рассылка отчетов»: укажите расписание (например, каждый понедельник в 9:00), получателей и формат (Excel, HTML в теле письма).
Чтобы рассылка всегда содержала актуальную неделю, в отборе используйте не фиксированные даты, а параметры, вычисляемые от текущей даты. В настройках СКД параметры можно связать выражениями, а в рассылке — задать формулу периода. Проверьте первую рассылку вручную: сравните содержимое письма с отчетом, сформированным вручную за тот же период.
Что важно запомнить
Отчет по дате рождения в типовых конфигурациях делается штатными средствами без доработок. Для списка именинников сравнивайте день и месяц через вычисляемые поля СКД, а не дату целиком. Перед использованием отчета проверьте заполненность дат рождения и исключите уволенных.
FAQ
Можно ли сделать отчет по дате рождения без прав администратора?
Да, если у вас есть доступ к отчетам раздела «Кадры» или к универсальному отчету. Настройка отборов и полей в типовых отчетах на СКД доступна обычному пользователю. Прав разработчика требуют только внешние отчеты и консоль запросов.
Почему отбор по дате рождения не находит именинников месяца?
Потому что сравнение дат учитывает год. Условие «Дата рождения = 15.03.1985» ищет конкретный день конкретного года. Добавьте вычисляемые поля с функциями Месяц() и День() и настраивайте отбор по ним.
Как вывести возраст сотрудника в отчете?
В ЗУП возраст часто доступен как готовое поле в кадровых отчетах. Если его нет, добавьте вычисляемое поле: разность годов между текущей датой и датой рождения с поправкой на то, прошел ли день рождения в текущем году. В языке запросов это делается через РазностьДат() с типом Год.
Даты рождения в отчете пустые, хотя в карточке сотрудника заполнены. В чем причина?
Скорее всего, отчет обращается не к тому объекту: в ЗУП дата рождения хранится у физического лица, а не у сотрудника. Также проверьте, что в настройках отчета выбрано поле «Дата рождения» именно из ветки физлица, а не одноименное поле другого объекта.
Как исключить уволенных сотрудников из списка именинников?
Добавьте в отбор условие по кадровому состоянию: в типовых отчетах ЗУП есть поля «Работает» или «Дата увольнения». Установите отбор «Дата увольнения не заполнена» либо используйте стандартный параметр периода отчета, который по умолчанию показывает только действующих сотрудников.
Можно ли выгрузить список именинников в Excel?
Да. Любой табличный отчет в 1С сохраняется через «Файл» — «Сохранить» в формате Excel (xlsx) или mxl. Для регулярной выгрузки удобнее настроить рассылку отчета — файл будет приходить на почту автоматически по расписанию.