Другое · 10 мин
Как в 1С вывести список с датами рождения
Как в 1С вывести список с датами рождения: универсальный отчет, СКД, запрос к справочнику сотрудников и физлиц. Пошаговые инструкции, код и типичные ошибки.
Задача вывести список сотрудников или контрагентов с датами рождения возникает регулярно: для поздравлений, отчетности в ПФР, проверки совершеннолетия или выгрузки данных кадровиком. В типовых конфигурациях 1С (ЗУП, Бухгалтерия, Управление торговлей) дата рождения хранится в справочнике «Физические лица», а не в справочнике «Сотрудники», поэтому простого отбора в форме списка недостаточно — нужен отчет или запрос.
Есть три рабочих способа получить такой список: универсальный отчет без программирования, настройка отчета на СКД (система компоновки данных) и программный запрос на встроенном языке. Выбор зависит от того, есть ли у вас права администратора, нужна ли разовая выгрузка или регулярный отчет для пользователей.
Ниже разобраны все три подхода с пошаговыми действиями, готовым текстом запроса и проверкой результата. Инструкции применимы к конфигурациям на управляемых формах: 1С:ЗУП 3, 1С:Бухгалтерия 3, 1С:УТ 11, 1С:ERP.
Где хранятся даты рождения в типовых конфигурациях
Перед построением отчета важно понять структуру данных. В 1С:ЗУП и других конфигурациях на базе БСП (библиотека стандартных подсистем) дата рождения — это реквизит справочника «Физические лица» с именем ДатаРождения. Справочник «Сотрудники» ссылается на физлицо через реквизит ФизическоеЛицо, поэтому для списка сотрудников потребуется обращение «через точку»: Сотрудники.ФизическоеЛицо.ДатаРождения.
Для контрагентов-физлиц в 1С:Бухгалтерии данные о дате рождения могут храниться иначе — в регистре сведений «Документы физических лиц» или в расширенных данных контрагента, в зависимости от настроек учета. Проверьте, где реально заполнены данные, прежде чем строить отчет.
Частая ситуация: отчет построен правильно, но поле даты рождения пустое. Это означает, что данные просто не внесены в карточки физлиц. Убедитесь, что кадровый учет ведется корректно и даты рождения заполнены хотя бы у части записей.
Способ 1. Универсальный отчет без программирования
Универсальный отчет — штатный инструмент, который позволяет построить таблицу по любому справочнику или регистру без доработок. В 1С:ЗУП 3 он находится в разделе «Отчеты, справки» → «Универсальный отчет». В 1С:Бухгалтерии 3 — в разделе «Руководителю» или «Отчеты» → «Универсальный отчет».
- 1Откройте «Отчеты» → «Универсальный отчет»
- 2В поле типа объекта выберите «Справочник», в поле объекта — «Физические лица»
- 3Нажмите «Настройки» и на закладке «Поля» добавьте «Наименование» (ФИО) и «Дата рождения»
- 4При необходимости на закладке «Отбор» задайте условие, например «Дата рождения заполнена»
- 5Нажмите «Сформировать» и проверьте результат
- 6Сохраните вариант отчета кнопкой «Сохранить настройки», чтобы не настраивать заново
Если нужен список именно сотрудников (а не всех физлиц, включая бывших и сторонних лиц), выберите справочник «Сотрудники» и добавьте поля «Наименование», «Подразделение», а дату рождения вытяните через связанное поле. В настройках полей универсального отчета доступны реквизиты по ссылкам — найдите «Физическое лицо. Дата рождения».
Результат можно вывести в табличный документ и сохранить в Excel через «Файл» → «Сохранить копию» для дальнейшей обработки — сортировки по месяцам, фильтрации юбиляров и т.д.
Способ 2. Отчет на СКД через консоль или расширение
Если универсального отчета недостаточно (нужны группировки по подразделениям, возрастные интервалы, вычисляемые поля), используйте систему компоновки данных. В файловой базе в режиме предприятия можно открыть консоль отчетов СКД, если она добавлена как дополнительная обработка, либо попросить разработчика создать внешний отчет.
Запрос для СКД выглядит так:
ВЫБРАТЬ
Сотрудники.Наименование КАК Сотрудник,
Сотрудники.ФизическоеЛицо.ДатаРождения КАК ДатаРождения,
Сотрудники.ТекущееПодразделение КАК Подразделение
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
НЕ Сотрудники.ВАрхиве
УПОРЯДОЧИТЬ ПО
ДатаРождения
Условие НЕ ВАрхиве отсекает уволенных и неиспользуемые записи — в ЗУП 3 архивные сотрудники помечаются именно так. Если в вашей конфигурации этого реквизита нет, замените отбор на актуальность через регистр сведений о кадровых данных.
В настройках СКД добавьте вычисляемое поле «Возраст» через функцию РАЗНОСТЬДАТ(ДатаРождения, &ТекущаяДата, "ГОД") в запросе или через выражение на языке СКД. Это удобно для отчетов по возрастной структуре персонала.
Сравнение способов
Подходит для разовой выгрузки пользователем без прав разработчика. Ограничение: слабая гибкость группировок и вычисляемых полей.
Подходит для регулярного использования и сложных выборок. Требует навыков настройки СКД или помощи разработчика.
Подходит для обработок, выгрузок в файл и интеграций. Требует прав на выполнение кода и знания языка запросов.
Способ 3. Программный запрос с выводом списка
Разработчику или администратору с доступом к конфигуратору проще всего получить список программно. Пример кода, который выводит список в табличный документ:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.Наименование КАК ФИО,
| ФизическиеЛица.ДатаРождения КАК ДатаРождения
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| НЕ ФизическиеЛица.ПометкаУдаления
| И ФизическиеЛица.ДатаРождения <> ДАТАВРЕМЯ(1,1,1)
|УПОРЯДОЧИТЬ ПО
| ФизическиеЛица.ДатаРождения";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщить(Строка(Результат.ФИО) + " — "
+ Формат(Результат.ДатаРождения, "ДЛФ=D"));
КонецЦикла;
Условие ДатаРождения <> ДАТАВРЕМЯ(1,1,1) исключает записи с пустой датой — без него в список попадут физлица с незаполненными данными, и вы получите лишние строки. Пометка удаления исключается отдельным условием, иначе в выборку попадут и удаленные дубли.
Для выгрузки в Excel оберните результат в табличный документ через ТабличныйДокумент.Вывести() и сохраните методом Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX).
Отбор по месяцу или дню рождения
Типовая практическая задача — список именинников текущего месяца для поздравлений. В запросе это решается функцией МЕСЯЦ():
ГДЕ
МЕСЯЦ(ФизическиеЛица.ДатаРождения) = &Месяц
Параметр &Месяц передается числом от 1 до 12. Аналогично работает отбор по дню: ДЕНЬ(ДатаРождения) = &День. Учтите, что при отборе по дате «сегодня» сравнивать нужно именно месяц и день, а не полную дату — год рождения у всех разный.
В универсальном отчете такой отбор настроить сложнее: функции месяца в отборе нет. Поэтому для именинников практичнее использовать СКД-отчет с параметром или доработанный вариант отчета «Дни рождения», который есть в некоторых типовых конфигурациях в разделе кадровых отчетов.
Проверка результата и контроль полноты данных
После формирования списка сверьте количество строк с ожидаемой численностью. Если сотрудников в штате 150, а в списке 140 — найдите записи с пустой датой рождения: добавьте в отчет группировку или отсортируйте по полю даты, пустые значения окажутся в начале.
Проверьте формат вывода даты: в табличном документе дата должна отображаться в привычном виде ДД.ММ.ГГГГ. Если вместо даты видны странные числа — при выгрузке в Excel столбец распознан как текст, измените формат ячеек.
Как проверить результат
Совпадает с числом актуальных сотрудников или физлиц
Строк заметно меньше или больше — проверьте отборы и архивность
У всех строк заполнено, формат ДД.ММ.ГГГГ
Пустые значения или дата 01.01.0001 — данные не внесены в карточки
В списке только сотрудники с нужным месяцем рождения
Попадают лишние — проверьте условие МЕСЯЦ() в запросе
Часто задаваемые вопросы
Почему в универсальном отчете нет поля «Дата рождения» у сотрудников?
Потому что поле хранится в связанном справочнике «Физические лица». В настройках полей отчета раскройте реквизит «Физическое лицо» и выберите вложенное поле «Дата рождения», либо стройте отчет сразу по справочнику физлиц.
Как вывести список сотрудников, у которых день рождения на этой неделе?
Используйте СКД-отчет с отбором по месяцу и дню или обработку с запросом, где вычисляется сочетание МЕСЯЦ() и ДЕНЬ() и сравнивается с диапазоном дат текущей недели. В универсальном отчете такой произвольный интервал не задать.
Можно ли вывести даты рождения контрагентов-физлиц в 1С:Бухгалтерии?
Да, но сначала проверьте, где заполнены данные: в карточке контрагента, в связанном справочнике физлиц или в регистре документов физлиц. Отчет строится по тому объекту, где данные реально внесены.
Как сохранить настройки отчета, чтобы не настраивать каждый раз?
В универсальном отчете и отчетах на СКД есть кнопка «Сохранить вариант» (или «Сохранить настройки»). Сохраненный вариант появится в списке отчетов и будет доступен вам или всем пользователям, в зависимости от прав.
Что делать, если даты рождения не заполнены у большинства сотрудников?
Отчет тут не поможет — нужно заполнить данные. Сформируйте список сотрудников с пустой датой, передайте кадровику для ввода данных из паспортов, после чего отчет покажет полную картину. Массовый ввод возможен через обработку группового изменения реквизитов.
Можно ли автоматически рассылать список именинников по расписанию?
Да, если отчет создан на СКД: настройте рассылку отчетов в разделе «Администрирование» → «Рассылка отчетов», укажите вариант отчета, расписание и получателей. Отчет будет приходить на почту автоматически.
Что важно запомнить
Дата рождения хранится в справочнике «Физические лица». Для разового списка используйте универсальный отчет, для регулярных и сложных выборок — СКД или запрос с функциями МЕСЯЦ() и ДЕНЬ(). Проверяйте заполненность данных и отсекайте помеченные на удаление записи.