1.
user645801_yyyuuu123q
02.02.21 03:30 Сейчас в теме
Всем привет друзья.
Хочу получить данные из справочника и его Тч и документа.
Финальная версия через вложенный запрос. Делал и через временные таблицы.
ход действий.
1. Получаю даные из справочника и его тч.
2. Получаю данные из документа
3. Обьеденяю по ссылки
4. Получпаю что строка запроса умножается на каждую строку другова запроса. По итогу получаю декартово произведение.
Как выйти из этого? Можно конечно сгруппировать но хотелось бы для начала понять почему так?
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДанныеПоНакладным.ПолныйНомерЖдНакладной,
ДанныеПоНакладным.АдресПолучателя,
ДанныеПоНакладным.Налив,
ДанныеПоПаспортам.Ответственый,
ДанныеПоПаспортам.ДатаИВремя,
ДанныеПоПаспортам.Отправка,
ДанныеПоПаспортам.Статус,
ДанныеПоПаспортам.СсылкаДок
ИЗ
(ВЫБРАТЬ
ЖДНакладная.ПрефиксНомераЖДНакладной + ЖДНакладная.НомерЖДНакладной КАК ПолныйНомерЖдНакладной,
ЖДНакладная.Получатель.АдресПаспортаКачества КАК АдресПолучателя,
ЖДНакладная.Налив КАК Налив
ИЗ
Документ.ЖДНакладная КАК ЖДНакладная
ГДЕ
(ЖДНакладная.Статус = &Статус0
ИЛИ ЖДНакладная.Статус = &Статус1
ИЛИ ЖДНакладная.Статус = &Статус2)
И ЖДНакладная.Получатель.ОтправкаПоПочте = ИСТИНА
И ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив) КАК ДанныеПоНакладным
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ПаспортаКачества.Ответственый КАК Ответственый,
ПаспортаКачества.ДатаИВремя КАК ДатаИВремя,
ПаспортаКачестваТАбличнаяЧастьПК.Отправка КАК Отправка,
ПаспортаКачестваТАбличнаяЧастьПК.Статус КАК Статус,
ПаспортаКачества.СсылкаДок КАК СсылкаДок
ИЗ
Справочник.ПаспортаКачества.ТАбличнаяЧастьПК КАК ПаспортаКачестваТАбличнаяЧастьПК
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПаспортаКачества КАК ПаспортаКачества
ПО ПаспортаКачестваТАбличнаяЧастьПК.Ссылка = ПаспортаКачества.Ссылка
ГДЕ
ПаспортаКачества.СсылкаДок = &СсылкаНаНалив) КАК ДанныеПоПаспортам
ПО ДанныеПоНакладным.Налив = ДанныеПоПаспортам.СсылкаДок
ВЫБРАТЬ
ПаспортаКачества.Ответственый КАК Ответственый,
ПаспортаКачества.ДатаИВремя КАК ДатаИВремя,
ПаспортаКачестваТАбличнаяЧастьПК.Отправка КАК Отправка,
ПаспортаКачестваТАбличнаяЧастьПК.Статус КАК Статус,
ПаспортаКачества.СсылкаДок КАК СсылкаДок
ИЗ
Справочник.ПаспортаКачества.ТАбличнаяЧастьПК КАК ПаспортаКачестваТАбличнаяЧастьПК
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПаспортаКачества КАК ПаспортаКачества
ПО ПаспортаКачестваТАбличнаяЧастьПК.Ссылка = ПаспортаКачества.Ссылка
ГДЕ
ПаспортаКачества.СсылкаДок = &СсылкаНаНалив
Показать
и этот запрос:
ВЫБРАТЬ
ЖДНакладная.ПрефиксНомераЖДНакладной + ЖДНакладная.НомерЖДНакладной КАК ПолныйНомерЖдНакладной,
ЖДНакладная.Получатель.АдресПаспортаКачества КАК АдресПолучателя,
ЖДНакладная.Налив КАК Налив
ИЗ
Документ.ЖДНакладная КАК ЖДНакладная
ГДЕ
(ЖДНакладная.Статус = &Статус0
ИЛИ ЖДНакладная.Статус = &Статус1
ИЛИ ЖДНакладная.Статус = &Статус2)
И ЖДНакладная.Получатель.ОтправкаПоПочте = ИСТИНА
И ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив
Показать
В первом запросе вы обращаетесь к ТЧ, если у неё несколько строк, то и выборка будет умножаться на количество строк в ТЧ. Воспользуйтесь конструкцией "РАЗЛИЧНЫЕ", как вариант.
Вот так делать тоже не надо. Дополнительное обращение через точку.
6.
user645801_yyyuuu123q
02.02.21 07:56 Сейчас в теме
Кажеться понимаю как это работает.
НА кажду строку не табличной части Мы имеет 4 строки табличной части.
Осталось понять, решается ли как то это метотами запроса
7.
user645801_yyyuuu123q
02.02.21 10:02 Сейчас в теме
Правильно ли тогда будет? Получить данные из ТаблЧ, выгрузить в таблицу значений.
ЗАпросом получить нужные значения таблицу значений с полученными строками использовать как источних данных. Соеденить по нужным полям?
Это по каким? У вас 2 несвязанных списка: документы ЖДНакладная и ТЧ паспорта качества. Да, их все объединяет документ Налив, но между собой строки таблиц никак не связаны.
ВЫБРАТЬ
ПаспортаКачества.Ответственый КАК Ответственый,
ПаспортаКачества.ДатаИВремя КАК ДатаИВремя,
ПаспортаКачестваТАбличнаяЧастьПК.Отправка КАК Отправка,
ПаспортаКачестваТАбличнаяЧастьПК.Статус КАК Статус,
ПаспортаКачества.СсылкаДок КАК СсылкаДок,
ПаспортаКачестваТАбличнаяЧастьПК.Груз
ПОМЕСТИТЬ Справочник
ИЗ
Справочник.ПаспортаКачества.ТАбличнаяЧастьПК КАК ПаспортаКачестваТАбличнаяЧастьПК
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПаспортаКачества КАК ПаспортаКачества
ПО ПаспортаКачестваТАбличнаяЧастьПК.Ссылка = ПаспортаКачества.Ссылка
ГДЕ
ПаспортаКачества.СсылкаДок = &СсылкаНаНалив
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЖДНакладная.ПрефиксНомераЖДНакладной + ЖДНакладная.НомерЖДНакладной КАК ПолныйНомерЖдНакладной,
ЖДНакладная.Получатель.АдресПаспортаКачества КАК АдресПолучателя,
ЖДНакладная.Налив КАК Налив,
ЖДНакладная.Груз
ПОМЕСТИТЬ Документ
ИЗ
Документ.ЖДНакладная КАК ЖДНакладная
ГДЕ
(ЖДНакладная.Статус = &Статус0
ИЛИ ЖДНакладная.Статус = &Статус1
ИЛИ ЖДНакладная.Статус = &Статус2)
И ЖДНакладная.Получатель.ОтправкаПоПочте = ИСТИНА
И ЖДНакладная.Налив.Ссылка = &СсылкаНаНалив
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Справочник.Ответственый,
Справочник.ДатаИВремя,
Справочник.Отправка,
Справочник.Статус,
Справочник.СсылкаДок,
Документ.ПолныйНомерЖдНакладной,
Документ.АдресПолучателя,
Документ.Налив,
Документ.Груз
ИЗ
Справочник КАК Справочник
ЛЕВОЕ СОЕДИНЕНИЕ Документ КАК Документ
ПО Справочник.СсылкаДок = Документ.Налив
И Справочник.Груз = Документ.Груз
(13) Какие значения в колонке Груз? Скорее всего не уникальные, то есть связка Налив+Груз не уникальна для строк таблиц. Ищите дополнительные поля связи, чтобы одной строке первой таблицы соответствовала только одна строка из второй, если задача избавиться от перемножения строк.