Имя: Пароль:
1C
1С v8
Исключить записи одной таблицы из другой в запросе
0 Filkkore
 
01.07.23
22:49
1С БП 3
Платформа 8.3.20.2184

Задача такова:
Получить документы, которые НЕ интегрированы с 1С ДО. Соответственно мне нужно получить в запросе документы и исключить из их списка те, которые присутствуют в Регистре сведений "ОбъектыИнтегрированныеС1СДокументооборотом".

Я знаю два способа это сделать.



Первый:

ВЫБРАТЬ
   ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
ИЗ
   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
   НЕ ПоступлениеТоваровУслуг.Ссылка В
    (ВЫБРАТЬ
       ОбъектыИнтегрированныеС1СДокументооборотом.Объект
    ИЗ
       РегистрСведений.ОбъектыИнтегрированныеС1СДокументооборотом КАК ОбъектыИнтегрированныеС1СДокументооборотом)



Второй:

ВЫБРАТЬ
   ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
ИЗ
   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбъектыИнтегрированныеС1СДокументооборотом КАК ОбъектыИнтегрированныеС1СДокументооборотом
    ПО ПоступлениеТоваровУслуг.Ссылка = ОбъектыИнтегрированныеС1СДокументооборотом.Объект
ГДЕ
   ОбъектыИнтегрированныеС1СДокументооборотом.Объект ЕСТЬ NULL


Нет ли варианта, работающего быстрее, например Связью?
1 Garykom
 
01.07.23
23:22
(0) Левое соединение и ЕСТЬNULL
2 Filkkore
 
02.07.23
14:01
(1) То есть лучше этого ничего не предусмотрено? Я кстати тестил в консоли оба этих варианта на большом объеме данных, и вариант с левым соединением и ЕСТЬNULL отрабатывает в среднем чуть медленнее, так что из этих двух я бы скорее выбрал первый.
3 Filkkore
 
02.07.23
14:10
Хотя возможно с появлением большего количества записей в Регистре скорость работы первого упадет заметнее чем у второго...
4 Garykom
 
02.07.23
17:52
(3) С появлением большого кол-ва записей в РС ОбъектыИнтегрированныеС1СДокументооборотом есть риск что первый запрос начнет падать от нехватки памяти
Ну или тормозить от свопа