Как из двух ТЗ оставить только разные значения

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

Регистр2:
Товар1
Товар2
Как получить ТОЛЬКО Товар3 и Товар4.
Найденные решения
3. alxarz 30 22.07.21 08:35 Сейчас в теме
(1) Соединением с последующей проверкой на null
можно в ТЗ выгрузить, добавить колонку со значениями 1 и Свернуть по товарам, просуммировав эту колонку, там где остались 1 - значит в одном экземпляре...
PhoenixAOD; Kolesonik; +2 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
5. nomad_irk 56 22.07.21 08:39 Сейчас в теме
(1)
1. Объединить таблицы, поместить в ВТ
2. Посчитать количество дублей в ВТ и вывести в результат только уникальные значения.


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

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

Выбрать 
   Поле1
Из
    Таблица2
;
Выбрать
    Поле1
ИЗ
    ВТ
СГРУППИРОВАТЬ ПО
    Поле1 
ИМЕЮЩИЕ Количество(Поле1) = 1
Показать
6. M_A_D 101 22.07.21 08:46 Сейчас в теме
(1) можно попробовать нечто подобное:
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	Номенклатура.Ссылка В ИЕРАРХИИ(&Ссылка)
;

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

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


Сделал на живом примере, Два отбора по товару, что бы смоделировать ситуацию с одинаковыми товарами и нет.
14. spacecraft 22.07.21 11:23 Сейчас в теме
(1) как-то так:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	Регистр1.Товар КАК Товар
ИЗ
	РегистрСведений.Регистр1 КАК Регистр1
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
		ПО (Регистр2.Товар = Регистр1.Товар)
ГДЕ
	Регистр2.Товар ЕСТЬ NULL

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

ВЫБРАТЬ РАЗЛИЧНЫЕ
	Регистр2.Товар
ИЗ
	РегистрСведений.Регистр2 КАК Регистр2
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр1 КАК Регистр1
		ПО (Регистр2.Товар = Регистр1.Товар)
ГДЕ
	Регистр1.Товар ЕСТЬ NULL
Показать
15. Sashares 19 22.07.21 11:28 Сейчас в теме
(14) Чуть проще
ВЫБРАТЬ 
    ЕСТЬNULL(Регистр1.Товар, Регистр2.Товар) КАК Товар
ИЗ
    РегистрСведений.Регистр1 КАК Регистр1
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
        ПО (Регистр2.Товар = Регистр1.Товар)
ГДЕ
    Регистр2.Товар ЕСТЬ NULL 
    ИЛИ Регистр1.Товар ЕСТЬ NULL
Показать
16. spacecraft 22.07.21 11:31 Сейчас в теме
(15) согласен, у вас чуть полная. Читайте рекомендации разработчиков 1С.
17. Sashares 19 22.07.21 11:34 Сейчас в теме
18. spacecraft 22.07.21 11:37 Сейчас в теме
(17) не обижайся. Сам не правильно прочитал.
А по делу:
Полное соединение не рекомендуется, особенно на постгри.
Условие в секции где использование ИЛИ так же не рекомендуется.

Да и товары могут дублироваться.
19. Sashares 19 22.07.21 11:49 Сейчас в теме
(18)По делу да, принято, минусы у данной реализации есть.
Ваш запрос в этом случае лучше.
2. Kolesonik 2 22.07.21 08:34 Сейчас в теме
Получить список из регистра2 потом запрос к регистру1 с условием не в списке
4. dandykry 6 22.07.21 08:39 Сейчас в теме
(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
3. alxarz 30 22.07.21 08:35 Сейчас в теме
(1) Соединением с последующей проверкой на null
можно в ТЗ выгрузить, добавить колонку со значениями 1 и Свернуть по товарам, просуммировав эту колонку, там где остались 1 - значит в одном экземпляре...
PhoenixAOD; Kolesonik; +2 Ответить
7. AnryMc 804 22.07.21 08:55 Сейчас в теме
Так
Прикрепленные файлы:
kot26rus; +1 Ответить
8. the1 893 22.07.21 10:11 Сейчас в теме
Выбрать Различные
Т1.Товар
ИЗ Регистр1 КАК Т1
Левое Соединение Регистр2 КАК Т2
По Т1.Товар = Т2.Товар
Где Т2.Товар Есть NULL
9. nomad_irk 56 22.07.21 10:16 Сейчас в теме
(8)Что будет, если в Регистр2 записей будет значительно больше, чем в Регистр1?
10. m@x 22.07.21 10:38 Сейчас в теме
(3) Спасибо!
решил так:
Выбираем по массивам UID документов

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВременнаяТаблица.Товар КАК Товар,
	ВременнаяТаблица.Товар1 КАК Товар1
ИЗ
	ВременнаяТаблица КАК ВременнаяТаблица
ГДЕ
	ВременнаяТаблица.Товар1 = 1
Показать
11. nomad_irk 56 22.07.21 10:50 Сейчас в теме
(10)Если, скажем, у вас в

Регистр1:

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

а Регистр2:

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

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

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

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

А как же товар3, Товар4, ......., Товар25?
12. m@x 22.07.21 11:06 Сейчас в теме
(11) Скажем так имелось ввиду немного не такое обозначение Товар.
Регистр1:

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

а Регистр2:

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

Так будет правильней. Путаница немного получилась, запрос подставил название полей "Товар1"
13. nomad_irk 56 22.07.21 11:08 Сейчас в теме
(12)Это не суть. Суть в том, что при наличии в Регистр2 товаров, которых вообще нет в Регистр1 они не попадут в результат, хотя под ваши условия "Как из двух ТЗ оставить только разные значения" вполне себе попадают.
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Казань
зарплата от 100 000 руб.
Полный день

Архитектор 1С
Пермь
зарплата до 200 000 руб.
Полный день

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Бизнес-аналитик 1С
Пермь
зарплата до 100 000 руб.
Полный день

Старший программист 1С
Хабаровск
зарплата от 80 000 руб. до 120 000 руб.
Полный день