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


Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот