Выборка дней рождения

26.06.19

Разработка - Запросы

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

Добрый день, на просторах интернета что-то не нашел простого и удобоваримого примера для выборки из справочника записей с днями рождения (ДР), которые подпадают под определенные условия, например, ДР, которые начинаются через неделю от тек.даты и продолжаются неделю. В результате пришлось написать самому... Может, кому пригодится, чтобы не тратить время. Использован релиз 8.3.13.1809.

Есть Справочник "Физические лица", есть реквизит "ДатаРождения"

       

Запрос = Новый Запрос;
        Запрос.Текст =
         "ВЫБРАТЬ
         |    ФизическиеЛица.Фамилия КАК Фамилия,
         |    ФизическиеЛица.Имя КАК Имя,
         |    ФизическиеЛица.Отчество КАК Отчество,
         |    ФизическиеЛица.ДатаРождения КАК ДатаРождения,
         |ИЗ
         |        Справочник.ФизическиеЛица КАК ФизическиеЛица
         |ГДЕ
         |    ФизическиеЛица.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
	 |	И ВЫБОР
	 |	    КОГДА МЕСЯЦ(ФизическиеЛица.ДатаРождения) - МЕСЯЦ(&ТекДата) >= 0
	 |	    ТОГДА ДЕНЬГОДА(ФизическиеЛица.ДатаРождения) - ДЕНЬГОДА(&ТекДата) < 14
	 |	    КОГДА МЕСЯЦ(&ТекДата) = 12
	 |	    ТОГДА ДЕНЬГОДА(ФизическиеЛица.ДатаРождения) + &ПослДень - ДЕНЬГОДА(&ТекДата) < 14
	 |	    КОНЕЦ
	 |	И ВЫБОР
	 |	    КОГДА МЕСЯЦ(ФизическиеЛица.ДатаРождения) - МЕСЯЦ(&ТекДата) >= 0
	 |	    ТОГДА ДЕНЬГОДА(ФизическиеЛица.ДатаРождения) - ДЕНЬГОДА(&ТекДата) >= 7
	 |	    КОГДА МЕСЯЦ(&ТекДата) = 12
	 |	    ТОГДА ДЕНЬГОДА(ФизическиеЛица.ДатаРождения) + &ПослДень - ДЕНЬГОДА(&ТекДата) >= 7
	 |	    КОНЕЦ";
	Запрос.УстановитьПараметр("ПослДень", ДеньГода(Дата(Год(ТекущаяДата()),12,31)));
        Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());   
        ДниРождения = Запрос.Выполнить().Выгрузить();

Как видно из текста, запрос учитывает високосный год и переход через новый год.

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

Не против, если кто-то предложит доработку для более универсального решения.

программирование выборка

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    192595    1064    405    

992

Инструментарий разработчика Запросы Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    2838    62    zup_dev    14    

55

Инструментарий разработчика Запросы Программист Платформа 1С v8.3 Управляемые формы 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    2592    7    XilDen    12    

23

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

2 стартмани

06.02.2025    2574    20    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    6556    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    14359    sergey279    18    

68

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    9069    XilDen    36    

94

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3722    PROSTO-1C    0    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AlekseiAdamov 189 26.06.19 21:45 Сейчас в теме
Попробуйте использовать функцию языка запросов ДЕНЬГОДА().
С ней текст запроса должен получиться намного проще.
Проверку на високосный год можно сделать там же, в запросе, если сравнивать день года для конца периода.
2. Fox-trot 164 26.06.19 23:49 Сейчас в теме
имхо выражение ФизическиеЛица.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
можно заменить на чтонить типа Год(ФизическиеЛица.ДатаРождения) > 1917
5. user847517 3 27.06.19 11:12 Сейчас в теме
(2) По собственному опыту знаю, что дату рождения нужно проверять на NULL и давать жесткий втык кадровикам, иначе будут качели со сдачей в ПФР. А не использовать "ГДЕ".
3. user654641_yaga_m 16 27.06.19 10:21 Сейчас в теме
Сегодня, благодаря мысли Lolipoka )), упростил...
4. user654641_yaga_m 16 27.06.19 10:22 Сейчас в теме
Выражение ФизическиеЛица.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) проверяет заполняемость реквизита...
6. Fox-trot 164 27.06.19 15:59 Сейчас в теме
(4)сравнение <> пожалуй самое тормознутое
я гарантирую это
Оставьте свое сообщение