Имя: Пароль:
1C
1С v8
Помогите оптимизировать запрос
0 oslokot
 
23.08.13
14:10
Простой запрос к регистру значений свойств.
Выбираю все значения по указанному свойству, объекты которых не помечены на удаление и соответствуют некоторому наименованию.

    Запрос = Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект КАК Объект
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &ВыбСвойство
    |    И ЗначенияСвойствОбъектов.Значение В(&ВыбСписокЗначенийСвойств)
    |    И НЕ ЗначенияСвойствОбъектов.Объект.ПометкаУдаления
    |    И ЗначенияСвойствОбъектов.Объект.Наименование ПОДОБНО &ВыбНаименование
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.УстановитьПараметр("ВыбСвойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Тип ТПА"));
    Запрос.УстановитьПараметр("ВыбСписокЗначенийСвойств", ВыбСписокЗначенийСвойств);
    Запрос.УстановитьПараметр("ВыбНаименование", "шпилька%");

С двумя последними условиями, запрос работает на порядок дольше чем без них.
Как написать правильно?
Прошу простить, недавно начал изучать запросы.
1 Naumov
 
23.08.13
14:14
с подобно будет всегда долго работать. нет там индекса подходящего
2 Ёпрст
 
23.08.13
14:15
ну ясен пень..идёт соединение со всем табличками по объекту в данном случае.
3 genosse
 
23.08.13
14:15
Соедини таблицу по полю ЗначенияСвойствОбъектов.Объект с Таблицей объектов нужного типа и оттуда бери данные о ПометкаУдаления и Наименование
4 RomaH
 
naïve
23.08.13
14:16
объект у свойства может быть только одного типа?
5 Ёпрст
 
23.08.13
14:16
может, тебе у конкретного вида справочника, поискать , не ?
6 viktor_vv
 
23.08.13
14:16
Если тебе только по объектам определнного вида, например по справочнику номенклатура, лучше наверное разыменовать



ЗначенияСвойствОбъектов.Объект.ПометкаУдаления

добавив

Левое соединение справочник.Номенклатура как СпрНом по СпрНом.Ссылка = ЗначенияСвойствОбъектов.Объект

и соотвественно педелав условие
7 viktor_vv
 
23.08.13
14:17
(1) Учитыая что слева у него нет "%" то вполне себе попадет в индекс по наименованию.
8 Fragster
 
модератор
23.08.13
14:20
убрать автоупорядочивание
9 Fragster
 
модератор
23.08.13
14:20
Выразить(ЗначенияСвойствОбъектов.Объект как Траляля).Наименование и .ПометкаУдаления
10 oslokot
 
23.08.13
14:21
(2) да, точно.
(4) разные
(6) да, в качестве объекта нужна только номенклатура
11 Fragster
 
модератор
23.08.13
14:23
наверное еще Выбрать Различные нужно (ну это уже к результатц)
12 oslokot
 
23.08.13
14:24
(5) как в условии задать вид объекта = спр.номенклатура?
13 viktor_vv
 
23.08.13
14:27
Добавь еще в где

ЗначенияСвойствОбъектов.Объект Ссылка Справочник.Номенклатура
14 Ёпрст
 
23.08.13
14:28
(13) не.. проще уж свойства к номенклатуре прилепить..
15 viktor_vv
 
23.08.13
14:32
(14) Ну это в дополнение к левому соединению с номенклатурой. А может таки да, наоборот к справочнику прикрутить свойства.
16 oslokot
 
23.08.13
14:33
(15) (14) как? )
17 viktor_vv
 
23.08.13
15:13
|ИЗ
|Справочник.Номенклатура КАК СпрНом
|Внутреннее соединение
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ПО СпрНом.Ссылка = ЗначенияСвойствОбъектов.Объект
|Где
    |    И НЕ СпрНом.ПометкаУдаления
    |    И СпрНом.Наименование ПОДОБНО &ВыбНаименование
18 viktor_vv
 
23.08.13
15:14
И таки в ПО добавь еще

|ПО СпрНом.Ссылка = ЗначенияСвойствОбъектов.Объект
|И ЗначенияСвойствОбъектов.Объект Ссылка Справочник.Номенклатура
19 Bober
 
23.08.13
15:15
(16)

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

Кстати, какой тип у значений в параметре ВыбСписокЗначенийСвойств
20 oslokot
 
23.08.13
15:20
(6) Вот так сделал. Стало гораздо веселей!!!
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект КАК Объект,
    |    Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |        ПО ЗначенияСвойствОбъектов.Объект = Номенклатура.Ссылка
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &ВыбСвойство
    |    И ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
    |    И ЗначенияСвойствОбъектов.Значение В(&ВыбСписокЗначенийСвойств)
    |    И НЕ Номенклатура.ПометкаУдаления
    |    И Номенклатура.Наименование ПОДОБНО &ВыбНаименование
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка";
21 oslokot
 
23.08.13
15:23
(17) не, лучше запрос прямо к РС, а уж потом соединять с  номенклатурой. Или я не прав?
22 Bober
 
23.08.13
15:25
(21) какой тип у значений свойств?
23 viktor_vv
 
23.08.13
15:26
(21) При внутреннем соединении, по идее, глубоко все равно.
То что в (20) практически эквивалентно (17).
24 oslokot
 
23.08.13
15:28
(22) ВыбСписокЗначенийСвойств это список значений, состоящий из справочников значений свойств

    ВыбСписокЗначенийСвойств = Новый СписокЗначений;
    ВыбСписокЗначенийСвойств.Добавить(Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Метизы"));
    ВыбСписокЗначенийСвойств.Добавить(Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Фланец"));
    ВыбСписокЗначенийСвойств.Добавить(Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Прокладка"));
25 oslokot
 
23.08.13
15:30
(23) Спасибо. Таким образом, можно оставить запрос в таком виде (20)? Может еще как-то оптимизировать? Хотя выполняется теперь быстро.
26 z01
 
23.08.13
15:31
(0)представь что если бы ты сам и выполнял этот запрос
самое важное это минимум записей на каждом этапе (предположим индексы в базе есть)
тогда нужно выбрать "ЗначенияСвойствОбъектов.Объект.Наименование ПОДОБНО &ВыбНаименование
" из ЗначенияСвойствОбъектов.Объект, и уже к нему прикручивать остальное, тут наверное можно надеятся что оптимизатор запросов так и поступит, но это уже другая история и на практике нужно конечно проверять
27 Ёпрст
 
23.08.13
15:32
максимум, условия в место соединения воткнуть.. а так, у тебя обычный inner join
28 z01
 
23.08.13
15:32
кстати разница между (20) и (0) сооттветствует (26) )))
29 z01
 
23.08.13
15:34
(27)это ты к тому что левое (правое) внешнее быстрее всего?
30 Bober
 
23.08.13
15:37
тогда в (19)

И РС.Значение В (&ВыбСписокЗначенийСвойств)

заменить на

И ВЫРАЗИТЬ(РС.Значение КАК Справочники.ЗначенияСвойствОбъектов) В (&ВыбСписокЗначенийСвойств)
31 z01
 
23.08.13
15:37
(20)подольем: я обычно если что-то тормозит не запрос переделывать кидаюсь а индексировать средствами 1С все поля  (реквизиты мать их...) задействованные в запросе
32 z01
 
23.08.13
15:38
(30)зачем?
33 Ёпрст
 
23.08.13
15:39
(27) нет, это к тому , что твой запрос в (20) эквивалентен inner join
34 Ёпрст
 
23.08.13
15:39
точнее, это он и есть
35 Bober
 
23.08.13
15:40
(32)
а вот зачем
http://infostart.ru/public/184361/
36 oslokot
 
23.08.13
15:42
(27) как еще оптимизировать? в (20)
что значит по максимуму условий в соединении приделать?
37 z01
 
23.08.13
15:42
(33)и как нам воткнуть уcловие в соединение?
38 Bober
 
23.08.13
15:44
(36) берешь (19) и корректировку в (30) - это и будет самый быстрый вариант
39 z01
 
23.08.13
15:45
(35)а если в "И ВЫРАЗИТЬ(РС.Значение КАК Справочники.ЗначенияСвойствОбъектов) В (&ВыбСписокЗначенийСвойств)"

"РС.Значение КАК Справочники.ЗначенияСвойствОбъектов" это не всегда "Справочники.ЗначенияСвойствОбъектов"

тогда получается что лучше вот это
" И ЗначенияСвойствОбъектов.Объект.Наименование ПОДОБНО &ВыбНаименование"
впихнуть в самый нижний подзапрос который вероятнее всего по плану запроса и выполнится первым
40 oslokot
 
23.08.13
15:46
(31) Что значит индексировать реквизиты? Как?
41 Bober
 
23.08.13
15:47
(39) прочитай статью в (35), потом посмотри еще раз на запрос в (39) и никогда так больше не пиши.
42 z01
 
23.08.13
15:47
(19)одобрям )))
(40)у них есть свойство "индексировать" и у регистров тоже почти у всех полей
43 Bober
 
23.08.13
15:47
(40) в твоем случае ничего индексировать не надо
44 ptiz
 
23.08.13
15:48
(20) Ты не сделал главного: см. (9)
45 ptiz
 
23.08.13
15:48
тьфу.... не читать (44) :)
просто можно было без явного соединения
46 z01
 
23.08.13
15:49
(41)если ему по условиям нужно "подобно" то он или забыл что это только по справочнику номенклатура или его всё равно использовать по всем типам " ЗначенияСвойствОбъектов.Объект.Наименование " для общего вида задачи
47 z01
 
23.08.13
15:51
(43)в его случае от этого зависит как на самом деле быдет исполняться запрос если конечно база скульная
48 genosse
 
23.08.13
15:52
(30) Это полный ноль для данного запроса. Если бы количество свойств было хотябы 1000, тогда думаю 1% от данной доработки мы бы увидели. А так ноль - точнее в пределах измеряемой погрешности.
49 Bober
 
23.08.13
15:53
(48) думаю, в РС значений больше 1к
50 Bober
 
23.08.13
15:54
(47) все индексы уже есть, что для РС, что для Спр. Джае если скульная
51 Bober
 
23.08.13
15:55
(46) с такими запросами даже собеседование не пройдешь в нормальную контору.
52 z01
 
23.08.13
15:56
(41)
v8: Помогите оптимизировать запрос
"По составным полям может быть много индексов, которые никак не помогают в запросах. В общем случае индексы почти никогда не работают, если в составном поле есть несколько "базовых" типов."

даже если вы нарыли косяк платформы м его обход, то всё равно добавление индексов средствами скуля и переписывание запроса на обход конкретных таблиц (пусть даже всех типов по составному полю) будет эффективнее и проще того что вы там написали, хотя за само по себе околонаучное объяснение тормозов составных типов спасибо )))
53 genosse
 
