| 
    
        
     
     | 
    
    
  | 
Стоит ли менять Или на И в условиях запроса | ☑ | ||
|---|---|---|---|---|
| 
    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) Посмотри мое последнее сообщение в этой теме Как избежать рваного запроса Я там приложил процедуру с примером.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |