Имя: Пароль:
1C
1С v8
Исключение из результатов одного запроса результат 2-го запроса
,
0 drovak
 
31.07.19
13:55
Добрый день!
Требуется из результатов запроса исключить результат 2-го запроса, например, из характеристик, отобранных по определенному размеру, надо исключить характеристики, в которых отсутствует свойство "Рост".
Такой пример кода отрабатывает неправильно:

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

Пытаюсь использовать ЛЕВОЕ СОЕДИНЕНИЕ, но результат тоже выдает неверный:

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

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

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

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

|ГДЕ
    |    ПОДСТРОКА(ЗначенияСвойствОбъектов.Свойство.Наименование, 1, 6) = ""Размер""
10 drovak
 
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-я запись).
11 НЕА123
 
05.08.19
08:45
(7)

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





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