Каталог решений - Выборка дней рождения

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

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

В наличии

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

Категория:

Описание

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

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

       

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

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

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

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

has been added to your cart:
Оформление заказа