23.08.13
15:57
(49) сорри невнимательно прочитал запрос, по сабжу (30) результата не будет ни при каких обстоятельствах
54 z01
 
23.08.13
15:58
(51)нормальные конторы полны бестолковых дятлов понятия не имеющих как строится план исполнения запроса и что он из себя представляет
55 oslokot
 
23.08.13
15:59
(38) Сделал как ты сказал. Завис.

    "ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    НЕ Номенклатура.ПометкаУдаления
    |    И Номенклатура.Наименование ПОДОБНО &ВыбНаименование
    |    И Номенклатура.Ссылка В
    |            (ВЫБРАТЬ
    |                ВЫРАЗИТЬ(РС.Объект КАК Справочник.Номенклатура)
    |            ИЗ
    |                РегистрСведений.ЗначенияСвойствОбъектов КАК РС
    |            ГДЕ
    |                РС.Свойство = &ВыбСвойство
    |                И РС.Объект ССЫЛКА Справочник.Номенклатура
    |                И ВЫРАЗИТЬ(РС.Значение КАК Справочник.ЗначенияСвойствОбъектов) В (&ВыбСписокЗначенийСвойств)
    |                И (ВЫРАЗИТЬ(РС.Объект КАК Справочник.Номенклатура)) = Номенклатура.Ссылка)";
56 Bober
 
23.08.13
16:00
(52) будь мужиком, возьми профайлер и посмотри как "не работают" индексы при работе с конструкция Ссылка и ВЫразить()
57 Bober
 
23.08.13
16:00
(55) УТ 10.3, такая как тебя
58 z01
 
23.08.13
16:01
в (26) и (31) всё что нужно есть, а почему там составные типы тормозят и так понятно - к ним вообще не нужно обращаться напрямую, нежелательно, их нужно перебирать (вложенными запросами но перебирать)
59 oslokot
 
23.08.13
16:02
(42) (43) а, ясно про какие индексы.
60 viktor_vv
 
23.08.13
16:02
(55) Таки in скуль будет делать через inner join или merje , только тут еще усугубили условием in  в подзапросе.
Делай через внутреннее соединение и не парься.
61 genosse
 
23.08.13
16:03
(55) Оставь свой запрос. У тебя он намного лучше.
62 oslokot
 
23.08.13
16:03
(57) КА
63 z01
 
23.08.13
16:03
(56)а я и не предлагал их использовать. я говорил о том что нужно нижнего самого уровня подзапросом их выбрать и к ним приджойнить остальное
64 viktor_vv
 
23.08.13
16:03
Как раз условие

ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура

и поможет попасть в индекс по составному полю.
65 z01
 
23.08.13
16:06
имхо быстрее всего работают запросы построенные как пирамида подзапросов с соблюдением условия минимума записей на каждом уровне, так и будет работать предельно оптимальный план, но не факт что он будет таким если поналепить в соединение условий с использованием "ссылка", "выразить" и прочей околонаучной непредсказуемо работающей чепухи
66 viktor_vv
 
23.08.13
16:07
(60)* То есть nested loops или merje join
67 viktor_vv
 
23.08.13
16:08
(65) От того в каком порядке ты подзапросы напишешь, вряд ли это как-то повлияет на план выполнения. Я имею ввиду именно порядок подзапросов.
68 z01
 
23.08.13
16:09
(66) (60)так вот и тут о том что лучше его склонить к левому внешнему
69 genosse
 
23.08.13
16:09
"как пирамида подзапросов" - ребята, что тут за бред???
70 genosse
 
23.08.13
16:09
антинаучный флуд чтоли пошел
71 z01
 
23.08.13
16:10
(67)в первую очередь скорее всего будет исполнен самый нижний и т.д. наверх
72 Полотенчик
 
23.08.13
16:10
(31) вместо оптимизации запроса увеличиваешь время записи и потерю места лишними индексами?
73 Bober
 
23.08.13
16:11
(69) пирамида маслоу
74 z01
 
23.08.13
16:11
(69) "ВЫБРАТЬ
|    Валюты.Ссылка
|ИЗ
|    Справочник.Валюты КАК Валюты
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|            Валюты.Ссылка КАК Ссылка
|        ИЗ
|            Справочник.Валюты КАК Валюты
|                ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|                    Валюты.Ссылка КАК Ссылка
|                ИЗ
|                    Справочник.Валюты КАК Валюты) КАК ВложенныйЗапрос
|                ПО Валюты.Ссылка = ВложенныйЗапрос.Ссылка) КАК ВложенныйЗапрос
|        ПО Валюты.Ссылка = ВложенныйЗапрос.Ссылка"
75 z01
 
23.08.13
16:12
точнее так

ВЫБРАТЬ
           |    Валюты.Ссылка
           |ИЗ
           |    Справочник.Валюты КАК Валюты
           |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           |            Валюты.Ссылка КАК Ссылка
           |        ИЗ
           |            Справочник.Валюты КАК Валюты
           |                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           |                    Валюты.Ссылка КАК Ссылка
           |                ИЗ
           |                    Справочник.Валюты КАК Валюты) КАК ВложенныйЗапрос
           |                ПО Валюты.Ссылка = ВложенныйЗапрос.Ссылка) КАК ВложенныйЗапрос
           |        ПО Валюты.Ссылка = ВложенныйЗапрос.Ссылка
76 Bober
 
23.08.13
16:12
Zed's dead baby, Zed's dead
77 z01
 
23.08.13
16:13
сорри спешу )))
вот правильный вариант

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

)))
78 Bober
 
23.08.13
16:13
(74) (75) (77) нет времени объяснять, расстрелять
79 z01
 
23.08.13
16:17
(78)это пример пирамиды только справочник там один просто для примера, внизу должен был быть отбор по запросу сабжа возращающий минимум строк и т.д. т.е. задача так компонуется чтобы все условия соблюсти но левыми внешними сделать результат на каждом этапе возвращающающий  минимум строк, если ларечникам не понятно то это печалька, удачки вам )))
80 viktor_vv
 
23.08.13
16:17
(78)+1 . Особенно (74) (75). Че-то мне имхается эти многоуровневые подзапросы свернут башку оптимизатору скуля влегкую.
81 z01
 
23.08.13
16:17
(79) и скуль будет летать
82 z01
 
23.08.13
16:18
(80)концепт в (77) остальное потереть нужно
83 viktor_vv
 
23.08.13
16:19
(79) Я таки настаиваю, что порядок написания подзапросов и их вложенность никак не повлияет на план выполнения, а только усугубит проюлему скулю с построением плана.
84 Bober
 
23.08.13
16:20
(83) +1
85 genosse
 
23.08.13
16:23
ветка пятничного ламерского бреда )))
86 z01
 
23.08.13
16:25
(83) (84)и правильно, представьте что у вас записей во всех задействованных таблицах от сотен тысяч до миллионов хотя бы. и скуль админы не дают а индексы ларечник шеф вместе с конфой держит. и что вы будете делать? делать так чтобы промежуточные результаты содержали бы минимум строк, последний раз повторяю подумайте как скуль работает, он работает с таблицами а не по волшебству и если у вас в промежуточных результатах миллион записей это и подтормозит всё а я выложил метод который почти 100% сработает как директива построителю.
87 z01
 
23.08.13
16:26
(85)да. достали уже. вместо того чтобы пояснить человеку как запрос переписать они ему хвастаются как доказали практически торможение составных данных, а толку то что с того, запрос от этих рассуждений быстрее не сработает
88 Bober
 
23.08.13
16:28
давно я так не ржал
89 z01
 
23.08.13
16:28
просто мой подход более универсален чем метод обхода проблемы указанный в
http://infostart.ru/public/184361/
вот и бесятся
90 z01
 
23.08.13
16:29
короче последний раз пишу:
чем искать как отобрать по составному типу лучше отобрать части составного типа и к ним приджойнить таблицу из которй нужно отобрать
91 oslokot
 
23.08.13
16:30
Итак. Запрос (17) и запрос (30), выполняются абсолютно одинаково по времени, судя по замеру производительности. Что подтверждает (23)
Ура) Думаю вот, какой оставить, внутреннее или левое соединение
92 viktor_vv
 
23.08.13
16:30
(86) Вот тебе задача. Какой запрос будет быстрее

1.

Select
sub1.id
From
(Select id from t1 Where a =p) as sub1
Left join t2 as t2 on t2.id = sub1.id

или
2.

Select
sub1.id
From
t1 as t1
Left join t2 as t2 on t2.id = t1.id
where t1.a = p
93 oslokot
 
23.08.13
16:31
(91) * (30)>(55)
94 Bober
 
23.08.13
16:32
"скуль админы не дают а индексы ларечник шеф вместе с конфой держит" и наш герой, который подсказывает построителю отчета как оптимизатор скля должен работать. ипанись. вы там наверное не учетом занимаетесь, а соревнуетесь, кто больше всех удивит.
95 viktor_vv
 
23.08.13
16:32
* во втором sub1.id ->> t1.id

и количество записей в t1 в 100 раз больше чем в t2.
96 Bober
 
23.08.13
16:32
(95) как ты жесток.
97 oslokot
 
23.08.13
16:33
(91) + тьфу ты тяпница!) все перепутал.
Кароче (17) и (20) выполняются по времени одинаково. Все ништяк
98 viktor_vv
 
23.08.13
16:34
(96) А то :).
99 Bober
 
23.08.13
16:34
(97) а мы тут уже сменили темы разговора
100 viktor_vv
 
23.08.13
16:36
(99) Это типа жених и невеста на свадьбе нужны первые 10 минут, в качестве повода побухать :).
101 oslokot
 
23.08.13
16:36
100 )
102 oslokot
 
23.08.13
16:36
(99) (100) ха, я заметил )
103 z01
 
23.08.13
16:36
(95)да хватит уже разводить ))) я же писал что допустим индексы есть, а если нет и поиск значителен то при построении запроса подзапросы следует строить с учетом размера таблиц )))(94)а вы ларечники наверное и никогда не писали запросы под большие базы где реально видно что если его компоновать не так как я рекомендую то он вообще ничего никогда не выдаст за приемлемое время
104 Bober
 
23.08.13
16:38
(103) я на латочника работаю, он файловую базу на флешке носит .
105 z01
 
23.08.13
16:38
(100)просто наверное он один раз на выполнение запустил, а со второго пошло и сабжа нет )))
106 viktor_vv
 
23.08.13
16:39
(103) Так ответ будет на (92) ?

Учитывая твое
"выложил метод который почти 100% сработает как директива построителю"
для тебя ответ должен быть как бы очевиден.
107 Bober
 
23.08.13
16:39
(106) ответа он не знает, админы не дают доступа к скл серверу.
108 z01
 
23.08.13
16:42
(104)да не важно на кого ты работаешь, ларечник это диагноз иногда даже на большие базы люди попадают и всё равно предлагают вместо того чтобы индекс добавить купить сервер в 10 раз дороже
(106) ответ в (103) и у тебя там не совсем наш случай, и я утверждаю что моя метода работает как директива, но имхо это помогает и в частности обойти проблему составных типов даже не думая о них
109 z01
 
23.08.13
16:45
(106)джойнить нужно к результату подзапроса ))) умники. а у тебя везде левое к sub1 ))
110 viktor_vv
 
23.08.13
16:45
(108) Ну так номер варианта назови из (92) 1. или 2. ?
Я привел илюстрацию для твоего утверждения насчет директив планировщику запросов.
111 z01
 
23.08.13
16:46
(110)джойнить нужно к результату подзапроса , а у тебя везде левое к sub1
112 Bober
 
23.08.13
16:48
чет скучно здесь стало, зедик уже не веселит.
113 z01
 
23.08.13
16:49
(111) (110)или нет?
114 viktor_vv
 
23.08.13
16:49
Ну а sub1 это разве не результат подзапроса. Мне нужны там все записи из таблицы t1 удовлетворяющие условию a=@p в соединении с таблицей t2.
115 oslokot
 
23.08.13
16:59
Подождите Гуру, не расходитесь.
Еще маленький вопрос.
как написать по-правильному вот такую кучу условий:
...
    |    И НЕ Наименование ПОДОБНО &ВыбПодСтрокаИсключить1
    |    И НЕ Наименование ПОДОБНО &ВыбПодСтрокаИсключить2
    |    И НЕ Наименование ПОДОБНО &ВыбПодСтрокаИсключить3
    |    И НЕ Наименование ПОДОБНО &ВыбПодСтрокаИсключить4
...
    Запрос.УстановитьПараметр("ВыбПодстрокаИсключить1", "яя%");
    Запрос.УстановитьПараметр("ВыбПодстрокаИсключить2", "%шайба-гровер%");
    Запрос.УстановитьПараметр("ВыбПодстрокаИсключить3", "%шпилька в комплекте%");
    Запрос.УстановитьПараметр("ВыбПодстрокаИсключить4", "% простой%");
116 Bober
 
23.08.13
17:01
(115) Может лучше полнотекстовый поиск включить
117 z01
 
23.08.13
17:04
(114)Select
sub1.id
From
t1 as t1 это не ошибка?
118 Bober
 
23.08.13
17:05
(115) если запрос вида ВЫБРАТЬ Ссылка ИЗ --- ГДЕ то никак, это и есть нормальная версия. если что-то сложнее, то нужно смотреть запрос.
119 viktor_vv
 
23.08.13
17:05
(117) Ошибка. В (95) поправил и дополнительную вводную дал.
120 viktor_vv
 
23.08.13
17:07
(118) Он наверное это к соединению со свойствами прилепить хочет.
Наверное лучше сначала по справочнику в пакете загнать во временную таблицу по условию и дальше ее уже использовать со свойствами.
121 z01
 
23.08.13
17:14
(119)ты там к таблице один джойниш таблицу два и отбираешь по условию по полю таблицы 1 во втором случае и отбираешь по условию таблицы 1 и джойнишь к результату таблицу 2 в первом.

первый быстрее так как записей на первом этапе первого (выборка по условию) меньше чем на первом этапе второго (соединение)
122 viktor_vv
 
23.08.13
17:17
(121) Ну что и требовалось доказать. Таки на самом деле в 99.5% случаев для обоих запросов из (92) скуль построит абсолютно идентичные планы запроса, соотвественно и время выполнения будет одинаково.
Полпроцента оставил на совесть скуля и статистики, а то мало ли :).
123 z01
 
23.08.13
17:27
(122)в запросе как в сабже всё уже не так может быть как нам хотелось бы, иначе не было бы сабжа
124 viktor_vv
 
23.08.13
17:31
Где-то я могу согласится, что подзапросами как-то может быть можно повлият на составление плана запроса, но это очень не очевидно.

Пример в (92) приведен, чтобы ты не увлекался идеей
директив построителю через порядок написания подзапросов
" сработает как директива построителю".
125 oslokot
 
23.08.13
17:47
(120) да, прикрутить к своему запросу. Хорошо, пока оставлю так.
126 Bober
 
23.08.13
17:58
(125) сделать забор данных в отдельном запросе с времянкой
127 Bober
 
23.08.13
17:58
(125) как посоветовали в (120)
128 Bober
 
23.08.13
18:00
(125) вообще такие вещи уже хорошо делать через СКД с использованием расширения запроса для СКД
129 oslokot
 
27.08.13
10:51
Всем привет! Помогите усложнить запрос.
На данном этапе он выглядит так:
    Запрос = Новый Запрос;
    Запрос.Текст =     
    
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Объект,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
    |            И (ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура)
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &ВыбСвойство
    |    И ЗначенияСвойствОбъектов.Значение = &ВыбЗначение
    |    И НЕ Номенклатура.ПометкаУдаления
    |    И НЕ Номенклатура.ЭтоГруппа
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура.Наименование";
    
    Запрос.УстановитьПараметр("ВыбСвойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Тип ТПА"));
    Запрос.УстановитьПараметр("ВыбЗначение", Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Фланец"));

Этот простой запрос выбирает номенклатуру по единственному значению свойства "Фланец"
Результат: получил всю номенклатуру со свойством "Фланец"
А что делать, когда нужно отобрать эти фланцы еще по нескольким свойствам, например  "Диаметр", "Давление", "Марка"
То есть хочу выбрать фланцы с заданным давлением, диаметром и маркой. Как бы уточненный отбор по свойствам.
130 ptiz
 
27.08.13
10:57
(129)
Способ 1: добавлять еще соединения

Способ 2: получить РС "ЗначенияСвойствОбъектов" во временную таблицу с отбором: Свойство В (&СписокНужныхСвойств), и дальше - как способ 1, но соединять уже с этой ВТ (тоже несколько соединений).

Способ 3: получить РС "ЗначенияСвойствОбъектов" во временную таблицу с отбором: Свойство В (&СписокНужныхСвойств), но сразу делать разные поля с группировкой по полю "Объект".
Например:
ВЫБОР
Объект,
МАКСИМУМ(ВЫБОР КОГДА Свойство - &СвойствоФланец ТОГДА Значение ИНАЧЕ NULL КОНЕЦ) КАК Фланец,
МАКСИМУМ(ВЫБОР КОГДА Свойство - &СвойствоДиаметр ТОГДА Значение ИНАЧЕ NULL КОНЕЦ) КАК Диаметр
..
и потом обойтись одним соединением.

Тут можно делать без ВТ, вложенным запросом.
131 oslokot
 
27.08.13
11:05
(130) а можно поподробнее про получение РС в ВТ? как это пишется?
132 ptiz
 
27.08.13
11:07
ВЫБРАТЬ
Поле1, Поле2
ПОМЕСТИТЬ ВТ1
ИЗ Регистр.НашРегистр
;
ВЫБРАТЬ
Поле1, Поле2
ИЗ ВТ1
133 oslokot
 
27.08.13
11:15
(132) угу, спасиб. сейчас попробую
134 oslokot
 
27.08.13
11:58
нифига непойму
    "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект КАК Объект,
    |    ЗначенияСвойствОбъектов.Свойство КАК Свойство
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство В(&СписокСвойств)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ.Свойство,
    |    ВТ.Объект
    |ИЗ
    |    ВТ КАК ВТ";

пустой запрос
135 oslokot
 
27.08.13
12:03
И еще непонятно, как все это мне поможет?
Ведь выбирать надо значения из разных видов свойств.

Свойство | Значение

Тип      | "Фланец"
Диаметр  | "50"
Давление | "16"
Марка    | "нж"

Нужно выбрать фланцы с диаметром 50, давлением 16 и маркой нж
Как все это соединять, каша какая то в голове (
136 ptiz
 
27.08.13
12:08
Решение в лоб (способ 1): делать столько соединений, сколько свойств в условиях.

В каждом соединении будет условие вида:

ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Фланец

ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Фланец.Объект
И ЗначенияСвойствОбъектов_Фланец.Свойство = &СвойствоФланец
137 Bober
 
27.08.13
12:21
(129) попробуй поработать с СКД
138 oslokot
 
27.08.13
13:52
(137) рано пока для меня (
(136) вот так получилось (способ 1), работает хорошо:
    Запрос = Новый Запрос;
    Запрос.Текст =     
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Объект,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_ТипТПА
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_ТипТПА.Объект
    |            И (ЗначенияСвойствОбъектов_ТипТПА.Свойство = &Свойство_ТипТПА)
    |            И (ЗначенияСвойствОбъектов_ТипТПА.Объект ССЫЛКА Справочник.Номенклатура)
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Диаметр
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Диаметр.Объект
    |            И (ЗначенияСвойствОбъектов_Диаметр.Свойство = &Свойство_Диаметр)
    |            И (ЗначенияСвойствОбъектов_Диаметр.Объект ССЫЛКА Справочник.Номенклатура)
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Давление
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Давление.Объект
    |            И (ЗначенияСвойствОбъектов_Давление.Свойство = &Свойство_Давление)
    |            И (ЗначенияСвойствОбъектов_Давление.Объект ССЫЛКА Справочник.Номенклатура)
    |ГДЕ
    |    ЗначенияСвойствОбъектов_ТипТПА.Свойство = &Свойство_ТипТПА
    |    И ЗначенияСвойствОбъектов_ТипТПА.Значение = &Значение_ТипТПА
    |    И ЗначенияСвойствОбъектов_Диаметр.Свойство = &Свойство_Диаметр
    |    И ЗначенияСвойствОбъектов_Диаметр.Значение = &Значение_Диаметр
    |    И ЗначенияСвойствОбъектов_Давление.Свойство = &Свойство_Давление
    |    И ЗначенияСвойствОбъектов_Давление.Значение = &Значение_Давление
    |    И НЕ Номенклатура.ПометкаУдаления
    |    И НЕ Номенклатура.ЭтоГруппа
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура.Наименование";
    
    Запрос.УстановитьПараметр("Свойство_ТипТПА", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Тип ТПА"));
    Запрос.УстановитьПараметр("Значение_ТипТПА", Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Фланец"));
    Запрос.УстановитьПараметр("Свойство_Диаметр", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Диаметр"));
    Запрос.УстановитьПараметр("Значение_Диаметр", Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Ду__50"));
    Запрос.УстановитьПараметр("Свойство_Давление", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Давление"));
    Запрос.УстановитьПараметр("Значение_Давление", Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Ру_16"));

Вроде так? ничего лишнего я не наколбасил?
Время выполнения составляет примерно 0.068 сек., как и в (129)
Оставить так? Или это смотрится как быдло-код?
139 Ёпрст
 
27.08.13
13:57
(138) выкинуть ГДЕ и все соедеиения.
Оставить только одно внутреннее соедиение.
140 Ёпрст
 
27.08.13
13:58
, ну максимум, условие на Где НЕ Номенклатура.ПометкаУдаления
оставить.
141 oslokot
 
27.08.13
14:06
(139) как это выкинуть.. А как же я в одном соединении укажу все условия разношерстных видов? не понимаю...
@Епрст покажи примерчик, пожалуйста
142 oslokot
 
27.08.13
14:06
+ ну проверку ЭтоГруппа выкину, согласен. она не нужна
143 oslokot
 
27.08.13
14:18
(139) По типу такого чтоли?
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Объект,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
    |            И (ЗначенияСвойствОбъектов.Свойство = &Свойство_ТипТПА)
    |            И (ЗначенияСвойствОбъектов.Свойство = &Свойство_Диаметр)
    |            И (ЗначенияСвойствОбъектов.Свойство = &Свойство_Давление)
    |            И (ЗначенияСвойствОбъектов.Значение = &Значение_ТипТПА)
    |            И (ЗначенияСвойствОбъектов.Значение = &Значение_Диаметр)
    |            И (ЗначенияСвойствОбъектов.Значение = &Значение_Давление)
    |            И (ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура)
    |ГДЕ
    |    НЕ Номенклатура.ПометкаУдаления
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура.Наименование";

Только это естественно не работает
144 oslokot
 
27.08.13
14:55
Итак. Выкинул все что можно, получилось так:
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Объект,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_ТипТПА
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_ТипТПА.Объект
    |            И (ЗначенияСвойствОбъектов_ТипТПА.Свойство = &Свойство_ТипТПА)
    |            И (ЗначенияСвойствОбъектов_ТипТПА.Объект ССЫЛКА Справочник.Номенклатура)
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Диаметр
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Диаметр.Объект
    |            И (ЗначенияСвойствОбъектов_Диаметр.Свойство = &Свойство_Диаметр)
    |            И (ЗначенияСвойствОбъектов_Диаметр.Объект ССЫЛКА Справочник.Номенклатура)
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Давление
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Давление.Объект
    |            И (ЗначенияСвойствОбъектов_Давление.Свойство = &Свойство_Давление)
    |            И (ЗначенияСвойствОбъектов_Давление.Объект ССЫЛКА Справочник.Номенклатура)
    |ГДЕ
    |    ЗначенияСвойствОбъектов_ТипТПА.Значение = &Значение_ТипТПА
    |    И ЗначенияСвойствОбъектов_Диаметр.Значение = &Значение_Диаметр
    |    И ЗначенияСвойствОбъектов_Давление.Значение = &Значение_Давление
    |    И НЕ Номенклатура.ПометкаУдаления
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура.Наименование";

Вопрос, как выкинуть все соединения и оставить одно?
145 ptiz
 
27.08.13
15:04
(144) Использовать "способ 3" :)
146 oslokot
 
27.08.13
15:08
(145) :) буду пробовать
Только вот еще одна неотложная проблема образовалась:
Хочу выбирать, например, диаметр=50,60...80 и пусто!
Загнал В список, все хорошо. Выбираются диаметры все, кроме пустых значений. А очень надо пустое. Как быть?
147 oslokot
 
27.08.13
15:09
+ Понимаю, что в РС пустой записи с диаметром нет.
148 viktor_vv
 
27.08.13
15:09
(144)

    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
    |            И (ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура)
    |            И ((ЗначенияСвойствОбъектов.Свойство = &Свойство_ТипТПА)
    |            ИЛИ (ЗначенияСвойствОбъектов.Свойство = &Свойство_Диаметр)
    |            ИЛИ (ЗначенияСвойствОбъектов.Свойство = &Свойство_Давление)
    |            ИЛИ (ЗначенияСвойствОбъектов.Значение = &Значение_ТипТПА)
    |            ИЛИ (ЗначенияСвойствОбъектов.Значение = &Значение_Диаметр)
    |            ИЛИ (ЗначенияСвойствОбъектов.Значение = &Значение_Давление))
149 viktor_vv
 
27.08.13
15:10
(148)+ Это в (143) изменить.
150 viktor_vv
 
27.08.13
15:13
(146) То есть тебе надо и незаполненные значения для назначенных свойств ? В этом случае в регистре записи не будет.
Это надо еще лепить туда назначение свойств.
151 oslokot
 
27.08.13
15:18
(150) Да, незаполненные значения нужны тоже.
152 Bober
 
27.08.13
15:24
(151) ВНУТРЕННЕЕ СОЕДИНЕНИЕ замени на левое соединение и делай проверку на null, неопределено и пустое значение типа свойства
153 ptiz
 
27.08.13
15:26
(146) Тогда тебе нужно левое соединение, а условия вида
  ЗначенияСвойствОбъектов_Диаметр.Свойство = &Свойство_Диаметр
переместить в секцию ГДЕ таким образом:
ГДЕ
(ЗначенияСвойствОбъектов_Диаметр.Значение В(&СписокСвойства_Диаметр)
  ИЛИ ЗначенияСвойствОбъектов_Диаметр.Значение ЕСТЬ NULL)
И
...другие отборы
154 oslokot
 
27.08.13
15:27
(152) (153) Спасибо ребят, пробую...
155 oslokot
 
27.08.13
15:58
(153) Ура. Вот так взлетело:
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Объект,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_ТипТПА
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_ТипТПА.Объект
    |            И (ЗначенияСвойствОбъектов_ТипТПА.Свойство = &Свойство_ТипТПА)
    |            И (ЗначенияСвойствОбъектов_ТипТПА.Объект ССЫЛКА Справочник.Номенклатура)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Диаметр
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Диаметр.Объект
    |            И (ЗначенияСвойствОбъектов_Диаметр.Свойство = &Свойство_Диаметр)
    |            И (ЗначенияСвойствОбъектов_Диаметр.Объект ССЫЛКА Справочник.Номенклатура)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Давление
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Давление.Объект
    |            И (ЗначенияСвойствОбъектов_Давление.Свойство = &Свойство_Давление)
    |            И (ЗначенияСвойствОбъектов_Давление.Объект ССЫЛКА Справочник.Номенклатура)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Марка
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов_Марка.Объект
    |            И (ЗначенияСвойствОбъектов_Марка.Свойство = &Свойство_Марка)
    |            И (ЗначенияСвойствОбъектов_Давление.Объект ССЫЛКА Справочник.Номенклатура)
    |ГДЕ
    |    ЗначенияСвойствОбъектов_ТипТПА.Значение = &Значение_ТипТПА
    |    И (ЗначенияСвойствОбъектов_Диаметр.Значение = &Значение_Диаметр
    |            ИЛИ ЗначенияСвойствОбъектов_Диаметр.Значение ЕСТЬ NULL )
    |    И (ЗначенияСвойствОбъектов_Давление.Значение = &Значение_Давление
    |            ИЛИ ЗначенияСвойствОбъектов_Давление.Значение ЕСТЬ NULL )
    |    И (ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
    |            ИЛИ ЗначенияСвойствОбъектов_Марка.Значение ЕСТЬ NULL )
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура.Наименование";

То есть "Тип ТПА" оставил ВНУТРЕННИМ соединением, так как это свойство заполнено всегда,
а "Диаметр", "Давление" и "Марка" сделал ЛЕВЫМ соединением с проверкой на NULL
Работает.
Всё правильно написано?
156 oslokot
 
27.08.13
16:12
(155) + А еще, как в запросе включить/выключить условие на NULL? Просто нужно иногда выводить пустые, а иногда нет. Ту должна быть наверное конструкция типа
КОГДА &ВыводитьПустые ТОГДА ИНАЧЕ ИСТИНА...
Так?
157 oslokot
 
27.08.13
16:36
(156) + Или в восьмерке делается так же как в семерке?

Если ВыводитьПустые Тогда
    Запрос.Текст = Запрос.Текст + "...";
КонецЕсли;
158 ptiz
 
27.08.13
16:43
(156) Да, лучше так.
159 oslokot
 
27.08.13
16:56
(158) да вот что-то с синтаксисом не так, или с моей ДНК :)
как эта конструкция применяется?
Вот она:
    ВЫБОР
    КОГДА &ВыбранныйМноюПризнак = ИСТИНА
        ТОГДА Истина
    ИНАЧЕ <Текст условия запроса>
    КОНЕЦ
Как ее применить например сюда:
    |    И (ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
    |            ИЛИ ЗначенияСвойствОбъектов_Марка.Значение ЕСТЬ NULL )
160 oslokot
 
27.08.13
17:06
(159) + а, всё, кажется догнал )
161 Ёпрст
 
27.08.13
17:11
можешь проще

внутреннее соединение по
значение в список/массив значений
и свойство в список/массив свойств

усё.
162 Ёпрст
 
27.08.13
17:15
ежели значения свойств могут совпадать у разного вида свойст, тогда через пары + или

По  (свойство = свойство1 и значение = значение1)
ИЛИ (свойство = свойство2 и значение = значение2)
...
ИЛИ (свойство = свойствоN и значение = значениеN)
163 Ёпрст
 
27.08.13
17:16
в итоге имеешь одно внутреннее соединение
164 oslokot
 
27.08.13
17:26
(163) Спасибо, это чуть позже попробую.
(159) Вот типа так сделал условие, работает вроде

    |    И ВЫБОР
    |            КОГДА &ВыводитьПустые
    |                ТОГДА (ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
    |                        ИЛИ ЗначенияСвойствОбъектов_Марка.Значение ЕСТЬ NULL )
    |            ИНАЧЕ ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
    |        КОНЕЦ

Или что-то я опять перемудрил?
165 Bober
 
27.08.13
17:37
ВЫБОР
   КОГДА &ВыводитьПустые ТОГДА ЗначенияСвойствОбъектов_Марка.Значение ЕСТЬ NULL
   Иначе
Истина
   Конец
Или
(ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
166 oslokot
 
27.08.13
18:01
(165) Спасибо!
Получилось так:
ВЫБОР
    КОГДА &ВыводитьПустые
        ТОГДА ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
                ИЛИ ЗначенияСвойствОбъектов_Марка.Значение ЕСТЬ NULL
    ИНАЧЕ ЗначенияСвойствОбъектов_Марка.Значение В (&Значение_Марка)
КОНЕЦ

Потому что мне нужно выводить при ВыводитьПустые=Истина не только пустые но и со значениями.
167 Bober
 
27.08.13
18:12
(166) угу, неправильно написал кусок запроса в (165)
Независимо от того, куда вы едете — это в гору и против ветра!