|   |   | 
| 
 | Значение() или параметр запроса? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Начинающий одинэсник 03.06.21✎ 17:43 | 
        Привет,
 Есть 2 запроса: ВЫБРАТЬ ЗаказКлиента.Ссылка ИЗ Документ.ЗаказКлиента КАК ЗаказКлиента ГДЕ ЗаказКлиента.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовКлиентов.Закрыт) Или такой вариант: ВЫБРАТЬ ЗаказКлиента.Ссылка ИЗ Документ.ЗаказКлиента КАК ЗаказКлиента ГДЕ ЗаказКлиента.Статус = &Закрыт и передача параметра &Закрыт в запрос. В документации не нашел ответа на следующий вопрос: В случае использования конструкции ЗНАЧЕНИЕ() в запросе, будет ли для каждой строки таблицы ЗаказКлиента происходить запрос к перечислению, или оно умное и получит значение перечисления всего 1 раз? Как в случае с передачей значения перечисления в запрос по параметру. Или это абсолютно одинаковые вещи? | |||
| 1
    
        Ненавижу 1С гуру 03.06.21✎ 17:49 | 
        Значение это не функция, а способ получения константы, как и ДатаВремя     | |||
| 2
    
        Начинающий одинэсник 03.06.21✎ 17:51 | 
        (1) Ок. 
 Обращение к этой константе происходит N раз в первом случае и 1 раз во втором, верно? | |||
| 3
    
        ДенисЧ 03.06.21✎ 17:55 | 
        (2) Можно посмотреть запрос, который идёт к серверу     | |||
| 4
    
        Mikeware 03.06.21✎ 17:57 | 
        (2) скорее, на этапе построения плана запроса.
 ведь насколько я понимаю, аргумент Значения() - константа? или я хреново понимаю? | |||
| 5
    
        youalex 03.06.21✎ 18:00 | 
        Скорее всего параметром втыкается в текст запроса скуля. 
 Точно не рассчитывается для каждой строчки таблицы) Вопрос, каким образом кэшируется(если кэшируется), и получается ли повторно, если дважды используется в тексте запроса 1С | |||
| 6
    
        fisher 03.06.21✎ 18:03 | 
        (2) Скорее всего предопределенные кэшируются и при трансляции запроса подставляется готовый литерал. То есть вообще ни одного запроса не будет.     | |||
| 7
    
        Начинающий одинэсник 03.06.21✎ 18:10 | 
        Сколько людей столько и мнений)
 Почему корпорация 1С не документирует такие вещи? или не там ищу? | |||
| 8
    
        VS-1976 03.06.21✎ 18:12 | 
        (0) В данном случае константа будет передан на в запрос в виде значения     | |||
| 9
    
        ДенисЧ 03.06.21✎ 18:16 | 
        (7) А зачем? Может, ты ещё захочешь руками индексы создавать? И план запроса прямо в языке 1с получать?     | |||
| 10
    
        ДенисЧ 03.06.21✎ 18:16 | 
        А потом ещё update и delete в языке запросов потребуешь....     | |||
| 11
    
        ДенисЧ 03.06.21✎ 18:16 | 
        Довольно того, что есть надежда, что ЗНАЧЕНИЕ() не вычисляется 100500 раз.     | |||
| 12
    
        ildary 03.06.21✎ 19:38 | 
        (9) похвально задавать подобные вопросы, лишь бы топикстартер не разочароваться со временем от большого количества "потому что гладиолус".     | |||
| 13
    
        Ненавижу 1С гуру 03.06.21✎ 23:44 | 
        Варианта два, либо передается как параметр, либо непосредственно в тексте запроса прописана константа, все остальное не логично     | |||
| 14
    
        DimVad 04.06.21✎ 06:19 | 
        Как бы 1С рекомендует пользоваться значениями. Что было бы очень странно если это соединение :)     | |||
