Товарищи подскажите пожалуйста, пол дня мучаюсь.
Как одним запросом в два регистра получить только разные значения.
регистр1:
Товар1
Товар2
Товар3
Товар4

Регистр2:
Товар1
Товар2
Как получить ТОЛЬКО Товар3 и Товар4.
---
Соединением с последующей проверкой на null
можно в ТЗ выгрузить, добавить колонку со значениями 1 и Свернуть по товарам, просуммировав эту колонку, там где остались 1 - значит в одном экземпляре...
---
1. Объединить таблицы, поместить в ВТ
2. Посчитать количество дублей в ВТ и вывести в результат только уникальные значения.

```1c
    Выбрать
    Поле1
    ПОМЕСТИТЬ ВТ
    Из
    Таблица1

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

    Выбрать
    Поле1
    Из
    Таблица2
    ;
    Выбрать
    Поле1
    ИЗ
    ВТ
    СГРУППИРОВАТЬ ПО
    Поле1
    ИМЕЮЩИЕ Количество(Поле1) = 1
```
---
можно попробовать нечто подобное:

```1c
    ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ВременнаяТаблица
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ(&Ссылка)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ВременнаяТаблица1
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ(&Ссылка1)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЫБОР
    КОГДА ВременнаяТаблица.Ссылка ЕСТЬ NULL
    ТОГДА ВременнаяТаблица1.Ссылка
    ИНАЧЕ ВЫБОР
    КОГДА ВременнаяТаблица1.Ссылка ЕСТЬ NULL
    ТОГДА ВременнаяТаблица.Ссылка
    КОНЕЦ
    КОНЕЦ КАК Поле1
    ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица
    ПОЛНОЕ СОЕДИНЕНИЕ ВременнаяТаблица1 КАК ВременнаяТаблица1
    ПО (ВременнаяТаблица.Ссылка = ВременнаяТаблица1.Ссылка)
    ГДЕ
    ВЫБОР
    КОГДА ВременнаяТаблица.Ссылка ЕСТЬ NULL
    ТОГДА ВременнаяТаблица1.Ссылка
    ИНАЧЕ ВЫБОР
    КОГДА ВременнаяТаблица1.Ссылка ЕСТЬ NULL
    ТОГДА ВременнаяТаблица.Ссылка
    КОНЕЦ
    КОНЕЦ ЕСТЬ НЕ NULL
```

Сделал на живом примере, Два отбора по товару, что бы смоделировать ситуацию с одинаковыми товарами и нет.
---
как-то так:

```1c
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Регистр1.Товар КАК Товар
    ИЗ
    РегистрСведений.Регистр1 КАК Регистр1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
    ПО (Регистр2.Товар = Регистр1.Товар)
    ГДЕ
    Регистр2.Товар ЕСТЬ NULL

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

    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Регистр2.Товар
    ИЗ
    РегистрСведений.Регистр2 КАК Регистр2
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр1 КАК Регистр1
    ПО (Регистр2.Товар = Регистр1.Товар)
    ГДЕ
    Регистр1.Товар ЕСТЬ NULL
```
---
Чуть проще

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

Да и товары могут дублироваться.
---
По делу да, принято, минусы у данной реализации есть.
Ваш запрос в этом случае лучше.
---
Получить список из регистра2 потом запрос к регистру1 с условием не в списке
---
Так или масса других, более оптимальных способов, как например с соединениями

ВЫБРАТЬ
 "Товар1" КАК товар
ПОМЕСТИТЬ ВТ_Р1

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

ВЫБРАТЬ
 "Товар2"

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

ВЫБРАТЬ
 "Товар3"

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

ВЫБРАТЬ
 "Товар4"

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

ВЫБРАТЬ
 "Товар5"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 "Товар1" КАК товар
ПОМЕСТИТЬ ВТ_Р2

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

ВЫБРАТЬ
 "Товар2"

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

ВЫБРАТЬ
 "Товар3"

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

ВЫБРАТЬ
 "Товар10"

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

ВЫБРАТЬ
 "Товар11"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВЫБОР
  КОГДА ВТ_Р1.товар ЕСТЬ NULL
   ТОГДА ВТ_Р2.товар
  КОГДА ВТ_Р2.товар ЕСТЬ NULL
   ТОГДА ВТ_Р1.товар
 КОНЕЦ КАК Товар
ИЗ
 ВТ_Р1 КАК ВТ_Р1
  ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Р2 КАК ВТ_Р2
  ПО ВТ_Р1.товар = ВТ_Р2.товар

 ГДЕ ВЫБОР
  КОГДА ВТ_Р1.товар ЕСТЬ NULL
   ТОГДА ВТ_Р2.товар
  КОГДА ВТ_Р2.товар ЕСТЬ NULL
   ТОГДА ВТ_Р1.товар
 КОНЕЦ IS NOT Null
---
Соединением с последующей проверкой на null
можно в ТЗ выгрузить, добавить колонку со значениями 1 и Свернуть по товарам, просуммировав эту колонку, там где остались 1 - значит в одном экземпляре...
---
Так
---
```1c
    Выбрать Различные
    Т1.Товар
    ИЗ Регистр1 КАК Т1
    Левое Соединение Регистр2 КАК Т2
    По Т1.Товар = Т2.Товар
    Где Т2.Товар Есть NULL
```
---
Что будет, если в Регистр2 записей будет значительно больше, чем в Регистр1?
---
Спасибо!
решил так:
Выбираем по массивам UID документов

```1c
    ВЫБРАТЬ
    Регистр1.Товар КАК Товар,
    ЕСТЬNULL(Регистр2.Товар, 1) КАК Товар1
    ПОМЕСТИТЬ ВременнаяТаблица
    ИЗ
    РегистрСведений.Регистр1 КАК Регистр1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
    ПО (Регистр2.Товар = Регистр1.Товар)
    ГДЕ
    Регистр1.UID В (&МассивUID)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВременнаяТаблица.Товар КАК Товар,
    ВременнаяТаблица.Товар1 КАК Товар1
    ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица
    ГДЕ
    ВременнаяТаблица.Товар1 = 1
```
---
Если, скажем, у вас в

Регистр1:

Товар1
Товар2

а Регистр2:

Товар1
Товар2
Товар3
Товар4
Товар5
.....
Товар 25

в результате соединения таблиц получится:

Товар1, Товар1
товар2, Товар2

и так как вы следующим запросом отбираете все, что Товар1 = 1, результат у вас получится пустым

А как же товар3, Товар4, ......., Товар25?
---
Скажем так имелось ввиду немного не такое обозначение Товар.
Регистр1:

ТоварА
ТоварБ

а Регистр2:

ТоварА
ТоварБ
ТоварВ
ТоварГ

Так будет правильней. Путаница немного получилась, запрос подставил название полей "Товар1"
---
Это не суть. Суть в том, что при наличии в Регистр2 товаров, которых вообще нет в Регистр1 они не попадут в результат, хотя под ваши условия "Как из двух ТЗ оставить только разные значения" вполне себе попадают.