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

Стоит ли менять Или на И в условиях запроса

Стоит ли менять Или на И в условиях запроса
Я
   arancar
 
12.10.21 - 11:43
В рамках задачи нужно было при подготовке данных для формируемого внешнего источника данных отчета сформировать таблицу, прокинув условия по необязательным параметрам формирования отчета, т.е. добавить к двум десяткам запросов по 3-5 условий вида
<code>
&ИспользованиеФильтра И (ВТ.Поле1 = &Фильтр) Или Не &ИспользованиеФильтра
</code>
Раскладывать подобный запрос с учетом возможных сочетаний через объединения бессмысленно. Имеет ли смысл в подобных ситуациях играться с булевой алгеброй и заменять условие по "Или" через условие по "И" и "Не"
<code>
A или B = Не (Не А И Не B)
</code>
что с учетом сокращенного вычисления логических выражений сводит исходное условие к
<code>
Не (&ИспользованиеФильтра И Не ВТ.Поле1 = &Фильтр)
</code>
   Asmody
 
1 - 12.10.21 - 11:47
Только профайлер тебе даст точный ответ на этот вопрос.
   ДенисЧ
 
2 - 12.10.21 - 11:50
Имеет смысл в этом случае воспользоваться компоновкой или построителем запроса.
Или руками собирать текст запроса.
А не извращаться с условиями.
   pechkin
 
3 - 12.10.21 - 11:54
Не &ИспользованиеФильтра  ИЛИ ВТ.Поле1 = &Фильтр
   arancar
 
4 - 12.10.21 - 12:01
(2) Спасибо, раньше с объектом Построитель не сталкивался, хотя и использовал Компановку данных внутри СКД отчетов. Похоже идеальное решение и значительно упростит читабельность кода самого запроса.
   ДенисЧ
 
5 - 12.10.21 - 12:02
"Стаж: 7 лет 10 месяцев"
Я ухожу в афуй, извинте.
   arancar
 
6 - 12.10.21 - 12:04
(3) Основная задача - уйти от табуированного использования Или в условии запроса.
   acht
 
7 - 12.10.21 - 12:05
(6) > табуированного
Кем и почему?
   polosov
 
8 - 12.10.21 - 12:07
(7) Он про ИЛИ в секции ГДЕ, наверное.
   acht
 
9 - 12.10.21 - 12:08
(8) Да какая разница
Что плохого в конструкции (Поле1 = 1) ИЛИ (Поле1 = 2) ?
   mikecool
 
10 - 12.10.21 - 12:09
(9) иногда плохо, но надо смотреть планы запросов
   polosov
 
11 - 12.10.21 - 12:09
(9) Ответ на ИТС есть. Такое рекомендуется заменять объединением запросов
   acht
 
12 - 12.10.21 - 12:11
(10) К чорту ИТС, мне нужна конкретно твоя интрепретация.

И чем это условие отличается от Поле1 В (1, 2) ?
   youalex
 
13 - 12.10.21 - 12:11
(9) тем что его можно заменить на Поле1 В (1, 2)
)
   acht
 
14 - 12.10.21 - 12:11
(13) Нетарапись =)
   Малыш Джон
 
15 - 12.10.21 - 12:12
(13) а в чем разница?
   youalex
 
16 - 12.10.21 - 12:12
(14) не успел)
   Малыш Джон
 
17 - 12.10.21 - 12:14
(9) вот интересно, а если заменить на 

НЕ((Поле1 <> 1) И (Поле1 <> 2))

это улучшит ситуацию?
   polosov
 
18 - 12.10.21 - 12:15
(17) Если невозможно будет использовать индексы, то не улучшит.
   mikecool
 
19 - 12.10.21 - 12:15
(12) согласен про ИТС, только хардкор!
   2mugik
 
20 - 12.10.21 - 12:19
(0)Ставлю на черное) Если индексы есть МС СКЛ их найдет. А так имхо ответ в 1.
   pechkin
 
21 - 12.10.21 - 12:19
условие на <> еще хуже чем или
   Малыш Джон
 
22 - 12.10.21 - 12:20
(21) чем же?
   acht
 
23 - 12.10.21 - 12:25
(19) Ну, есть надежда, что он сам ИТС откроет и прочитает.
Вторая надежда, что он попытается понять и третья - что сможет пересказать своими словами...
   ДенисЧ
 
