|   |   | 
| 
 | Стоит ли менять Или на И в условиях запроса | ☑ | ||
|---|---|---|---|---|
| 0
    
        arancar 12.10.21✎ 11:43 | 
        В рамках задачи нужно было при подготовке данных для формируемого внешнего источника данных отчета сформировать таблицу, прокинув условия по необязательным параметрам формирования отчета, т.е. добавить к двум десяткам запросов по 3-5 условий вида
 <code> &ИспользованиеФильтра И (ВТ.Поле1 = &Фильтр) Или Не &ИспользованиеФильтра </code> Раскладывать подобный запрос с учетом возможных сочетаний через объединения бессмысленно. Имеет ли смысл в подобных ситуациях играться с булевой алгеброй и заменять условие по "Или" через условие по "И" и "Не" <code> A или B = Не (Не А И Не B) </code> что с учетом сокращенного вычисления логических выражений сводит исходное условие к <code> Не (&ИспользованиеФильтра И Не ВТ.Поле1 = &Фильтр) </code> | |||
| 1
    
        Asmody 12.10.21✎ 11:47 | 
        Только профайлер тебе даст точный ответ на этот вопрос.     | |||
| 2
    
        ДенисЧ 12.10.21✎ 11:50 | 
        Имеет смысл в этом случае воспользоваться компоновкой или построителем запроса.
 Или руками собирать текст запроса. А не извращаться с условиями. | |||
| 3
    
        pechkin 12.10.21✎ 11:54 | 
        Не &ИспользованиеФильтра  ИЛИ ВТ.Поле1 = &Фильтр     | |||
| 4
    
        arancar 12.10.21✎ 12:01 | 
        (2) Спасибо, раньше с объектом Построитель не сталкивался, хотя и использовал Компановку данных внутри СКД отчетов. Похоже идеальное решение и значительно упростит читабельность кода самого запроса.     | |||
| 5
    
        ДенисЧ 12.10.21✎ 12:02 | 
        "Стаж: 7 лет 10 месяцев"
 Я ухожу в афуй, извинте. | |||
| 6
    
        arancar 12.10.21✎ 12:04 | 
        (3) Основная задача - уйти от табуированного использования Или в условии запроса.     | |||
| 7
    
        acht 12.10.21✎ 12:05 | 
        (6) > табуированного
 Кем и почему? | |||
| 8
    
        polosov 12.10.21✎ 12:07 | 
        (7) Он про ИЛИ в секции ГДЕ, наверное.     | |||
| 9
    
        acht 12.10.21✎ 12:08 | 
        (8) Да какая разница
 Что плохого в конструкции (Поле1 = 1) ИЛИ (Поле1 = 2) ? | |||
| 10
    
        mikecool 12.10.21✎ 12:09 | 
        (9) иногда плохо, но надо смотреть планы запросов     | |||
| 11
    
        polosov 12.10.21✎ 12:09 | 
        (9) Ответ на ИТС есть. Такое рекомендуется заменять объединением запросов     | |||
| 12
    
        acht 12.10.21✎ 12:11 | 
        (10) К чорту ИТС, мне нужна конкретно твоя интрепретация.
 И чем это условие отличается от Поле1 В (1, 2) ? | |||
| 13
    
        youalex 12.10.21✎ 12:11 | 
        (9) тем что его можно заменить на Поле1 В (1, 2)
 ) | |||
| 14
    
        acht 12.10.21✎ 12:11 | 
        (13) Нетарапись =)     | |||
| 15
    
        Малыш Джон 12.10.21✎ 12:12 | 
        (13) а в чем разница?     | |||
| 16
    
        youalex 12.10.21✎ 12:12 | 
        (14) не успел)     | |||
| 17
    
        Малыш Джон 12.10.21✎ 12:14 | 
        (9) вот интересно, а если заменить на 
 НЕ((Поле1 <> 1) И (Поле1 <> 2)) это улучшит ситуацию? | |||
| 18
    
        polosov 12.10.21✎ 12:15 | 
        (17) Если невозможно будет использовать индексы, то не улучшит.     | |||
| 19
    
        mikecool 12.10.21✎ 12:15 | 
        (12) согласен про ИТС, только хардкор!     | |||
| 20
    
        2mugik 12.10.21✎ 12:19 | 
        (0)Ставлю на черное) Если индексы есть МС СКЛ их найдет. А так имхо ответ в 1.     | |||
| 21
    
        pechkin 12.10.21✎ 12:19 | 
        условие на <> еще хуже чем или     | |||
| 22
    
        Малыш Джон 12.10.21✎ 12:20 | 
        (21) чем же?     | |||
| 23
    
        acht 12.10.21✎ 12:25 | 
        (19) Ну, есть надежда, что он сам ИТС откроет и прочитает.
 Вторая надежда, что он попытается понять и третья - что сможет пересказать своими словами... | |||
| 24
    
        ДенисЧ 12.10.21✎ 12:33 | 
        Кому не нравится (по религиозным соображениям) ИТС, можете почитать вот это
 http://rsdn.org/forum/db/8090508.flat#8090508 | |||
| 25
    
        ILM модератор 12.10.21✎ 12:34 | 
        ВЫБОР используйте. Всегда когда есть куча условий в отчете, то мой выбор ВЫБОР.     | |||
| 26
    
        Малыш Джон 12.10.21✎ 13:15 | 
        (25) а ВЫБОР чем от ИЛИ отличается? В данном контексте.     | |||
| 27
    
        Конструктор1С 12.10.21✎ 13:45 | 
        НЕ Поле1 = &Значение1 - не будет использовать индекс
 Поле1 <> &Значение1 - не будет использовать индекс Поле1 = &Значение1 ИЛИ Поле1 = &Значение2 Поле1 = &Значение3 - будет использовать индекс (с оговорками) | |||
| 28
    
        2mugik 12.10.21✎ 13:50 | 
        (24)rsdn это гуд. Я там про блокировки читал.     | |||
| 29
    
        ДенисЧ 12.10.21✎ 13:50 | 
        (28) Я в курсе, мне говорили. В смысле, я читал )))     | |||
| 30
    
        Конструктор1С 12.10.21✎ 14:00 | 
        (27) последнее условие читать так:
 Поле1 = &Значение1 ИЛИ Поле1 = &Значение2 ИЛИ Поле1 = &Значение3 это аналог Поле1 В(&Значение1, &Значение2, &Значение3) | |||
| 31
    
        acanta 12.10.21✎ 14:02 | 
        А в случае  Поле1 В(&Значение1, &Значение2, &Значение3) индекс используется?     | |||
| 32
    
        Eiffil123 12.10.21✎ 14:31 | 
        (0) если объем данных небольшой и скорость работы устраивает - не имеет никакого смысла. Заниматься оптимизацией нужно тогда и в тех местах, где это действительно нужно.     | |||
| 33
    
        polosov 12.10.21✎ 14:34 | 
        (32) А когда база встанет колом, то будет немного поздно.     | |||
| 34
    
        Eiffil123 12.10.21✎ 14:38 | 
        (33) а почему она должна встать колом? всегда же можно это планировать и этим управлять.     | |||
| 35
    
        Почему 1С 12.10.21✎ 14:40 | 
        (31) Зависит что планировщик решит, может использовать, а может и нет.     | |||
| 36
    
        acanta 12.10.21✎ 14:44 | 
        (34) Простите за грубость - аутизм лечится, а карьеризм нет. Планировать и управлять базой человеку неинтересно.     | |||
| 37
    
        polosov 12.10.21✎ 14:47 | 
        (34) Сегодня ты в базе ХХвП, а завтра ты уйдешь другую организацию говнокодить.     | |||
| 38
    
        Конструктор1С 12.10.21✎ 14:51 | 
        (31) используется, если это первое поле в индексе, или по более высоким полям индекса было фильтрануто на равно.
 Допустим, есть регистр сведений с измерениями Контрагент, Товар, Акция. Все ссылки, идут в перечисленно порядке. Индекс отработает при отборах Контрагент = ... Товар = ... Акция В () Контрагент = ... Товар В () Контрагент В () | |||
| 39
    
        ДядяМитяй 12.10.21✎ 14:52 | 
        КОГДА &Фильтр = ЗНАЧЕНИЕ(Справочник.ИлиНеСправочникАЧтоТамУВас.ПустаяСсылка) ТОГДА Истина
 ИНАЧЕ (ВТ.Поле1 = &Фильтр) | |||
| 40
    
        acanta 12.10.21✎ 15:03 | 
        (38) Спасибо. Смутно что-то помню про порядок измерений в регистрах типовых конфигураций. В регистре остатки товаров -  партия, товар, склад. И получение остатков в форме списка справочника ТМЦ запросом. То есть индексировать регистр вообще смысла не имело.     | |||
| 41
    
        Eiffil123 12.10.21✎ 17:15 | 
        (37) ну уйдешь и далее что? из-за этого объем данных резко вырастет и запрос перестанет работать?     | |||
| 42
    
        polosov 12.10.21✎ 17:16 | 
        (41) Ты этого уже не узнаешь.     | |||
| 43
    
        Eiffil123 12.10.21✎ 17:23 | 
        (42) верно, не узнаешь     | |||
| 44
    
        Eiffil123 12.10.21✎ 17:24 | 
        можно подумать, вы пишете нетленки на века     | |||
| 45
    
        АнализДанных 12.10.21✎ 17:27 | 
        (4) Посмотри мое последнее сообщение в этой теме Как избежать рваного запроса Я там приложил процедуру с примером.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |