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

Итак, задача: имеются справочники "Контрагенты" и "КонтактныеЛица", имеется регистр сведений, по которому движется документ "РаботаМенеджера". Когда менеджер обзванивает контрагента, запись ведётся в регистр. Необходимо составить запрос, который выводил бы 20 контрагентов, кому менеджер ещё не звонил (нет записей в регистре) и запланированные звонки.

Текст моего запроса следующий:

```1c
    Запрос = Новый Запрос ("ВЫБРАТЬ
    | ВложенныйЗапрос.Контрагент КАК Контрагент,
    | ВложенныйЗапрос.КонтактноеЛицо КАК КонтактноеЛицо,
    | ВложенныйЗапрос.ТипЗвонкаСсылка КАК ТипЗвонка,
    | ВложенныйЗапрос.РезультатОбзвона КАК РезультатОбзвона,
    | ВложенныйЗапрос.ПричинаПереноса КАК ПричинаПереноса,
    | ВложенныйЗапрос.ДатаПереноса КАК ДатаПереноса
    |ИЗ
    | (ВЫБРАТЬ ПЕРВЫЕ 20
    | Контрагенты.Ссылка КАК Контрагент,
    | КонтактныеЛица.Ссылка КАК КонтактноеЛицо,
    | NULL КАК ТипЗвонкаСсылка,
    | NULL КАК РезультатОбзвона,
    | NULL КАК ПричинаПереноса,
    | NULL КАК ДатаПереноса
    | ИЗ
    | Справочник.Контрагенты КАК Контрагенты
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
    | ПО (КонтактныеЛица.Владелец = Контрагенты.Ссылка)
    | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеОЗвонках КАК ДанныеОЗвонках
    | ПО Контрагенты.Ссылка <> ДанныеОЗвонках.Контрагент.Ссылка ЕСТЬ NULL
    |
    | ОБЪЕДИНИТЬ ВСЕ
    |
    | ВЫБРАТЬ
    | ДанныеОЗвонках.Контрагент.Ссылка,
    | КонтактныеЛица.Ссылка,
    | ДанныеОЗвонках.ТипЗвонка.Ссылка,
    | ДанныеОЗвонках.РезультатОбзвона,
    | ДанныеОЗвонках.ПричинаПереноса,
    | ДанныеОЗвонках.ДатаПереноса
    | ИЗ
    | РегистрСведений.ДанныеОЗвонках КАК ДанныеОЗвонках
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
    | ПО ДанныеОЗвонках.Контрагент = КонтактныеЛица.Владелец
    | ГДЕ
    | ДанныеОЗвонках.ДатаПереноса >= &ТекущаяДата) КАК ВложенныйЗапрос");
```

Проблема: не понимаю, каким образом необходимо составить условие связи регистра сведений со справочником контрагенты, чтобы отсеять те записи, которые уже есть в регистре. Подскажите, пожалуйста, где моя ошибка?
---
```1c
    Выбрать
    блабла
    ИЗ
    Справочник
    ЛЕВОЕ Соединение Регистр
    По Регистр.СсылкаНаСправочник Есть NULL
```
---
А прокоментируйте хоть одну непонятку
Вот это что такое
```1c
    ПО Контрагенты.Ссылка <> ДанныеОЗвонках.Контрагент.Ссылка ЕСТЬ NULL
```
---
Ну прикольно конечно, только если у менеджера нет специального списка клиентов, то ему выпадут вообще все контрагенты, которых нет в регистре. Надо делать не объединить все, а левым соединением присоединять регистр к контрагенту и условие, что запись в регистре = null
---
Как могут выпасть все при ВЫБРАТЬ ПЕРВЫЕ 20 ??
---
ну как бы в этом и странность - по какому принципу эти первые 20 отбираются, или нужны просто любые 20 необзвоненых? постановка задачи странная - вот я о чем.
---
Постановка задачи в это части нормальная - ну просто выдаст 20, кому еще не звонили - нету тут никакой проблемы...
Проблема в другом, что при простой задаче накручен запутанный запрос ...
Вот (7) уже предложил суперупрощение... )))))
---
А вторая непонятка - "и запланированные звонки".
---
```1c
    Выбрать
    блабла
    ИЗ
    Справочник
    ЛЕВОЕ Соединение Регистр
    По Регистр.СсылкаНаСправочник Есть NULL
```
---
А вообще запрос очень сумбурный....
---
Прошу прощения, давайте внесу ясность. Условие задачи подробно таково:

1) Организовать вывод 20 контрагентов из справочника "Контрагенты", не попавших в обзвон (т.е. тех, для кого нет соответствующих записей в регистре сведений).

2) Организовать вывод запланированных менеджером звонков (т.е. те контрагенты, с кем ещё не подписан договор).

На эту часть вопроса ответил.

Касательно этой строчки: ПО Контрагенты.Ссылка <> ДанныеОЗвонках.Контрагент.Ссылка ЕСТЬ NULL - я просто перебирал различные варианты, этот не подошёл и сам по себе полная чушь, с этим я разобрался. :)
---
в (7) нормальное решение.
---
```1c
    Выбрать Первые 20
    Контрагенты.Ссылка КАК Контрагент
    Из
    Справочник.Контрагенты КАК Контрагенты
    Где
    НЕ Контрагенты.Ссылка В (запрос по регистру ДанныеОЗвонках)
```

Вот так получишь контрагентов, которым ещё не звонили. Прикрути контактное лицо и отбор по ответственному менеджеру и получится то, что надо.
---
Такой вариант уже использовал, сказали, что так делать в этой задаче нельзя, мол читы. :)
---
какие еще читы?:)
---
Я сам не понял, мне это решение понравилось больше, но сверху сказали, мол при большом количестве записей в регистре (например, двух миллионах), запрос будет выполняться ой, как долго. :)
---
делай как в (7) подсказали, у тебя ошибка в том, что ты делаешь "Объединить все", а надо - левое соединение с регистром
---
В итоге запрос принял следующий вид, всё работает корректно:

```1c
    Запрос = Новый Запрос ("ВЫБРАТЬ ПЕРВЫЕ 20
    | Контрагенты.Ссылка КАК Контрагент,
    | КонтактныеЛица.Ссылка КАК КонтактноеЛицо,
    | NULL КАК ТипЗвонка,
    | NULL КАК РезультатОбзвона,
    | NULL КАК ПричинаПереноса,
    | NULL КАК Дата
    |ИЗ
    | Справочник.Контрагенты КАК Контрагенты
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
    | ПО (КонтактныеЛица.Владелец = Контрагенты.Ссылка)
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеОЗвонках КАК ДанныеОЗвонках
    | ПО Контрагенты.Ссылка = ДанныеОЗвонках.Контрагент
    |ГДЕ
    | ДанныеОЗвонках.Контрагент ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | ДанныеОЗвонкахСрезПоследних.Контрагент,
    | КонтактныеЛица.Ссылка,
    | ДанныеОЗвонкахСрезПоследних.ТипЗвонка,
    | ДанныеОЗвонкахСрезПоследних.РезультатОбзвона,
    | ДанныеОЗвонкахСрезПоследних.ПричинаПереноса,
    | ДанныеОЗвонкахСрезПоследних.ДатаПереноса
    |ИЗ
    | РегистрСведений.ДанныеОЗвонках.СрезПоследних КАК ДанныеОЗвонкахСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
    | ПО ДанныеОЗвонкахСрезПоследних.Контрагент = КонтактныеЛица.Владелец
    |ГДЕ
    | ДанныеОЗвонкахСрезПоследних.ДатаПереноса >= &ТекущаяДата");
```
---
Текст запроса:

```1c
    Запрос = Новый Запрос ("ВЫБРАТЬ ПЕРВЫЕ 20
    | Контрагенты.Ссылка КАК Контрагент,
    | КонтактныеЛица.Ссылка КАК КонтактноеЛицо,
    | NULL КАК ТипЗвонка,
    | NULL КАК РезультатОбзвона,
    | NULL КАК ПричинаПереноса,
    | NULL КАК Дата
    |ИЗ
    | Справочник.КонтактныеЛица КАК КонтактныеЛица
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеОЗвонках КАК ДанныеОЗвонках
    | ПО (ДанныеОЗвонках.Контрагент ЕСТЬ NULL)
    | ПО КонтактныеЛица.Владелец = Контрагенты.Ссылка
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | ДанныеОЗвонкахСрезПоследних.Контрагент,
    | КонтактныеЛица.Ссылка,
    | ДанныеОЗвонкахСрезПоследних.ТипЗвонка,
    | ДанныеОЗвонкахСрезПоследних.РезультатОбзвона,
    | ДанныеОЗвонкахСрезПоследних.ПричинаПереноса,
    | ДанныеОЗвонкахСрезПоследних.ДатаПереноса
    |ИЗ
    | РегистрСведений.ДанныеОЗвонках.СрезПоследних КАК ДанныеОЗвонкахСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
    | ПО ДанныеОЗвонкахСрезПоследних.Контрагент = КонтактныеЛица.Владелец
    |ГДЕ
    | ДанныеОЗвонкахСрезПоследних.ДатаПереноса >= &ТекущаяДата");
```

Результат запроса на скринах. Всё равно в результат запроса попадают контрагенты, записанные в регистр сведений.
---
потому что "ОБЪЕДИНИТЬ ВСЕ" - вот и выводит