24 - 12.10.21 - 12:33
Кому не нравится (по религиозным соображениям) ИТС, можете почитать вот это
http://rsdn.org/forum/db/8090508.flat#8090508
   ILM
 
Модератор
25 - 12.10.21 - 12:34
ВЫБОР используйте. Всегда когда есть куча условий в отчете, то мой выбор ВЫБОР.
   Малыш Джон
 
26 - 12.10.21 - 13:15
(25) а ВЫБОР чем от ИЛИ отличается? В данном контексте.
   Конструктор1С
 
27 - 12.10.21 - 13:45
НЕ Поле1 = &Значение1 - не будет использовать индекс
Поле1 <> &Значение1 - не будет использовать индекс
Поле1 = &Значение1 ИЛИ Поле1 = &Значение2 Поле1 = &Значение3 - будет использовать индекс (с оговорками)
   2mugik
 
28 - 12.10.21 - 13:50
(24)rsdn это гуд. Я там про блокировки читал.
   ДенисЧ
 
29 - 12.10.21 - 13:50
(28) Я в курсе, мне говорили. В смысле, я читал )))
   Конструктор1С
 
30 - 12.10.21 - 14:00
(27) последнее условие читать так:

Поле1 = &Значение1 ИЛИ Поле1 = &Значение2 ИЛИ Поле1 = &Значение3
это аналог Поле1 В(&Значение1, &Значение2, &Значение3)
 
 
   acanta
 
31 - 12.10.21 - 14:02
А в случае  Поле1 В(&Значение1, &Значение2, &Значение3) индекс используется?
   Eiffil123
 
32 - 12.10.21 - 14:31
(0) если объем данных небольшой и скорость работы устраивает - не имеет никакого смысла. Заниматься оптимизацией нужно тогда и в тех местах, где это действительно нужно.
   polosov
 
33 - 12.10.21 - 14:34
(32) А когда база встанет колом, то будет немного поздно.
   Eiffil123
 
34 - 12.10.21 - 14:38
(33) а почему она должна встать колом? всегда же можно это планировать и этим управлять.
   Почему 1С
 
35 - 12.10.21 - 14:40
(31) Зависит что планировщик решит, может использовать, а может и нет.
   acanta
 
36 - 12.10.21 - 14:44
(34) Простите за грубость - аутизм лечится, а карьеризм нет. Планировать и управлять базой человеку неинтересно.
   polosov
 
37 - 12.10.21 - 14:47
(34) Сегодня ты в базе ХХвП, а завтра ты уйдешь другую организацию говнокодить.
   Конструктор1С
 
38 - 12.10.21 - 14:51
(31) используется, если это первое поле в индексе, или по более высоким полям индекса было фильтрануто на равно.

Допустим, есть регистр сведений с измерениями Контрагент, Товар, Акция. Все ссылки, идут в перечисленно порядке. Индекс отработает при отборах
Контрагент = ...
Товар = ...
Акция В ()


Контрагент = ...
Товар В ()


Контрагент В ()
   ДядяМитяй
 
39 - 12.10.21 - 14:52
КОГДА &Фильтр = ЗНАЧЕНИЕ(Справочник.ИлиНеСправочникАЧтоТамУВас.ПустаяСсылка) ТОГДА Истина
ИНАЧЕ (ВТ.Поле1 = &Фильтр)
   acanta
 
40 - 12.10.21 - 15:03
(38) Спасибо. Смутно что-то помню про порядок измерений в регистрах типовых конфигураций. В регистре остатки товаров -  партия, товар, склад. И получение остатков в форме списка справочника ТМЦ запросом. То есть индексировать регистр вообще смысла не имело.
   Eiffil123
 
41 - 12.10.21 - 17:15
(37) ну уйдешь и далее что? из-за этого объем данных резко вырастет и запрос перестанет работать?
   polosov
 
42 - 12.10.21 - 17:16
(41) Ты этого уже не узнаешь.
   Eiffil123
 
43 - 12.10.21 - 17:23
(42) верно, не узнаешь
   Eiffil123
 
44 - 12.10.21 - 17:24
можно подумать, вы пишете нетленки на века
   АнализДанных
 
45 - 12.10.21 - 17:27
(4) Посмотри мое последнее сообщение в этой теме Как избежать рваного запроса Я там приложил процедуру с примером.


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