Здравствуйте! Задача следующая:
1) Есть некий массив дат.
2) Есть справочник, в табличной части которого хранятся все доступные периоды (ДатаНачала, датаКонца)

Необходимо записать запрос, который поймёт, входит ли даты в один из периодов, указанных в табличной части специального справочника.
---
```1c
    ВЫБРАТЬ
    ТЧ_Даты.ДатаНачала КАК ДатаНачала,
    ТЧ_Даты.ДатаОкончания КАК ДатаОкончания
    ПОМЕСТИТЬ ТабличнаяЧастьДаты
    ИЗ
    &ТЧ_Даты КАК ТЧ_Даты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МассивДат.Дата КАК Дата
    ПОМЕСТИТЬ МассивДат
    ИЗ
    &МассивДат КАК МассивДат
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЫБОР
    КОГДА МИНИМУМ(ВЫБОР
    КОГДА ТабличнаяЧастьДаты.ДатаНачала ЕСТЬ NULL
    ТОГДА 0
    ИНАЧЕ 1
    КОНЕЦ) = 0
    ТОГДА Ложь
    ИНАЧЕ Истина
    КОНЕЦ КАК ЕстьВхождение
    ИЗ
    МассивДат КАК МассивДат
    ЛЕВОЕ СОЕДИНЕНИЕ ТабличнаяЧастьДаты КАК ТабличнаяЧастьДаты
    ПО (МассивДат.Дата МЕЖДУ ТабличнаяЧастьДаты.ДатаНачала И ТабличнаяЧастьДаты.ДатаОкончания)
```
---
Ну как-то так:

```1c
    Выбрать
    Справочник.Ссылка
    Из Справочник.НашСправочник.ТабличнаяЧасть КАК Справочник
    ГДЕ Справочник.Ссылка = &ТабличнаяЧастьНужногоЭлемента
    И &ДатаДокумента МЕЖДУ Справочник.ДатаНачала И Справочник.датаКонца
```

Если результат запроса пустой, значит не входит, если не пустой, значит входит
---
Немного поменял условие.
1) Есть некий массив дат.
2) Есть справочник, в табличной части которого хранятся все доступные периоды (ДатаНачала, датаКонца)

Необходимо записать запрос, который поймёт, входит ли даты в один из периодов, указанных в табличной части специального справочника.
---
```1c
    ВЫБРАТЬ
    ТЧ_Даты.ДатаНачала КАК ДатаНачала,
    ТЧ_Даты.ДатаОкончания КАК ДатаОкончания
    ПОМЕСТИТЬ ТабличнаяЧастьДаты
    ИЗ
    &ТЧ_Даты КАК ТЧ_Даты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МассивДат.Дата КАК Дата
    ПОМЕСТИТЬ МассивДат
    ИЗ
    &МассивДат КАК МассивДат
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЫБОР
    КОГДА МИНИМУМ(ВЫБОР
    КОГДА ТабличнаяЧастьДаты.ДатаНачала ЕСТЬ NULL
    ТОГДА 0
    ИНАЧЕ 1
    КОНЕЦ) = 0
    ТОГДА Ложь
    ИНАЧЕ Истина
    КОНЕЦ КАК ЕстьВхождение
    ИЗ
    МассивДат КАК МассивДат
    ЛЕВОЕ СОЕДИНЕНИЕ ТабличнаяЧастьДаты КАК ТабличнаяЧастьДаты
    ПО (МассивДат.Дата МЕЖДУ ТабличнаяЧастьДаты.ДатаНачала И ТабличнаяЧастьДаты.ДатаОкончания)
```
---
Додумался сам, не дождавшись решения. Но ваш ответ был ближе всего к то у что мне было нужно
вот мой код:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗаявкаНаРасход.Сценарий КАК Сценарий,
    | ЗаявкаНаРасход.подразделение КАК подразделение,
    | ЗаявкаНаРасход.Период КАК Дата
    |ПОМЕСТИТЬ ВТДанныеДокумента
    |ИЗ
    | Документ.ЗаявкаНаРасход.ДанныеДок КАК ЗаявкаНаРасход
    |ГДЕ
    | ЗаявкаНаРасход.Ссылка = &Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | СценарииПериоды.ДатаНачала КАК ДатаНачала,
    | СценарииПериоды.ДатаОкончания КАК ДатаОкончания,
    | СценарииПериоды.Ссылка КАК Сценарий
    |ПОМЕСТИТЬ ВТПериоды
    |ИЗ
    | Справочник.Сценарии.Периоды КАК СценарииПериоды
    |ГДЕ
    | СценарииПериоды.Ссылка В
    | (ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ВТДанныеДокумента.Сценарий КАК Сценарий
    | ИЗ
    | ВТДанныеДокумента КАК ВТДанныеДокумента)
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | СУММА(ВЫБОР
    | КОГДА ВТДанныеДокумента.Дата МЕЖДУ ВТПериоды.ДатаНачала И ВТПериоды.ДатаОкончания
    | ТОГДА 1
    | ИНАЧЕ 0
    | КОНЕЦ) КАК ВхождениеВПериод,
    | ВТДанныеДокумента.Дата КАК Дата,
    | ВТДанныеДокумента.Сценарий КАК Сценарий
    |ПОМЕСТИТЬ ВТВхождениеВПериодДаты
    |ИЗ
    | ВТДанныеДокумента КАК ВТДанныеДокумента
    | ЛЕВОЕ СОЕДИНЕНИЕ ВТПериоды КАК ВТПериоды
    | ПО ВТДанныеДокумента.Сценарий = ВТПериоды.Сценарий
    |
    |СГРУППИРОВАТЬ ПО
    | ВТДанныеДокумента.Дата,
    | ВТДанныеДокумента.Сценарий
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТВхождениеВПериодДаты.Дата КАК Дата,
    | ВТВхождениеВПериодДаты.ВхождениеВПериод КАК ВхождениеВПериод,
    | ВТВхождениеВПериодДаты.Сценарий КАК Сценарий
    |ИЗ
    | ВТВхождениеВПериодДаты КАК ВТВхождениеВПериодДаты
    |ГДЕ
    | ВТВхождениеВПериодДаты.ВхождениеВПериод = 0";

    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    МассивРез=Запрос.ВыполнитьПакет();

    РезультатПроверкаДат = МассивРез[3];
    Если не РезультатПроверкаДат.Пустой() Тогда
    Отказ=истина;
    Сообщить("Дата одной из строк не входит в массив разрешенных периодов");
    КонецЕсли;
```
---
Денис, ниже запрос, адаптируйте под свою конфигурацию:

```1c
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    АвансовыйОтчет.Ссылка КАК Ссылка
    ИЗ
    Документ.АвансовыйОтчет КАК АвансовыйОтчет
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкаИнтервалов.ТабличнаяЧасть КАК НастройкаИнтерваловТабличнаяЧасть
    ПО (АвансовыйОтчет.Дата МЕЖДУ НастройкаИнтерваловТабличнаяЧасть.НачалоИнтервала И НастройкаИнтерваловТабличнаяЧасть.КонецИнтервала)
    ГДЕ
    НЕ НастройкаИнтерваловТабличнаяЧасть.Ссылка ЕСТЬ NULL
```
---
ВЫБРАТЬ РАЗЛИЧНЫЕ
АвансовыйОтчет.Ссылка КАК Ссылка
ИЗ
Документ.АвансовыйОтчет КАК АвансовыйОтчет
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкаИнтервалов.ТабличнаяЧасть КАК НастройкаИнтерваловТабличнаяЧасть
ПО (АвансовыйОтчет.Дата МЕЖДУ НастройкаИнтерваловТабличнаяЧасть.НачалоИнтервала И НастройкаИнтерваловТабличнаяЧасть.КонецИнтервала)
ГДЕ
НЕ НастройкаИнтерваловТабличнаяЧасть.Ссылка ЕСТЬ NULL
Хорошее решение, но не совсем оптимальное с точки зрения производительности
---
Хорошее решение, но не совсем оптимальное с точки зрения производительности

Откуда вам знать оптимальное это решение или нет, если вы вообще не знаете решения? А если знаете, то зачем тогда мозги людям парите?
---
Денис, возможно, надо видеть конфигурацию.
---
алгоритм

```1c
    Выбрать
    ПолеСвязи
    Период
    Поместить В ВсеПериоды
    ////////////////
    Выбрать
    ПолеСвязи
    Период
    ГДЕ ДатНач > ДатаИзМассива ИЛИ ДатКонца < ДатаИзМассива
    Поместить В ПериодыСОтбором
    /////////////////
    Выбрать
    Период
    Из ВсеПериоды ЛЕВОЕ СОЕДИЕНИЕ ПериодыСОтбором ПО ПолеСвязи
    ГДЕ ПериодыСОтбором.ПолеСвязи ЕСТЬ NULL
```

Ненулевой запрос даст даты которые находятся в каком либо периоде
массив самим подумать как загрузить в запрос
---
Сообщение было скрыто модератором.