Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 21:12

Запрос с дублями

Автор maxxi, 13 июн 2023, 16:41

0 Пользователей и 1 гость просматривают эту тему.

maxxi

Здравствуйте, есть запрос:
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОстаткиОстатки.Товар КАК Товар,
| ОстаткиОстатки.Валюта КАК Валюта,
| ОстаткиОстатки.Склад КАК Склад,
| ОстаткиОстатки.Остаток КАК Остаток
|ПОМЕСТИТЬ ВТ_ОстаткаОстатка
|ИЗ
| РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварНархлариСрезПоследних.Период КАК Период,
| ТоварНархлариСрезПоследних.Товар КАК Товар,
| ТоварНархлариСрезПоследних.ВидЦен КАК ВидЦен,
| ТоварНархлариСрезПоследних.Цена КАК Цена,
| ТоварНархлариСрезПоследних.ПриходЦена КАК ПриходЦена
|ПОМЕСТИТЬ ВТ_ЦеныТоваров_СрезПоследных
|ИЗ
| РегистрСведений.ЦеныТоваров.СрезПоследних КАК ЦеныТоваровСрезПоследних
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТ_ОстаткаОстатка.Товар КАК Товар,
| ВТ_ОстаткаОстатка.Валюта КАК Валюта,
| ВТ_ОстаткаОстатка.Склад КАК Склад,
| ВТ_ОстаткаОстатка.Остаток КАК Остаток,
| ВТ_ТоварНоахлари_СрезПоследных.ВидЦен КАК ВидЦен,
| ВТ_ТоварНоахлари_СрезПоследных.Цена КАК Цена,
| ВТ_ТоварНоахлари_СрезПоследных.ПриходЦена КАК ПриходЦена
|ИЗ
| ВТ_ОстаткаОстатка КАК ВТ_ОстаткаОстатка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦеныТоваров_СрезПоследных КАК ВТ_ЦеныТоваров_СрезПоследных
| ПО (ВТ_ЦеныТоваров_СрезПоследных.Ссылка = ВТ_ОстаткаОстатка.Товар.Ссылка)
|ГДЕ
| (ВТ_ОстаткаОстатка.Склад = &Склад
| ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))";


после выполнение появляются дублы, скажите пожалуйста, как отсекать их.
Спасибо.

LexaK

maxxi, как один из вариантов, задать нужные отборы по всем измерениям, примерно так
        |ГДЕ
        |    ВТ_ОстаткаОстатка.Склад = &Склад
        |и   ВТ_ОстаткаОстатка.Валюта = &Валюта
        |и   ВТ_ТоварНоахлари_СрезПоследных.ВидЦен = &ВидЦен

если это не поможет(еще останутся дубли), дополнительно проагрегировать поля
Остаток, Цена, ПриходЦена, с группировкой по Товару
если помогло нажмите: Спасибо!

Afinogen

вот эжт о условие в третьей таблице пакета правильнее налдожить на первую таблицу

(ВТ_ОстаткаОстатка.Склад = &Склад
        |            ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))

Afinogen

дубли потому что  у вас вид цен есть  в регистре сведений

Afinogen

здесь  еще соединение по валюте добавьте,плюс левое соединение не так должно быть прописано

не как у вас
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦеныТоваров_СрезПоследных КАК ВТ_ЦеныТоваров_СрезПоследных
        |        ПО (ВТ_ЦеныТоваров_СрезПоследных.Ссылка = ВТ_ОстаткаОстатка.Товар.Ссылка)

в данном случае вы к таблице с ценами цепляете таблицу с остатками

вот так сделайте

        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦеныТоваров_СрезПоследных КАК ВТ_ЦеныТоваров_СрезПоследных
        |        ПО (ВТ_ОстаткаОстатка.Товар = ВТ_ЦеныТоваров_СрезПоследных.Ссылка
        |        И ВТ_ОстаткаОстатка.Валюта= ВТ_ЦеныТоваров_СрезПоследных.Валюта)

Afinogen

 B) но если у вас для 1 товара есть несколько различных видов цен то  тут вам либо  вид цены как указал коллега нужно передавать как параметр запроса либо принимать решение какую  цену выводить в таком случае

и учтите что  при  передаче вида цены как параметра в моем примере у вас реальна ситуация когда есть например

товар 1: вид цены 1 и вид цены 2
Товар 2: вид цены 1

если в качестве параметра указать вид цены 1 то  у вас в итоге будет таблица с двумя товарами

Товар 1: вид цены 1
Товар 2: вид цены 1

а вот если укажете в качестве параметра вид цены 2 то получите на выходе

Товар 1: вид цены 2
Товар 2: NULL



Afinogen

что бы убрать строки с пустой ценой можно так запрос апргрейдить
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЦеныТоваров_СрезПоследных КАК ВТ_ЦеныТоваров_СрезПоследных
    |        ПО (ВТ_ОстаткаОстатка.Товар = ВТ_ЦеныТоваров_СрезПоследных.Ссылка
    |        И ВТ_ОстаткаОстатка.Валюта= ВТ_ЦеныТоваров_СрезПоследных.Валюта)

в данном случае вам гарантировано в итог выведутся все товары у которых  есть хотя бы 1 вид  цен

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск