Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Исключение из результатов одного запроса результат 2-го запроса

Исключение из результатов одного запроса результат 2-го запроса
Я
   drovak
 
31.07.19 - 13:55
Добрый день!
Требуется из результатов запроса исключить результат 2-го запроса, например, из характеристик, отобранных по определенному размеру, надо исключить характеристики, в которых отсутствует свойство "Рост".
Такой пример кода отрабатывает неправильно:
ТекстЗапроса = 
"ВЫБРАТЬ
|    ЗначенияСвойствОбъектов.Объект КАК ХарактеристикаНоменклатуры
|ПОМЕСТИТЬ ВТ_ОтобранныеПоРазмерам
|ИЗ
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
|    ЗначенияСвойствОбъектов.Свойство.Наименование = ""Размер""
|    И ЗначенияСвойствОбъектов.Значение.Наименование = &Размер
|    И ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.ХарактеристикиНоменклатуры
|;
|
////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ
|    ЗначенияСвойствОбъектов.Объект КАК ХарактеристикаНоменклатуры
|ИЗ
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
|    ЗначенияСвойствОбъектов.Свойство.Наименование <> ""Рост""
|    И ЗначенияСвойствОбъектов.Объект В
|        (ВЫБРАТЬ
|            ВТ_ОтобранныеПоРазмерам.ХарактеристикаНоменклатуры
|        ИЗ
|            ВТ_ОтобранныеПоРазмерам)
|";

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

|ВЫБРАТЬ
|    ЗначенияСвойствОбъектов.Объект КАК ХарактеристикаНоменклатуры
|ИЗ
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтобранныеПоРазмерам КАК ВТ_ОтобранныеПоРазмерам
|    ПО ХарактеристикаНоменклатуры = ВТ_ОтобранныеПоРазмерам.ХарактеристикаНоменклатуры
|ГДЕ
|    ЗначенияСвойствОбъектов.Свойство.Наименование = ""Рост""
|    И ХарактеристикаНоменклатуры ЕСТЬ NULL
|";

Поправьте, пожалуйста!
 
 
   Euguln
 
1 - 31.07.19 - 14:01
|    И ЗначенияСвойствОбъектов.Значение = &Размер
   shuhard
 
2 - 31.07.19 - 14:01
(0) И ХарактеристикаНоменклатуры ЕСТЬ NULL заменить на
ВТ_ОтобранныеПоРазмерам.ХарактеристикаНоменклатуры
   ДядяМитяй
 
3 - 31.07.19 - 14:11
там где ЛЕВОЕ СОЕДИНЕНИЕ - в ту ли сторону оно сделано? мне кажется наоборот надо - то, что уже отобрано вначале. или если лень - заменить слово левое на правое
   drovak
 
4 - 31.07.19 - 14:28
(3) ПРАВОЕ СОЕДИНЕНИЕ выдает результат запроса 0.
(2) Если заменяю "И ХарактеристикаНоменклатуры ЕСТЬ NULL" на "И ВТ_ОтобранныеПоРазмерам.ХарактеристикаНоменклатуры", выходит сообщение об ошибке запроса.
   RomanYS
 
5 - 31.07.19 - 14:44
(4) похоже имелось ввиду
И ВТ_ОтобранныеПоРазмерам.ХарактеристикаНоменклатуры ЕСТЬ NULL
   drovak
 
6 - 31.07.19 - 15:19
(5) В этом случае результат появляется, но нулевой.
   drovak
 
7 - 04.08.19 - 16:42
В общем, если кому интересно, такое решение у меня сработало:
ТекстЗапроса =
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект КАК ХарактеристикаНоменклатуры
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство.Наименование = ""Размер""
    |    И ЗначенияСвойствОбъектов.Значение.Наименование = &Размер
    |    И ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.ХарактеристикиНоменклатуры
    |    И (НЕ ЗначенияСвойствОбъектов.Объект В
    |        (ВЫБРАТЬ
    |            ЗначенияСвойствОбъектов.Объект
    |        ИЗ
    |            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ТаблицаРостов
    |            ПО ЗначенияСвойствОбъектов.Объект = ТаблицаРостов.Объект
    |        ГДЕ
    |            ТаблицаРостов.Свойство.Наименование = ""Рост""))
    |";

   palpetrovich
 
8 - 04.08.19 - 17:34
(7) а что, в результат запроса 
"ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект КАК ХарактеристикаНоменклатуры
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство.Наименование = ""Размер""

действительно попадают записи с 
ЗначенияСвойствОбъектов.Свойство.Наименование = ""Рост"" ?
   hhhh
 
9 - 04.08.19 - 19:23
у меня только так срабатывало 

 |ГДЕ
    |    ПОДСТРОКА(ЗначенияСвойствОбъектов.Свойство.Наименование, 1, 6) = ""Размер""
   drovak
 
10 - 04.08.19 - 23:09
(8) Приведу пример. В регистре сведений (УТ 10.3) содержится 3 записи:
1) Объект (наименование характеристики) - "108, 164", Свойство - "Размер", Значение - "108" 
2) Объект (наименование характеристики) - "108, 164", Свойство - "Рост", Значение - "164" 
3) Объект (наименование характеристики) - "108", Свойство - "Размер", Значение - "108" 
Очевидно, что имеется одна характеристика, в которой указан Размер и Рост, и 2-я характеристика, в которой указан только Размер. Первая часть запроса выдает правильный результат - 2 записи (1-я и 3-я по полю "Объект"), 2-я часть запроса должна поле "Объект" проверить по отсутствию свойства "Рост", т.е. выдать результат "108" - по полю "Объект" (3-я запись).
   НЕА123
 
11 - 05.08.19 - 08:45
(7)

а для чего ВНУТРЕНЕЕ СОЕДИНЕНИЕ?
> (ВЫБРАТЬ
    |            ЗначенияСвойствОбъектов.Объект
    |        ИЗ
    |            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ТаблицаРостов
    |            ПО ЗначенияСвойствОбъектов.Объект = ТаблицаРостов.Объект
    |        ГДЕ
    |            ТаблицаРостов.Свойство.Наименование = ""Рост"")





 (ВЫБРАТЬ
    |            ЗначенияСвойствОбъектов.Объект
    |        ИЗ
    |            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |        ГДЕ
    |            ЗначенияСвойствОбъектов.Свойство.Наименование = ""Рост"")
   drovak
 
12 - 05.08.19 - 10:51
(11) В первой части запроса отбираются объекты, имеющие свойство "Размер". Соответственно, в эту выборку не попадают объекты, имеющие свойство "Рост". ВНУТРЕННЕЕ СОЕДИНЕНИЕ обеспечивает повторную фильтрацию выборки уже по свойству "Рост".

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.