Запрос из трех объедененных таблиц

1. user1004898 28 30.05.20 12:05 Сейчас в теме
Пишу запрос, цель которого вывести все позиции товаров, по которым есть штрихкод, позиции товаров по которым есть тип упаковки (без штрихкода), позиции товаров, по которым есть штрихкод для указанного типа упаковки, и все позиции товаров, по которым нет ни штрихкода, ни типа упаковок.

Написал такого типа. Выводит информацию правильно, но с дублирующими записями. Группировки делал, не помогло. "Различные" тоже не дает результата.

Подскажите по возможности, куда не то что-то пишу?

Запрос
ВЫБРАТЬ РАЗЛИЧНЫЕ
	спрНоменклатура.Ссылка КАК Номенкл,
	рсШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
	рсШтрихкодыНоменклатуры.Упаковка КАК Упаковка,
	УпаковкиЕдиницыИзмерения.Типоразмер КАК Типоразмер,
	спрНоменклатура.ОсновнойПоставщик КАК Поставщик,
	спрНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
	спрНоменклатура.ОсновнойСклад КАК СкладХранения
ИЗ
	Справочник.Номенклатура КАК спрНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК рсШтрихкодыНоменклатуры
		ПО спрНоменклатура.Ссылка = рсШтрихкодыНоменклатуры.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		ПО (рсШтрихкодыНоменклатуры.Упаковка = УпаковкиЕдиницыИзмерения.Ссылка)

СГРУППИРОВАТЬ ПО
	спрНоменклатура.Ссылка,
	рсШтрихкодыНоменклатуры.Штрихкод,
	УпаковкиЕдиницыИзмерения.Типоразмер,
	спрНоменклатура.ОсновнойПоставщик,
	спрНоменклатура.ВидНоменклатуры,
	спрНоменклатура.ОсновнойСклад,
	рсШтрихкодыНоменклатуры.Упаковка

ОБЪЕДИНИТЬ

ВЫБРАТЬ РАЗЛИЧНЫЕ
	спрНоменклатура.Ссылка,
	" ",
	ВЫБОР
		КОГДА УпаковкиЕдиницыИзмерения.Ссылка В
				(ВЫБРАТЬ
					рсШтрихкодыНоменклатуры.Упаковка КАК Упаковка
				ИЗ
					Справочник.Номенклатура КАК спрНоменклатура
						ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК рсШтрихкодыНоменклатуры
						ПО
							рсШтрихкодыНоменклатуры.Номенклатура = спрНоменклатура.Ссылка)
			ТОГДА "2"
		ИНАЧЕ УпаковкиЕдиницыИзмерения.Ссылка
	КОНЕЦ,
	УпаковкиЕдиницыИзмерения.Типоразмер,
	спрНоменклатура.ОсновнойПоставщик,
	спрНоменклатура.ВидНоменклатуры,
	спрНоменклатура.ОсновнойСклад
ИЗ
	Справочник.Номенклатура КАК спрНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		ПО спрНоменклатура.Ссылка = УпаковкиЕдиницыИзмерения.Владелец

ОБЪЕДИНИТЬ

ВЫБРАТЬ РАЗЛИЧНЫЕ
	спрНоменклатура.Ссылка,
	ШтрихкодыНоменклатуры.Штрихкод,
	ЕСТЬNULL(УпаковкиЕдиницыИзмерения.Ссылка, "1"),
	NULL,
	спрНоменклатура.ОсновнойПоставщик,
	спрНоменклатура.ВидНоменклатуры,
	спрНоменклатура.ОсновнойСклад
ИЗ
	Справочник.Номенклатура КАК спрНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
			ПО ШтрихкодыНоменклатуры.Упаковка = УпаковкиЕдиницыИзмерения.Ссылка
		ПО (ШтрихкодыНоменклатуры.Номенклатура = спрНоменклатура.Ссылка)