| 15
    
        DrZombi гуру 04.06.21✎ 06:59 | 
        (0) Это кому как нравится, я вот предпочитаю писать через значения, там где можно, не заморачиваться с лишними параметрами :)     | |||
| 16
    
        DrZombi гуру 04.06.21✎ 07:00 | 
        (2) Нет, но вы можете поспорить :)     | |||
| 17
    
        DrZombi гуру 04.06.21✎ 07:03 | 
        (7) перечисление уже константа, его не меняют каждую секунду.     | |||
| 18
    
        Мимохожий Однако 04.06.21✎ 07:06 | 
        (0) Я за первый вариант. Пора делать голосовалку )     | |||
| 19
    
        Мультук гуру 04.06.21✎ 07:32 | 
        (0) Говорят, что в нормальных консолях есть возможность увидеть, а затем и посмотреть глазами план запроса.
 P.S. Врут, поди (с) | |||
| 20
    
        DrZombi гуру 04.06.21✎ 07:50 | 
        (19) Нет, не врут, SQL могет, а еще SQL может делать такие связки запросов, что 1С курит в сторонке.
 И что бы это сделать в 1С, надо написать еще парочку десятку строчек и замедлить запрос до максимума :) | |||
| 21
    
        Жан Пердежон 04.06.21✎ 09:18 | 
        (0) (2) >> будет ли для каждой строки таблицы ЗаказКлиента происходить запрос к перечислению
 давно б уже sql-запросы глянул и увидел, что они одинаковые | |||
| 22
    
        aka MIK 04.06.21✎ 09:40 | 
        (20) SQL не делает связки запросов, их делает сервер 1С
 SQL может неправильно выбрать план запроса, это да, конечно если запрос написан так, что допускает разные толкования | |||
| 23
    
        eTmy 04.06.21✎ 09:44 | 
        Открыть профайлер видимо уже совсем лень     | |||
| 24
    
        СвинТуз 04.06.21✎ 09:47 | 
        Белоусов говорит все это фантики.
 Разницы нет. План запроса к скл базе будет один и тот же. Вопрос только предпочтений и длинны написанного кода. | |||
| 25
    
        Hans 04.06.21✎ 10:00 | 
        Белоусов устарел. Все что можно - через значения.     | |||
| 26
    
        СвинТуз 04.06.21✎ 10:01 | 
        (25)
 не без этого. | |||
| 27
    
        Ненавижу 1С гуру 04.06.21✎ 10:10 | 
        константы безусловно быстрее компилируют/подготавливают запрос к выполнению чем параметры
 параметры более универсальны, можно разные параметры вставлять в экземпляр запроса насколько это критично - вопрос холливарный | |||
| 28
    
        VS-1976 14.09.21✎ 16:15 | 
        (27) Да там при создании запроса к базе константу в виде значения передают, там нет подзапроса. Сами константы кэшируются, по этому использовать значение() оправдано     | |||
| 29
    
        ДенисЧ 14.09.21✎ 16:16 | 
        (27) "константы безусловно быстрее компилируют/подготавливают запрос к выполнению чем параметры"
 Правда, сама 1с об этом не знает... Вот только что встретил в типовой "И ПометкаУдаления = &пометка" и передаётся безусловная ложь параметром... | |||
| 30
    
        mikecool 14.09.21✎ 16:20 | 
        (29) а насколько свежая типовая? может ее корни еще с 8.0 тянутся     | |||
| 31
    
        Chai Nic 14.09.21✎ 16:22 | 
        (29) А вы уверены, что параметр запроса 1с транслируется в параметр запроса sql? А не подставляется в текст запроса в виде константы при трансляции?     | |||
| 32
    
        ДенисЧ 14.09.21✎ 16:22 | 
        (30) БП3 предпоследнего релиза...
 А откуда там ноги растут... | |||
| 33
    
        ДенисЧ 14.09.21✎ 16:23 | 
        (31) В данном случае не уверен, не проверял. Но обычно передаётся в скуль.     | |||
| 34
    
        H A D G E H O G s 14.09.21✎ 16:24 | 
        (0) Пофиг     | |||
| 35
    
        acht 14.09.21✎ 16:26 | 
        (31) > А не подставляется в текст запроса 
 Уверенно не подставлется, платформщики не дураки. Все оборачивается в параметризованный sp_executesql, иначе кэшу планов запросов очень больно. | |||
| 36
    
        VS-1976 14.09.21✎ 16:30 | 
        (31) Если программист задаёт параметр, то 1с и будет транслировать в параметр sql, платформа же не знает и не анализирует, будешь ли ты задавать true или false неоднократно в один и тот же запрос     | |||
| 37
    
        youalex 14.09.21✎ 16:34 | ||||
| 38
    
        ДенисЧ 14.09.21✎ 16:35 | 
        (37) "WHERE (T1._Marked = 0x00) AND T1._Posted = 0x01"
 Это из какого 1с-запроса странслировано? | |||
| 39
    
        Новый1сник2 14.09.21✎ 16:36 | 
        второй вариант с параметром больше нравится     | |||
| 40
    
        Вафель 14.09.21✎ 16:37 | 
        отлаживать с ЗНАЧЕНИЕ() проще     | |||
| 41
    
        youalex 14.09.21✎ 16:38 | 
        (38) 
 выбрать первые 100 Номер Из документ.мойдок where пометкаудаления = &t И Проведен | |||
| 42
    
        ДенисЧ 14.09.21✎ 16:39 | 
        (41) Хм... А если взять не стандартный реквизит, тоже булёвый? (у меня под рукой сейчас нет серверной 1с с доступом к скулю)     | |||
| 43
    
        Chai Nic 14.09.21✎ 16:40 | 
        (36) В момент выполнения запроса платформа однозначно знает все параметры, которые были переданы запросу. И может строить запрос с учетом этого знания.     | |||
| 44
    
        youalex 14.09.21✎ 16:41 | 
        (42) аналогично:
 WHERE (T1._Marked = 0x00) AND (T1._Fld2792 = 0x00) AND T1._Posted = 0x01 | |||
| 45
    
        ДенисЧ 14.09.21✎ 16:44 | 
        (44) Забавно...     | |||
| 46
    
        VS-1976 14.09.21✎ 16:46 | 
        (43) В момент знает, а если это процедура, которая неоднократно используется. Зачем платформе думать за программиста? Может ещё искусственный интеллект в компилировании применять? Скулю по большому для внутренней производительности счету всё равно, параметр это или константа     | |||
| 47
    
        Chai Nic 14.09.21✎ 16:52 | 
        (46) А какая связь между 1с и хранимыми процедурами? Зачем 1с вообще связываться с процедурами и прочими диалектами.. проще писать запросы в SQL-92 стандарте и не заморачиваться - они на любом сервере выполнятся одинаково..     | |||
| 48
    
        ДенисЧ 14.09.21✎ 16:58 | 
        (47) "какая связь между 1с и хранимыми процедурами?"
 Прямая. Что ни на есть. sp_executesql() называется. | |||
| 49
    
        ДенисЧ 14.09.21✎ 16:59 | 
        (47) "Зачем 1с вообще связываться с процедурами"
 Кеш процедур, компиляция процедур... Не, никогда не слышал... | |||
| 50
    
        acht 14.09.21✎ 17:06 | 
        (37) > если только примитивные типы
 А усложни запрос, чтобы не булево, а число было - код справочника там какой нибудь. Что покажет? | |||
| 51
    
        youalex 14.09.21✎ 17:21 | ||||
| 52
    
        youalex 14.09.21✎ 17:24 | 
        даже элементарный запрос     | |||
| 53
    
        youalex 14.09.21✎ 17:26 | 
        (52) вида select &пар1 , если параметр дата, например - строит с переменными.     | |||
| 54
    
        youalex 14.09.21✎ 17:31 | 
        Это кстати, может связано с отличием, как скуль обрабатывает условия вида 1=0 (когда литерал) и @p1 = 0 (при @p1 = 1)     | |||
| 55
    
        Chai Nic 14.09.21✎ 17:53 | 
        (49) Есть подозрение, что ресурсы, затраченные на компиляцию запросов в случае баз 1с, на несколько порядков меньше затраты ресурсов непосредственно на выборку данных. И поэтому кэш процедур - ненужная роскошь.     | |||
| 56
    
        ДенисЧ 14.09.21✎ 17:54 | 
        (55) Сомнение несколько необосновано.     | |||
| 57
    
        Chai Nic 14.09.21✎ 18:03 | 
        (56) Неоднократно трассировал разные запросы, везде на построение плана тратились единицы-десятки миллисекунд. А непосредственно на выборку - значительно больше.     | |||
| 58
    
        Chai Nic 14.09.21✎ 18:04 | 
        +(57) Это может для сайтов характерно, когда все запросы одинаковые, отличаются лишь параметрами, часто повторяются и обрабатывают немного данных.. там кэширование плана реально помогает. Но не для конфигураций 1с.     | |||
| 59
    
        Андроны едут 14.09.21✎ 18:09 | 
        можно еще так
 ГДЕ ЗаказКлиента.Статус.Порядок = 1 | |||
| 60
    
        VS-1976 14.09.21✎ 18:18 | 
        (58) Тут ты не прав. К примеру для добавление в список чего нибудь, каких нибудь колонок, к примеру для РН, выборка нескольких ПКО ( нал + оплата картой ). Так вот запрос ( не для уф. ) можно сделать переменной на Украине модуля и делать выборки для измененных данных списка, так вот объект Запрос повторяется многократно, а если несколько касс, так ещё и н на нескольких клиентах...     | |||
| 61
    
        ДенисЧ 14.09.21✎ 19:03 | 
        (60) "можно сделать переменной на Украине модуля"
 Чувствуете ветерок? Это Фрейд в гробу завертелся )) | |||
| 62
    
        VS-1976 14.09.21✎ 19:10 | 
        (61) Поезд, качка + т9. На уровне модуля.     | |||
| 63
    
        acht 15.09.21✎ 09:27 | 
        (57) > Неоднократно
 Как же замечательно, что платформу пишешь не ты. Потрассируй что происходит при выводе списков там различных, формировании печатных документов. Неоднократно. | |||
| 64
    
        Малыш Джон 15.09.21✎ 09:58 | 
        ИМХО, ТСу, как начинающему одинэснику, должно быть фиолетово, как влияет (и влияет ли) использование предопределенных значений вместо параметров в запросе. Потому что вероятность того, что из под клавиатуры сразу будут выходить оптимальные запросы, стремится к нулю, и на этом фоне, параметр там будет или не параметр - значения не имеет.     | |||
| 65
    
        Малыш Джон 15.09.21✎ 10:00 | 
        +(64) это примерно как недавний спор, по поводу того, что оптимальнее писать в условии Если:  x<>0 или Не(х=0)     | |||
| 66
    
        acht 15.09.21✎ 10:04 | 
        (65) > Не(х=0)
 Очень позитивный код. Сплошные смайлики! | |||
| 67
    
        ДенисЧ 15.09.21✎ 10:12 | 
        (66) Ага (((     | |||
| 68
    
        Chai Nic 15.09.21✎ 11:18 | 
        (63) "Потрассируй что происходит при выводе списков там различных, формировании печатных документов. Неоднократно."
 Потрассировал. Ничего экстраординарного. Никаких сотен одинаковых запросов в секунду не происходит. Следовательно, выгоды от кэширования планов нет. Само собой, г..окод никто не отменял, но в типовых такого нет. | |||
| 69
    
        acht 15.09.21✎ 11:45 | 
        (68) Продолжай наблюдения. Тебя ж просили - неоднократно.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |