Кросс запрос, как выйти?

1. user645801_yyyuuu123q 02.02.21 03:30 Сейчас в теме
Всем привет друзья.
Хочу получить данные из справочника и его Тч и документа.
Финальная версия через вложенный запрос. Делал и через временные таблицы.
ход действий.
1. Получаю даные из справочника и его тч.
2. Получаю данные из документа
3. Обьеденяю по ссылки
4. Получпаю что строка запроса умножается на каждую строку другова запроса. По итогу получаю декартово произведение.
Как выйти из этого? Можно конечно сгруппировать но хотелось бы для начала понять почему так?

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ДанныеПоНакладным.ПолныйНомерЖдНакладной,
	ДанныеПоНакладным.АдресПолучателя,
	ДанныеПоНакладным.Налив,
	ДанныеПоПаспортам.Ответственый,
	ДанныеПоПаспортам.ДатаИВремя,
	ДанныеПоПаспортам.Отправка,
	ДанныеПоПаспортам.Статус,
	ДанныеПоПаспортам.СсылкаДок
ИЗ
	(ВЫБРАТЬ
		ЖДНакладная.ПрефиксНомераЖДНакладной + ЖДНакладная.НомерЖДНакладной КАК ПолныйНомерЖдНакладной,
		ЖДНакладная.Получатель.АдресПаспортаКачества КАК АдресПолучателя,
		ЖДНакладная.Налив КАК Налив
	ИЗ
		Документ.ЖДНакладная КАК ЖДНакладная
	ГДЕ
		(ЖДНакладная.Статус = &Статус0
				ИЛИ ЖДНакладная.Статус = &Статус1
				ИЛИ ЖДНакладная.Статус = &Статус2)
		И ЖДНакладная.Получатель.ОтправкаПоПочте = ИСТИНА
		И ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив) КАК ДанныеПоНакладным
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПаспортаКачества.Ответственый КАК Ответственый,
			ПаспортаКачества.ДатаИВремя КАК ДатаИВремя,
			ПаспортаКачестваТАбличнаяЧастьПК.Отправка КАК Отправка,
			ПаспортаКачестваТАбличнаяЧастьПК.Статус КАК Статус,
			ПаспортаКачества.СсылкаДок КАК СсылкаДок
		ИЗ
			Справочник.ПаспортаКачества.ТАбличнаяЧастьПК КАК ПаспортаКачестваТАбличнаяЧастьПК
				ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПаспортаКачества КАК ПаспортаКачества
				ПО ПаспортаКачестваТАбличнаяЧастьПК.Ссылка = ПаспортаКачества.Ссылка
		ГДЕ
			ПаспортаКачества.СсылкаДок = &СсылкаНаНалив) КАК ДанныеПоПаспортам
		ПО ДанныеПоНакладным.Налив = ДанныеПоПаспортам.СсылкаДок
Показать
Найденные решения
19. user645801_yyyuuu123q 03.02.21 15:24 Сейчас в теме
(18)
Решил так.
Запрос оставил как есть с дублями, написал функцию которая удаляет дубли.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Drivingblind 232 02.02.21 05:33 Сейчас в теме
Для начала покажите, что возвращает этот запрос:
ВЫБРАТЬ
            ПаспортаКачества.Ответственый КАК Ответственый,
            ПаспортаКачества.ДатаИВремя КАК ДатаИВремя,
            ПаспортаКачестваТАбличнаяЧастьПК.Отправка КАК Отправка,
            ПаспортаКачестваТАбличнаяЧастьПК.Статус КАК Статус,
            ПаспортаКачества.СсылкаДок КАК СсылкаДок
        ИЗ
            Справочник.ПаспортаКачества.ТАбличнаяЧастьПК КАК ПаспортаКачестваТАбличнаяЧастьПК
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПаспортаКачества КАК ПаспортаКачества
                ПО ПаспортаКачестваТАбличнаяЧастьПК.Ссылка = ПаспортаКачества.Ссылка
        ГДЕ
            ПаспортаКачества.СсылкаДок = &СсылкаНаНалив
Показать


и этот запрос:
ВЫБРАТЬ
        ЖДНакладная.ПрефиксНомераЖДНакладной + ЖДНакладная.НомерЖДНакладной КАК ПолныйНомерЖдНакладной,
        ЖДНакладная.Получатель.АдресПаспортаКачества КАК АдресПолучателя,
        ЖДНакладная.Налив КАК Налив
    ИЗ
        Документ.ЖДНакладная КАК ЖДНакладная
    ГДЕ
        (ЖДНакладная.Статус = &Статус0
                ИЛИ ЖДНакладная.Статус = &Статус1
                ИЛИ ЖДНакладная.Статус = &Статус2)
        И ЖДНакладная.Получатель.ОтправкаПоПочте = ИСТИНА
        И ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив
Показать

В первом запросе вы обращаетесь к ТЧ, если у неё несколько строк, то и выборка будет умножаться на количество строк в ТЧ. Воспользуйтесь конструкцией "РАЗЛИЧНЫЕ", как вариант.

Вот так делать тоже не надо. Дополнительное обращение через точку.
ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив

Ну и вот это тоже почитайте: https://its.1c.ru/db/v8std/browse/13/-1/26/28
3. user645801_yyyuuu123q 02.02.21 05:51 Сейчас в теме
(2) Прикрепил результат первого и второго.
вариант с различными это что то вроде костыля. Но даже он не сработал


ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив
- это не заметил даже, скорее всего поторопился вот так и вышло.
Прикрепленные файлы:
4. Drivingblind 232 02.02.21 06:24 Сейчас в теме
(3)
вариант с различными это что то вроде костыля

С чего вы взяли, что это костыль? Вы умеете как-то по-другому выбирать уникальные значения из ТЧ?

Но даже он не сработал

Что возвращает второй запрос с использованием различных?
5. user645801_yyyuuu123q 02.02.21 06:47 Сейчас в теме
(4)
Оба запроса возвращают коректное количество строк до соединения
6. user645801_yyyuuu123q 02.02.21 07:56 Сейчас в теме
Кажеться понимаю как это работает.
НА кажду строку не табличной части Мы имеет 4 строки табличной части.
Осталось понять, решается ли как то это метотами запроса
7. user645801_yyyuuu123q 02.02.21 10:02 Сейчас в теме
Правильно ли тогда будет? Получить данные из ТаблЧ, выгрузить в таблицу значений.
ЗАпросом получить нужные значения таблицу значений с полученными строками использовать как источних данных. Соеденить по нужным полям?
9. SlavaKron 02.02.21 11:19 Сейчас в теме
(7)
Соеденить по нужным полям?
Это по каким? У вас 2 несвязанных списка: документы ЖДНакладная и ТЧ паспорта качества. Да, их все объединяет документ Налив, но между собой строки таблиц никак не связаны.
10. user645801_yyyuuu123q 02.02.21 11:42 Сейчас в теме
(9)
Связаны. У Табл части есть груз, и у документа есть груз. Ну и сам налив
11. user645801_yyyuuu123q 02.02.21 11:49 Сейчас в теме
(9)
Есть еще одно связаное поле
Прикрепленные файлы:
12. SlavaKron 02.02.21 11:56 Сейчас в теме
(11) Ну так и связывайте по Наливу и Грузу 2 временные таблицы.
13. user645801_yyyuuu123q 02.02.21 13:07 Сейчас в теме
(12)
ВЫБРАТЬ
	ПаспортаКачества.Ответственый КАК Ответственый,
	ПаспортаКачества.ДатаИВремя КАК ДатаИВремя,
	ПаспортаКачестваТАбличнаяЧастьПК.Отправка КАК Отправка,
	ПаспортаКачестваТАбличнаяЧастьПК.Статус КАК Статус,
	ПаспортаКачества.СсылкаДок КАК СсылкаДок,
	ПаспортаКачестваТАбличнаяЧастьПК.Груз
ПОМЕСТИТЬ Справочник
ИЗ
	Справочник.ПаспортаКачества.ТАбличнаяЧастьПК КАК ПаспортаКачестваТАбличнаяЧастьПК
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПаспортаКачества КАК ПаспортаКачества
		ПО ПаспортаКачестваТАбличнаяЧастьПК.Ссылка = ПаспортаКачества.Ссылка
ГДЕ
	ПаспортаКачества.СсылкаДок = &СсылкаНаНалив
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЖДНакладная.ПрефиксНомераЖДНакладной + ЖДНакладная.НомерЖДНакладной КАК ПолныйНомерЖдНакладной,
	ЖДНакладная.Получатель.АдресПаспортаКачества КАК АдресПолучателя,
	ЖДНакладная.Налив КАК Налив,
	ЖДНакладная.Груз
ПОМЕСТИТЬ Документ
ИЗ
	Документ.ЖДНакладная КАК ЖДНакладная
ГДЕ
	(ЖДНакладная.Статус = &Статус0
			ИЛИ ЖДНакладная.Статус = &Статус1
			ИЛИ ЖДНакладная.Статус = &Статус2)
	И ЖДНакладная.Получатель.ОтправкаПоПочте = ИСТИНА
	И ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Справочник.Ответственый,
	Справочник.ДатаИВремя,
	Справочник.Отправка,
	Справочник.Статус,
	Справочник.СсылкаДок,
	Документ.ПолныйНомерЖдНакладной,
	Документ.АдресПолучателя,
	Документ.Налив,
	Документ.Груз
ИЗ
	Справочник КАК Справочник
		ЛЕВОЕ СОЕДИНЕНИЕ Документ КАК Документ
		ПО Справочник.СсылкаДок = Документ.Налив
			И Справочник.Груз = Документ.Груз
Показать


Неработает так
Прикрепленные файлы:
14. SlavaKron 02.02.21 13:13 Сейчас в теме
(13) Какие значения в колонке Груз? Скорее всего не уникальные, то есть связка Налив+Груз не уникальна для строк таблиц. Ищите дополнительные поля связи, чтобы одной строке первой таблицы соответствовала только одна строка из второй, если задача избавиться от перемножения строк.
15. user645801_yyyuuu123q 02.02.21 13:50 Сейчас в теме
(14)
ссылка на номенклатуру.
16. user645801_yyyuuu123q 02.02.21 15:19 Сейчас в теме
(15)
Особо уже не с чем связвать, все что было связал
17. Vitaly1C8 02.02.21 17:04 Сейчас в теме
(13) РАЗЛИЧНЫЕ
добавь в последний запрос
18. user645801_yyyuuu123q 03.02.21 02:10 Сейчас в теме
(17)
РАЗЛИЧНЫЕ
добавь в последний запрос

Добавил, записей стало уже 6, сгрупппировал. Записей стало столько же
19. user645801_yyyuuu123q 03.02.21 15:24 Сейчас в теме
(18)
Решил так.
Запрос оставил как есть с дублями, написал функцию которая удаляет дубли.
8. user645801_yyyuuu123q 02.02.21 10:03 Сейчас в теме
Иначе Я не понимаю как это должно работать
Оставьте свое сообщение

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