СГРУППИРОВАТЬ ПО
	ШтрихкодыНоменклатуры.Штрихкод,
	спрНоменклатура.Ссылка,
	ЕСТЬNULL(УпаковкиЕдиницыИзмерения.Ссылка, "1"),
	спрНоменклатура.ОсновнойПоставщик,
	спрНоменклатура.ВидНоменклатуры,
	спрНоменклатура.ОсновнойСклад

УПОРЯДОЧИТЬ ПО
	Номенкл
Показать


Тут же была мысль (пока ничего запасного не придумал) записи, в которых упаковка = 1 или 2 не выводить в отчет. (то есть отбором отсеиваю).

Все равно результат не тот.
В картинке зачеркнул записи, которые по логике не должны попасть были в отчет.
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 30.05.20 13:11 Сейчас в теме
Читаю ваше условие:
1) позиции товаров, по которым есть штрихкод,
2) позиции товаров, по которым есть тип упаковки (без штрихкода),
3) позиции товаров, по которым есть штрихкод для указанного типа упаковки
4) позиции товаров, по которым нет ни штрихкода, ни типа упаковок.

Вы понимаете, что данная группа условий охватывает всё множество номенклатуры? Или выхотите различать позиции по условиям, в соответствии с которым они попали в выборку? В таком случае будет задвоение, потому что множества, удовлетворяющие условиям 1 и 3, пересекаются.
4. user1004898 28 30.05.20 13:27 Сейчас в теме
(2)
понимаю, потому и задался вопросом, как можно вылечить запрос.
Строки в которых упаковки = 1 или 2 я скрывал отбром. (типа показывать все, где упаковка не равна 1 или 2.

Но повторяющиеся строки (где есть штрихкод и упаковка) я побороть не смог.

возможно и это не оптимальное решение, но пока ничего в мысли не идет.
5. Fox-trot 158 30.05.20 14:01 Сейчас в теме
рсШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
рсШтрихкодыНоменклатуры.Упаковка КАК Упаковка,
замени на
МАКСИМУМ(рсШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод,
МАКСИМУМ(рсШтрихкодыНоменклатуры.Упаковка) КАК Упаковка,
7. user1004898 28 31.05.20 19:47 Сейчас в теме
(5)
не дает результат увы
8. Fox-trot 158 31.05.20 21:19 Сейчас в теме
(7) тогда варинат (6) более экстрасенсный
6. SlavaKron 30.05.20 14:02 Сейчас в теме
(4) Тогда как-то так:
ВЫБРАТЬ
	СпрНоменклатура.Ссылка КАК Номенкл,
	ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
	УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
	УпаковкиЕдиницыИзмерения.Типоразмер КАК Типоразмер,
	СпрНоменклатура.ОсновнойПоставщик КАК Поставщик,
	СпрНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
	СпрНоменклатура.ОсновнойСклад КАК СкладХранения,
	ВЫБОР
		КОГДА УпаковкиЕдиницыИзмерения.Ссылка ЕСТЬ NULL
			ТОГДА 4
		КОГДА ШтрихкодыНоменклатуры.Штрихкод ЕСТЬ NULL
			ТОГДА 2
		КОГДА УпаковкиЕдиницыИзмерения.Ссылка = &УказанныйТипУпаковки
			ТОГДА 3
		ИНАЧЕ 1
	КОНЕЦ КАК НомерУсловия
ИЗ
	Справочник.Номенклатура КАК СпрНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		ПО СпрНоменклатура.Ссылка = УпаковкиЕдиницыИзмерения.Владелец
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		ПО (ШтрихкодыНоменклатуры.Номенклатура.Ссылка = ШтрихкодыНоменклатуры.Номенклатура)
			И (УпаковкиЕдиницыИзмерения.Ссылка = ШтрихкодыНоменклатуры.Упаковка)
Показать
3. Fox-trot 158 30.05.20 13:20 Сейчас в теме
точнее первые три группы пересекаются
Оставьте свое сообщение

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