|   |   | 
| 
 | Что дают пакетные запросы? | ☑ | ||
|---|---|---|---|---|
| 0
    
        vi0 06.09.17✎ 13:55 | 
        Видите ли вы преимущества пакетного запроса перед использованием нескольких запросов? Какие?
 Известно, что временные таблицы можно передавать между запросами используя менеджер временных таблиц, т.е. по ВР вопроса не возникает. Допускаю, что при слабой связи, например в мобильном приложении или в веб-клиенте, есть смысл сократить количества обращений к серверу и делать пакетами. А в прочих случаях? | |||
| 27
    
        1dvd 06.09.17✎ 14:21 | 
        (15) 
 Процедура БезЦикла(КоличествоИтераций, Н = Неопределено) Если Н = Неопределено Тогда Н = 0; КонецЕсли; Н = Н + 1; Если Н<=КоличествоИтераций Тогда Сообщить(Н); БезЦикла(КоличествоИтераций, Н); КонецЕсли; КонецПроцедуры БезЦикла(15); | |||
| 28
    
        MrStomak 06.09.17✎ 14:23 | 
        Пакетный запрос имел смысл как способ оптимизации в обычном приложении, когда каждый вызов запроса обозначал передачу управления с клиента на сервер приложений.
 Сейчас, на УФ, имеет смысл только для удобства, всё и так на сервере делается, а СУБД будет вызвана в любом случае несколько раз. | |||
| 29
    
        Ненавижу 1С гуру 06.09.17✎ 14:23 | 
        (25) нет же, автоматическая сборка мусора, это прекрасно
 в шарпе и яве тоже есть пустой указатель null, но не стоит его путать с NULL из SQL | |||
| 30
    
        1dvd 06.09.17✎ 14:24 | 
        (28) Если один запрос, и данные берутся только из него, то обращение к БД будет только одно. Не?     | |||
| 31
    
        ELEA26 06.09.17✎ 14:24 | 
        (27) вариант с перейти ближе к циклу. Не используется стек (стэк).     | |||
| 32
    
        Ненавижу 1С гуру 06.09.17✎ 14:25 | 
        пакетный запрос это синтаксический сахар:
 1. удобно редакктировать как единый запрос в конструкторе 2. тоже самое в СКд 3. не надо напрягаться с удалением временных таблиц | |||
| 33
    
        Fish гуру 06.09.17✎ 14:25 | 
        (27) При относительно небольшом кол-ве итераций (сейчас не вспомню точное число, но что-то емнип около 40000) - 1С упадёт, не успев даже ругнуться :)     | |||
| 34
    
        1dvd 06.09.17✎ 14:25 | 
        (31) в определенных кругах за "перейти" пальцы прищемляют дверью     | |||
| 35
    
        1dvd 06.09.17✎ 14:26 | 
        (33) надо будет затестить     | |||
| 36
    
        MrStomak 06.09.17✎ 14:27 | 
        (30) Нет.
 Более того, обращений к СУБД может быть несколько даже при 1 запросе (когда используются ВТ (особенно регистра бухгалтерии) или конструкции "В иерархии", ну и еще наверняка есть варианты) | |||
| 37
    
        ELEA26 06.09.17✎ 14:29 | 
        (34) а за рекурсию вместо цикла нет? НюНю...     | |||
| 38
    
        patapum 06.09.17✎ 14:29 | 
        Менеджер временных таблиц лучше пакетника, если к одной временной таблице обращаешься несколько раз. У меня таких задач не помню, чтобы было. А зачем еще?     | |||
| 39
    
        ELEA26 06.09.17✎ 14:30 | 
        (36) еще всякие срезы последних. 1 запрос 1С >= 1 запрос к БД :)     | |||
| 40
    
        1dvd 06.09.17✎ 14:31 | 
        (36) хотя, да. Помнится, пытался трасернуть штатную ОСВ, которая на СКД. И глаза разбежались...     | |||
| 41
    
        Lazy Stranger 06.09.17✎ 14:32 | 
        (21) в языке Фортран-4, которому меня учили на первом курсе, циклы примерно так и выглядели, через if и goto     | |||
| 42
    
        1dvd 06.09.17✎ 14:33 | 
        ну, вы ещё язык Ассемблера вспомните или маш.код     | |||
| 43
    
        Адинэснег 06.09.17✎ 14:34 | 
        нафига городить с созданием менеджера ВТ, когда можно выполнить пакетный?     | |||
| 44
    
        Fish гуру 06.09.17✎ 14:34 | 
        (35) Я наврал. ОФ на 2.3.8 упала на 2025-й итерации :)))     | |||
| 45
    
        Адинэснег 06.09.17✎ 14:34 | 
        (43)->(0)     | |||
| 46
    
        MrStomak 06.09.17✎ 14:34 | 
        В Ассемблере даже не цикл, а просто условие через "goto" всё равно ;)     | |||
| 47
    
        Адинэснег 06.09.17✎ 14:35 | 
        (46) было в (2)     | |||
| 48
    
        MrStomak 06.09.17✎ 14:36 | 
        (47) Там речь про циклы!     | |||
| 49
    
        Fedor-1971 06.09.17✎ 14:36 | 
        (32) не совсем просто сахар. Есть оптимизатор SQL - ему проще получить пакет и построить план выбора данных для многих таблиц сразу, чем строить много планов
 (43) из-за оптимальности: выбрали доки в ВТ, потом на её основании добираем нужную информацию | |||
| 50
    
        1dvd 06.09.17✎ 14:37 | 
        (44) тоже затестил. Упал на 2026 :)
 1С:Предприятие 8.3 (8.3.8.2027) | |||
| 51
    
        aka MIK 06.09.17✎ 14:38 | 
        (38) если у тебя пакетный запрос, то юзать МВТ вообще без нужды     | |||
| 52
    
        MrStomak 06.09.17✎ 14:38 | 
        (49) Какое это имеет отношение к "Менеджер ВТ или пакетный запрос"?
 И там и там много планов. | |||
| 53
    
        Адинэснег 06.09.17✎ 14:38 | 
        (49) так это ты реготчетность с закрытием месяца пишешь? держи его, пасаны!     | |||
| 54
    
        ELEA26 06.09.17✎ 14:38 | 
        А еще временные таблицы можно индексировать...     | |||
| 55
    
        Адинэснег 06.09.17✎ 14:39 | 
        а в пакетном нельзя?     | |||
| 56
    
        MrStomak 06.09.17✎ 14:40 | 
        (54) Индекс, кстати, всегда 1 и кластерный.     | |||
| 57
    
        Fedor-1971 06.09.17✎ 14:41 | 
        (52) Про оптимизатор почему-то забыли.
 (53) к счастью нет. | |||
| 58
    
        MM 06.09.17✎ 14:43 | 
        (52) В пакетном запросе, теоретически, можно выполнять несколько запросов на СУБД одновременно, если они не используют данные друг друга.     | |||
| 59
    
        MrStomak 06.09.17✎ 14:43 | 
        (57) План составляется на каждый конкретный запрос. Всегда. Пакеты, не пакеты - пофигу. Или не составляется, если запрос вызывается через ХП и есть кэш.     | |||
| 60
    
        ELEA26 06.09.17✎ 14:45 | 
        (58) это если MS SQL и включен параллелизм? Тоже надо тестить... А реально было бы интересно. Если создаешь двумя запросами две разные ВТ, а потом с ними работаешь - было бы круто, если бы они формировались одновременно.     | |||
| 61
    
        MrStomak 06.09.17✎ 14:47 | 
        (60) Параллелизм работает внутри 1 запроса.
 Запросы в пакете выполняются последовательно. | |||
| 62
    
        ELEA26 06.09.17✎ 14:50 | 
        (61) Это да. Согласен. Меня там больше на фантазии понесло.     | |||
| 63
    
        Buster007 06.09.17✎ 14:52 | 
        (0) Почему не рекомендуется использовать запрос в цикле?
 Именно для этого и нужен пакетный запрос, а так ты можешь, конечно, и без пакетника. | |||
| 64
    
        MM 06.09.17✎ 14:52 | 
        (61) Выполняются последовательно 1С или MS SQL?     | |||
| 65
    
        lodger 06.09.17✎ 14:56 | 
        все такие умные. а где хранятся временные таблицы?
 если явно объявлен менеджерВТ, то на стороне предприятия. и вся эта когорта передается из\в СУБД для дальнейших запросов. логично? пока да. а вот пакетный запрос. 1с готовит запросы и отдает их в СУБД для исполнения, при этом где времянки? в ТемпДБ СУБД? или они перекатываются в сервер 1с для обработки в 1с? судя по монитору ресурсов - rphost при запросе немножко тужится и высырает что-то в скуль. дальше скуль тужится и один раз отдает все скопом в рпхост. но запрос тем временем большой и пакетный... простите за сумбур. | |||
| 66
    
        MrStomak 06.09.17✎ 14:57 | 
        (65)
 Временные таблицы хранятся на СУБД и никуда не передаются. Так что логика не очень. | |||
| 67
    
        lodger 06.09.17✎ 14:59 | 
        (66) а как это я ВТ могу помацать из отладчика если она на субд?     | |||
| 68
    
        ELEA26 06.09.17✎ 14:59 | 
        (65) ВТ все в tempdb...     | |||
| 69
    
        MrStomak 06.09.17✎ 14:59 | 
        (67) Отладчик запрос к субд на содержание ВТ делает. Точно также, как и наименование справочника ты можешь посмотреть из отладчика. Прикинь, он не хранит это в сервере ;)     | |||
| 70
    
        ELEA26 06.09.17✎ 15:00 | 
        (67) ты выборку с нее "мацаешь".     | |||
| 71
    
        lodger 06.09.17✎ 15:01 | 
        (69) наименование справочника это ж метаданные, они всегда на сервере есть.     | |||
| 72
    
        dezss 06.09.17✎ 15:02 | 
        (67) И как же ты ВТ "мацаешь"?
 Делаешь Выгрузить(), правильно? А не замечал, как эта Выгрузить() подтормаживает в отладчике? | |||
| 73
    
        MrStomak 06.09.17✎ 15:03 | 
        (71)
 Наменование основного средства не хранится в метаданных. А из отладчика, сюрприз!, видно. И дальше можно плюсиками раскрывать до чего угодно. | |||
| 74
    
        Адинэснег 06.09.17✎ 15:04 | ||||
| 75
    
        Адинэснег 06.09.17✎ 15:05 | 
        Если Вы используете объект МВТ, то временные таблицы рекомендуется удалять одним из первых 2 методов, как только в них отпала необходимость, иначе они будут висеть в памяти сервера СУБД, пока процедура/функция не закончит работу, что не есть хорошо   Источник: ©Курсы-по-1С.рф     | |||
| 76
    
        lodger 06.09.17✎ 15:06 | 
        (73) то о чем ты говоришь это реквизит, а Имя справочника это таки его метаданные.     | |||
| 77
    
        MrStomak 06.09.17✎ 15:09 | 
        (76) Тебе сказать по теме есть чего, кроме шокирующих открытий, что Имя справочника это оказывается таки его метаданные?     | |||
| 78
    
        Ненавижу 1С гуру 06.09.17✎ 15:10 | 
        (76) правильно, реквизит хранится в СУБД, но его можно посмотреть в отладчике     | |||
| 79
    
        lodger 06.09.17✎ 15:11 | 
        (74) все. тему можно закрывать.     | |||
| 80
    
        vi0 06.09.17✎ 15:15 | 
        (63) ошибаешься     | |||
| 81
    
        VS-1976 06.09.17✎ 15:19 | 
        (46) Да ладно а что тогда в ассемблере loop?     | |||
| 82
    
        VS-1976 06.09.17✎ 15:28 | 
        (68) Хотя могли бы сделать через курсоры...     | |||
| 83
    
        spiller26 06.09.17✎ 16:03 | 
        Я отвечу - "Просто удобно"     | |||
| 84
    
        vi0 07.09.17✎ 04:42 | 
        (82) курсоры это совсем другая тема     | |||
| 85
    
        assasu 07.09.17✎ 04:55 | 
        (17) если ты свой код собираешься поддерживать и вносить исправления - делай всегда отдельные запросы. 
 если пишешь код "на от@@ись" - пиши один запрос с кучей пакетов. так в нем будет сложнее разобраться. | |||
| 86
    
        VladZ 07.09.17✎ 05:01 | 
        Не понял проблемы.  Нужны пакетные - делаешь. Не нужны - не делаешь.
 От себя: мне еще ни разу не понадобились. | |||
| 87
    
        vi0 07.09.17✎ 07:44 | 
        (85) (86) спасибо за мнение от представителей радикальной фракции     | |||
| 88
    
        Ненавижу 1С гуру 07.09.17✎ 08:11 | 
        (86) ты наверное и писать то их не умеешь     | |||
| 89
    
        VS-1976 07.09.17✎ 08:53 | 
        (86) Есть к примеру ситуации, когда предварительные данные позже соединяются с разными таблицами. По этому пакетный запрос в каких то случаях может даже дать прирост производительности.     | |||
| 90
    
        dmpl 07.09.17✎ 09:10 | 
        (27) А БезЦикла(1000000) что дает?     | |||
| 91
    
        dmpl 07.09.17✎ 09:12 | 
        (34) А в других кругах перейти - единственный вариант ветвления. А за рекурсию без необходимости бьют везде.     | |||
| 92
    
        1dvd 07.09.17✎ 09:12 | 
        (90) см (50)     | |||
| 93
    
        1dvd 07.09.17✎ 09:13 | 
        (91) а можно пример когда перейти - единственный вариант ветвления?     | |||
| 94
    
        dmpl 07.09.17✎ 09:16 | 
        (63) Не рекомендуется, но используют. Даже инопланетяне (создатели типовых).     | |||
| 95
    
        dmpl 07.09.17✎ 09:20 | 
        (93) В микроконтроллерах нередко бывает что только jump по условию и есть.     | |||
| 96
    
        1dvd 07.09.17✎ 09:22 | 
        (95) вот это ты сейчас к чему вообще сказал?     | |||
| 97
    
        dmpl 07.09.17✎ 09:31 | 
        (96) Привел пример других кругов.     | |||
| 98
    
        lodger 07.09.17✎ 09:51 | 
        (85) просто вы не умеете их готовить. да и читать видимо тоже. большой запрос разбитый на пакеты в разы легче читается, отлаживается и редактируется, нежели мешанина закинутая в огромные вложенные запросы с десятками джойнов и юнионов.     | |||
| 99
    
        vi0 07.09.17✎ 09:52 | 
        (98) вопрос больше не про временные таблицы, а пакеты, которые могут быть и без временных таблиц     | |||
| 100
    
        lodger 07.09.17✎ 10:00 | 
        (99) ну т.е. когда запросы в пакете в общем то независимы друг от друга по больешй части, и потом разбираются через РезультатЗапроса[номер пакета]?
 тут я бы посетовал на то что рпхост несколько раз будет общаться с субд и передавать тудой-сюдой данные. и лучше бы один раз получить их все. накладные расходы на каждый запрос так и сяк выше чем на один пакет. но кого нынче волнует оптимизация. лучше купить ссд, нарастить оперативку, да камней побольше, ПОБОЛЬШЕ! p.s. в отладке пакет с независимыми запросами ну ничуть не сложнее чем просто кучка запросов. | |||
| 101
    
        dmpl 07.09.17✎ 10:07 | 
        (98) С пакетами проблема в том, что если надо вставить запрос - потом придется еще и код после запроса менять. Так что приходится сначала все временные таблицы готовить, и только потом пакет выполнять.     | |||
| 102
    
        dmpl 07.09.17✎ 10:09 | 
        (99) Пакет с временными таблицами - зло. Ведь в результат запроса попадут и все временные таблицы. Даже уничтоженные (уничтожение, кстати, тоже даст элемент в массиве результатов).     | |||
| 103
    
        vi0 07.09.17✎ 10:16 | 
        (100) неверно
 выше уже обсудили это | |||
| 104
    
        VS-1976 07.09.17✎ 10:52 | 
        (102) Это будет список "указателей". И твоё дело уже выгружать данные с базы данных или нет. Так что это не ужас, ужас, ужас...     | |||
| 105
    
        dmpl 07.09.17✎ 10:55 | 
        (104) Дык ресурсы сервера БД они занимать все равно будут. Даже когда уже не нужны от слова "совсем".     | |||
| 106
    
        VS-1976 07.09.17✎ 11:05 | 
        (105) Ну удаление есть временных таблиц в запросе. Можешь уничтожить объект пакет. А что ты считаешь что запрос ничего не потребляет? Понятно что для пакета требуется больше ресурсов, чем последовательное чтение того же самого. Но как я уже говорил выше, что есть случаи когда есть общие данные для последующей выборки разных данных это несколько ускоряет.     | |||
| 107
    
        vi0 07.09.17✎ 11:19 | 
        (106) > несколько ускоряет.
 что замеры показывают? | |||
| 108
    
        Dmitry1c 07.09.17✎ 11:22 | 
        (86) много теряешь     | |||
| 109
    
        dmpl 07.09.17✎ 11:44 | 
        (106) Дык удаление в пакете оставляет данные временной таблицы. Поэтому и требуется схема с менеджером временных таблиц, когда на первом этапе готовятся все нужные временные таблицы, на втором этапе выполняется пакет, далее все временные таблицы убиваются, и на сервере остаются только нужные нам результаты запроса. Более того, эта же схема не сбивает нумерацию результатов запросов, потому как новый запрос добавляется в конец, а все требуемые для него временные таблицы выбираются на первом этапе.     | |||
| 110
    
        SiAl-chel 07.09.17✎ 11:47 | 
        (85) Вообще полный бред. Один текст запроса удобней для поддержки и дальнейшей разработки, чем портянки, склеенные в коде. Текст я беру целиком, иду в консоль запросов, там его дорабатываю, потом возвращаю все назад. 
 С лоскутной портянкой текста запроса, надо перед его выполнением смотреть Запрос.Текст только во время отладки. Потом после доработки сравнивать старую версию текста запроса с новой, а уж потом в лоскутки текста запроса вносить изменения. Трудоемкость возрастает как минимум процентов на 50. | |||
| 111
    
        vi0 07.09.17✎ 11:54 | 
        (109) > удаление в пакете оставляет данные временной таблицы
 Откуда информация? | |||
| 112
    
        VS-1976 07.09.17✎ 12:23 | 
        (111) Он говорит о наверное о кэше данных в MS SQL :)
 (107) Это логический вывод. К примеру ты фильтруешь контрагентов в зависимости от условий. И тебе нужна сальдо ( дебиторка ) по этим контрагентам так же последние операции по нему, а так же отдельно выписки. Это всё выгружается к примеру в личный кабинет клиента в различные структуры, к примеру csv. Это простой пример, бывает таблица, на которой в последующем строятся различные отборы вычисляется сложнее. Можно конечно через менеджер временных таблиц, только зачем? Тебе нужно всё вычислить и выгрузить и больше тебе не нужно иметь таблицу-основу последующих воборок. Последующие соединения могут идти в принципе параллельно. Сетевое взаимодействие с сервером базы данных в пакетном режиме может происходить быстрее, так как нет сильного разнесения по времени. К примеру выполнил пакетный запрос и что-то крутишь, вертишь, ну а позже запросил данные. За это время данные успели испечься. | |||
| 113
    
        ptiz 07.09.17✎ 12:25 | 
        (0) Когда в 8.1 появились пакетные запросы, временные таблицы и индексирование колонок в таблице значений - я плакал от счастья!     | |||
| 114
    
        vi0 07.09.17✎ 12:28 | 
        (112) это все слова, нужны замеры     | |||
| 115
    
        VS-1976 07.09.17✎ 12:29 | 
        (114) Замерь     | |||
| 116
    
        vi0 07.09.17✎ 12:38 | 
        (115) я замерял на простом примере, разницы не увидел
 а разнесение во времени, о котором ты говоришь, измеряется миллисекундами, которым можно принебречь | |||
| 117
    
        VS-1976 07.09.17✎ 12:42 | 
        (116) А сервер баз данных как фокусник тебе данные мгновенно отдаёт? Если у тебя запрос к таблице с миллионами строк что тогда?     | |||
| 118
    
        vi0 07.09.17✎ 12:50 | 
        (117) не понял вопроса в контексте обсуждаемой темы     | |||
| 119
    
        Лефмихалыч 07.09.17✎ 12:51 | 
        (0) Вижу. Быстродействие.
 Всегда имеет смысл их использовать хотя бы потому, что вложенные запросы усирают читабельность запроса в край. И работают часто гораздо медленнее, чем соединения с временными. | |||
| 120
    
        Мимохожий Однако 07.09.17✎ 12:58 | 
        ОФФ: Люблю такие ветки. Столько умных людей собираются в кучу)) Это как про типовые втирать.     | |||
| 121
    
        aka MIK 07.09.17✎ 13:07 | 
        (119) Кстати, MS SQL научился (не знаю в какой версии) передавать параметры отбора во вложенный запрос (как СКД прям), так что самое время прекращать любить временные таблицы     | |||
| 122
    
        Timon1405 07.09.17✎ 13:21 | 
        (121) а как же postgres и курс на импортозамещение?     | |||
| 123
    
        Лефмихалыч 07.09.17✎ 13:28 | 
        (121) за вложенные запросы надо по рукам линейкой бить     | |||
| 124
    
        VS-1976 07.09.17✎ 13:32 | 
        (123) Тут ты не прав, всё зависит от рук их готовящих. Никто ещё не отменял правило думать головой, а думать головой помогает теоретическая подкованность в данной области.     | |||
| 125
    
        Timon1405 07.09.17✎ 13:45 | 
        (123) так-то любой запрос к таблице остатков - вложенный. переписывать все на физ.таблицы теперь?     | |||
| 126
    
        dmpl 07.09.17✎ 14:01 | 
        (111) Из опыта. Попробуй выбрать данные из уничтоженной таблицы.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |