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

Разница в запросах

Автор freez1301, 17 янв 2015, 20:36

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

freez1301

такой запрос выбирает только те позиции номенклатуры, у корой заполнено значение доп. реквизита
    "ВЫБРАТЬ
| Номенклатура.Ссылка,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
| ПО (НоменклатураДополнительныеРеквизиты.Ссылка = Номенклатура.Ссылка)
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство";

Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Модель"));


а вот такой выбирает всю номенклатуру, в том числе и с заполненым доп. реквизитом

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


собственно вопрос - в первом случае каким бы соединением не пользовался - результат всегда тот же. Так же пробовал через объединение, тоже не вышло.
Чего не так понимаю?

MuI_I_Ika

В первом случае происходит отбор по свойству. Но если какому-то элементу это свойство не задано, то это свойство просто не задается. То есть такой записи просто нет. То есть значение НоменклатураДополнительныеРеквизиты.Свойство у такой строки равно NULL

Во втором случае заранее накладывается отбор на доп. реквизиты и левое соединение уже дает нужный результат.

LexaK

вообще запросы какие то дурацкие, вы совсем не понимаете сути реляционных баз данных(может книжку какую по теории баз почитать), шутка :befhbt:

в первом запросе уберите условие


|ГДЕ
|    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство";


получите такой же результат как и во втором запросе,

а интересно, в первом запросе вообще зачем левое соединение?
если помогло нажмите: Спасибо!

freez1301

условие затем, что реквизитов м.б. несколько.
а если не левым соединением, то тогда как 2 разные таблицы же

LexaK

в табличной части (справочника и др.объектов) уже есть ссылка на "родительский" элемент!

ваш первый запрос может выглядеть так

"ВЫБРАТЬ
|    Спр.Ссылка,
|    Спр.Значение
|ИЗ
|    Справочник.Номенклатура.ДополнительныеРеквизиты КАК Спр
|ГДЕ
|    Спр.Свойство = &Свойство";


результат тот-же, и никакого левого соединения.

и через Спр.Ссылка, можно получить любой реквизит номенклатуры, например код, наименование

Спр.Ссылка.Код как Код,
Спр.Ссылка.Наименование как Наименование

и т.д.
если помогло нажмите: Спасибо!

freez1301

ЛехаК, спасибо :) , но для динамического списка не подходит такой вариант. ругается на неверную основную таблицу. пробовал через РС - тоже самое. так что придется все таки соединять

MuI_I_Ika

Если ругается на неверную основную таблицу, то ее можно убрать вообще, правда при этом лишаетесь нескольких плюшек типа динамического обновления.

Теги:

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

Рейтинг@Mail.ru

Поиск