|   |   | 
| 
 | Когда построитель отчета/запроса фактически выполняет запрос? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Asmody 31.01.22✎ 16:51 | 
        В СП написано:
 ПостроительОтчета (ReportBuilder) Выполнить (Execute) Синтаксис: Выполнить() Описание: Выполняет запрос, построенный для отчета казалось бы, однако дальше написано: Примечание: Выставляет внутренний флаг необходимости перевыполнения запроса при выводе отчета (метод Вывести) и получении результата запроса. т.е. по факту Выполнить() ничего не выполняет. Что, в общем-то, подтверждают замеры. Внимание, вопрос - это оно давно так? | |||
| 1
    
        Ненавижу 1С гуру 31.01.22✎ 17:08 | 
        Надо этот тип пометить как obsolete/deprecated     | |||
| 2
    
        Casey1984 31.01.22✎ 17:09 | 
        (0) А если к полю Результат обратиться, выполняется запрос?     | |||
| 3
    
        Casey1984 31.01.22✎ 17:10 | 
        (2) А вот наверное ответ: "и получении результата запроса"     | |||
| 4
    
        ale-sarin 31.01.22✎ 17:15 | 
        Давно. По мне, так всегда было. Запрос к БД выполняется не при Выполнить(), а при обращении к результату.
 Результат = Построитель.Выполнить(); // Запрос не выполняется ТЗ = Результат.Выгрузить(); // Вот тут и будет выполнен запрос. | |||
| 5
    
        ale-sarin 31.01.22✎ 17:16 | 
        В первый раз, конечно, тоже было неожиданно, надо признаться.     | |||
| 6
    
        Casey1984 31.01.22✎ 17:17 | 
        (0) Судя по посту https://forum.infostart.ru/forum9/topic53309/ давно/всегда :-)     | |||
| 7
    
        ale-sarin 31.01.22✎ 17:19 | 
        Опечатка у меня. 
 Построитель.Выполнить() и Построитель.Результат.Выгрузить() | |||
| 8
    
        VS-1976 31.01.22✎ 18:27 | 
        (0) Ну как же не выполняет, а кто будет преобразовывать текст в текст запроса для объекта запрос? Просто второй раз не просит уже     | |||
| 9
    
        acht 31.01.22✎ 20:15 | 
        (8) "преобразовывать текст в текст запроса для объекта запрос" и обращаться к информационной базе - сильно разные вещи.     | |||
| 10
    
        VS-1976 31.01.22✎ 20:51 | 
        (9) ну так это же не .Выбрать(), а всего лишь .Выполнить()     | |||
| 11
    
        ДедМорроз 31.01.22✎ 22:29 | 
        Как бы,во взрослом sql есть отдельно prepare,когда формируется план запроса и execute,когда запрос выполняется.
 Так что ничего удивительного. | |||
| 12
    
        pechkin 31.01.22✎ 22:31 | 
        Интересно какой смысл в такой "оптимизации". В каком сценарии нужно построитель выполнить, но ничего не получать? | |||
| 13
    
        Asmody 31.01.22✎ 23:09 | 
        (12) давеча наткнулся на кусок 💩🐘 (или, как его называют, "легаси-кода"), где было получение результата построителя без Выполнить().
 Вот тут меня сомнения накрыли. | |||
| 14
    
        pechkin 31.01.22✎ 23:18 | 
        А у построителя запроса аналогично?     | |||
| 15
    
        ale-sarin 01.02.22✎ 09:55 | 
        (14) Да     | |||
| 16
    
        fisher 01.02.22✎ 12:47 | 
        Прикольно. Любопытный пример плохого дизайна.     | |||
| 17
    
        Asmody 02.02.22✎ 21:10 | 
        Сегодня нарвался на ещё один эффект: если тот самый построитель с тяжелым запросом открыть в отладчике до установки всяких отборов, то можно получить неслабую висюльку "на двоих".
 Слушай, обидно, ничего не сделал, только вошёл https://www.youtube.com/watch?v=ksRVC_UAYyA | |||
| 18
    
        mistеr 02.02.22✎ 21:38 | 
        (16) Или плохой документации, как посмотреть.     | |||
| 19
    
        sitex naïve 02.02.22✎ 21:53 | 
        (0) Если база SQL то включаем Profiler и анализируем     | |||
| 20
    
        TormozIT гуру 03.02.22✎ 00:45 | 
        (17) 10 лет назад я пожаловался на эту особенность в 1С. Но исправлять не стали. https://partners.v8.1c.ru/forum/topic/1039031     | |||
| 21
    
        TormozIT гуру 03.02.22✎ 00:50 | 
        (20)+ Забавный факт. Через 2 года переписки по этой проблеме я получил ответ "интересующая Вас ошибка еще готовится к публикации в системе". До сих пор видимо "публикуют".     | |||
| 22
    
        fisher 03.02.22✎ 10:22 | 
        (18) Если метод Выполнить() ничего не выполняет и не потому что кэш, а потому что выполнение будет в другом месте - это плохой дизайн API.
 Во-первых, метод нужно было назвать иначе ибо его название вводит в заблуждение. Во-вторых, даже с учетом документации нифига неочевидно, зачем он нужен и как его правильно применять. | |||
| 23
    
        Asmody 03.02.22✎ 11:50 | 
        (21) Понятно, что они давно забили на построители, ибо мейнстрим - это СКД. А проблемы индейцев шерифа, как известно, не пенетрируют.     | |||
| 24
    
        TormozIT гуру 04.02.22✎ 12:12 | 
        Сегодня мне сообщили из 1С, что баг (20) 20003151 исправлен в 8.3.5     | |||
| 25
    
        Курцвейл 04.02.22✎ 12:24 | 
        если бы писали приложение на java или иных ООП языках, то было понятнее почему и зачем так сделано.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |