Доброго всем.
Нужен совет в таком вопросе. Например делаем выборку к справочнику "Соглашения", в выборку могут попасть как типовые(поле реквизита - партнер пустое) соглашения, так и индивидуальные(т.е. привязанные к партнеру), отбор производится по реквизиту, вид операции в справочнике Соглашения. Также могут отобраться только типовые соглашения, в виду отсутствия у партнера заключенных индивидуальных.

Получаем 2 варианта результата:
1)
Соглашение типовое 1
Соглашение типовое 2 и т.д.
Соглашение индивидуальное 1
Соглашение индивидуальное 2 и т.д.
2)
Соглашение типовое 1
Соглашение типовое 2 и т.д.

Вопрос такой, как в самом запросе, с применением каких условий, вывести в результат, в случае если есть и индивидуальные и типовые(вар 1), только индивидуальные, а если индивидуальных нет, то типовые автоматом сами выведутся.
Это конечно можно все обыграть уже обрабатывая сам результат выборки, выгрузить в таблицу и искать строки по условию, но хочется уже самим запросом сделать эту проверку и отфильтровать лишнее и получить готовый результат.

Я пытался так. Сделал два вложенных запроса и в запросе с индивидуальными добавил поле ЭтоИндивидульный и приравнивал его к 1, а в вложенном к типовым 0 и это все по итогу поместил эти оба запроса во временную таблицу ВТ
И потом пытался анализировать итог временной таблицы в запросе, через конструкцию ВЫБОР, ТОГДА, КОГДА и если итог ЭтоИндивидульный > 0 , тогда условие ВТ.ЭтоИндивидуальный = 1 ИНАЧЕ ВТ.ЭтоИндивидуальный = 0. Но выдает ошибку на подсчете Итога.
---
вчера чуть ошибся по памяти). вложенные запросы это было в первоначальной версии, потом модифицировал через выбор и обошелся без внутренних запросов

```1c
    "ВЫБРАТЬ
    | СпрСоглашенияСКлиентами.Ссылка КАК Соглашение,
    | СпрСоглашенияСКлиентами.ВидЦен КАК ВидЦены,
    | СпрСоглашенияСКлиентами.Склад КАК Склад,
    | СпрСоглашенияСКлиентами.Валюта КАК Валюта,
    | ВЫБОР
    | КОГДА СпрСоглашенияСКлиентами.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)
    | ТОГДА 0
    | ИНАЧЕ 1
    | КОНЕЦ КАК ИндивидуальноеСоглашение
    |ПОМЕСТИТЬ ВТ_Соглашения
    | ИЗ
    | Справочник.СоглашенияСКлиентами КАК СпрСоглашенияСКлиентами
    | ГДЕ
    | СпрСоглашенияСКлиентами.Организация = &Организация
    | И НЕ СпрСоглашенияСКлиентами.Ссылка.ПометкаУдаления
    | И ВЫБОР
    | КОГДА СпрСоглашенияСКлиентами.ДатаНачалаДействия <> &ПустаяДата
    | ТОГДА СпрСоглашенияСКлиентами.ДатаНачалаДействия <= &НачДата
    | ИНАЧЕ СпрСоглашенияСКлиентами.ДатаНачалаДействия = &ПустаяДата
    | КОНЕЦ
    | И ВЫБОР
    | КОГДА СпрСоглашенияСКлиентами.ДатаОкончанияДействия <> &ПустаяДата
    | ТОГДА СпрСоглашенияСКлиентами.ДатаОкончанияДействия >= &КонДата
    | ИНАЧЕ СпрСоглашенияСКлиентами.ДатаОкончанияДействия = &ПустаяДата
    | КОНЕЦ
    | И СпрСоглашенияСКлиентами.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСКлиентами.Действует)
    | И СпрСоглашенияСКлиентами.Партнер В (&МассивПартнеров)
    | И СпрСоглашенияСКлиентами.Контрагент В (&МассивКонтрагентов)
    | И СпрСоглашенияСКлиентами.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияРекламныхМатериалов)
    |;
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТ_Соглашения.Соглашение КАК Соглашение,
    | ВТ_Соглашения.ВидЦены КАК ВидЦены,
    | ВТ_Соглашения.Валюта КАК Валюта,
    | ВТ_Соглашения.Склад КАК Склад
    |ИЗ
    | ВТ_Соглашения КАК ВТ_Соглашения
    |ГДЕ
    | ВТ_Соглашения.ИндивидуальноеСоглашение В
    | (ВЫБРАТЬ
    | МАКСИМУМ(ВТ_Соглашения.ИндивидуальноеСоглашение)
    | ИЗ ВТ_Соглашения КАК ВТ_Соглашения
    | )
    |";
```
---
Не можешь решить, потому как задачу необходимо короче и понятнее для самого себя сформулировать.
Рисуй что на входе и что на выходе. Пока нарисуешь решение само собой придет. :-)
---
я написал потому , что испробовал то, что думал и не вышло. Единственное что напрашивается, это после выборки уже обрабатывать результат, а прямо в запросе сделать не получается и идеи не приходят
---
Вообще не понятно какая задача стоит.
---
все, решил проблему.
Возможные варианты выборки я приложил.
Нужно было реализовать запрос таким образом, что если есть в выборке индивидуальные соглашения, то вывести только их, а если нет, то вывести то что есть.
---
Возможные варианты выборки я приложил. Куда?
---
Получаем 2 варианта результата:
1)
Соглашение типовое 1
Соглашение типовое 2 и т.д.
Соглашение индивидуальное 1
Соглашение индивидуальное 2 и т.д.
2)
Соглашение типовое 1
Соглашение типовое 2 и т.д.
---
интересно как все-таки решили это запросом?
у меня получилось что-то вроде этого:

```1c
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Партнеры.Ссылка КАК Партнер
    ПОМЕСТИТЬ ВТ_Партнеры
    ИЗ
    Справочник.Партнеры КАК Партнеры
    ГДЕ
    Партнеры.Ссылка В(&СписокПартнеров)

    ИНДЕКСИРОВАТЬ ПО
    Партнер
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Партнеры.Партнер КАК Партнер,
    ИндивидуальныеСоглашения.Ссылка КАК Соглашение,
    НЕ ИндивидуальныеСоглашения.Типовое КАК ЭтоИндивидуальноеСоглашение
    ПОМЕСТИТЬ ВТ_СоглашенияПартнеров
    ИЗ
    ВТ_Партнеры КАК ВТ_Партнеры
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК ИндивидуальныеСоглашения
    ПО (ВТ_Партнеры.Партнер = ИндивидуальныеСоглашения.Партнер)

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ВТ_Партнеры.Партнер,
    ТиповыеСоглашения.Ссылка,
    НЕ ТиповыеСоглашения.Типовое
    ИЗ
    ВТ_Партнеры КАК ВТ_Партнеры
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК ТиповыеСоглашения
    ПО (ТиповыеСоглашения.Типовое)

    ИНДЕКСИРОВАТЬ ПО
    ЭтоИндивидуальноеСоглашение
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_СоглашенияПартнеров.Партнер КАК Партнер,
    МАКСИМУМ(ВТ_СоглашенияПартнеров.ЭтоИндивидуальноеСоглашение) КАК ЕстьИндивидуальноеСоглашение
    ПОМЕСТИТЬ ВТ_Сгруппированные
    ИЗ
    ВТ_СоглашенияПартнеров КАК ВТ_СоглашенияПартнеров

    СГРУППИРОВАТЬ ПО
    ВТ_СоглашенияПартнеров.Партнер

    ИНДЕКСИРОВАТЬ ПО
    ЕстьИндивидуальноеСоглашение
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Сгруппированные.Партнер КАК Партнер,
    ВТ_СоглашенияПартнеров.Соглашение КАК Соглашение
    ИЗ
    ВТ_СоглашенияПартнеров КАК ВТ_СоглашенияПартнеров
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Сгруппированные КАК ВТ_Сгруппированные
    ПО (ВТ_Сгруппированные.Партнер = ВТ_СоглашенияПартнеров.Партнер)
    И (ВТ_Сгруппированные.ЕстьИндивидуальноеСоглашение = ВТ_СоглашенияПартнеров.ЭтоИндивидуальноеСоглашение)
```
---
у меня другая реализация и кода меньше, но тоже через максимум) завтра выложу запрос. Так по памяти, сделал два вложенных запроса, в индивидуальных приравнял 1, в общих к 0 и объединил, потом закинул в таблицузначений в самом запросе и выбрал только те, которые соответствуют максимуму, т.е. если это 1, то выйдут только индивидуальные, а если их нет, то 0 будет максимумом и выйдут все что есть
---
вчера чуть ошибся по памяти). вложенные запросы это было в первоначальной версии, потом модифицировал через выбор и обошелся без внутренних запросов

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

ГДЕ (ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ ИНД) = 0 // Не проверял

Если условие не отрабатывает тогда перед вторым запросом
ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Кво ПОМЕСТИТЬ _ГДЕ ИЗ ИНД
Выбрать только типовые с условием ГДЕ поместить во временную таблицу ТИП
ЛЕВОЕ СОЕДИНЕНИЕ _ГДЕ ПО ИСТИНА
ГДЕ _ГДЕ.Кво = 0
---
приложил свой вариант решения, самое простое и оптимальное