v8: Вопрос про Пакетный Режим запросов (выполнение Запроса в цикле) #377144


#0 by nop
Результатом будет 1 таблица?
#1 by Mitriy
а сколько надо?
#2 by Fragster
нет
#3 by GenV
Результат берется из последнего запроса с выборкой
#4 by nop
столько отдельных таблиц, сколько запросов в пакете
#5 by Mitriy
не взлетит, не для ентого енто...
#6 by nop
где можно почитать, посмотреть примеры?
#7 by NULLL
Зависит от метода, которым выполнять запрос. Их два: Выполнить и ВыполнитьПакет.
#8 by nop
О! ВыполнитьПакет - это похоже то что надо
#9 by GenV
Точно. Давно я в AddDoc не заглядывал.
#10 by nop
можно простенький пример текста запроса?
#11 by nop
ап
#12 by AquaKosh
#13 by nop
очень хорошая статья. Спасибо
#14 by Мелкий бес
добавлю: 1. использование МассиваРезультатов КонецЕсли 2. в конце запроса всегда помнить о    УНИЧТОЖИТЬ ИмяВременнойТаблицы
#15 by AquaKosh
Навеяно : Если не чистить за собой временные таблицы (или через менеджер временных таблиц, или непосредственно через УНИЧТОЖИТЬ), то в консоли сервера 1С будет висеть занятость базы SQL, как будто выполняется запрос (в серверном варианте, конечно).
#16 by Mitriy
млин... тож пасиб :)
#17 by nop
у меня такая ситуация: текст запроса меняется в цикле и нужно получить результаты каждого из них. ВыполнитьПакет не подойдет?
#18 by Fragster
запихать все в 1 пакетный запрос через ";"... виды документов обходишь? объедини их в журнал... правда с блокировками возникнут косяки, если нагрузка большая...
#19 by Мелкий бес
1. возможно в тексте запроса есть постоянная часть и есть переменная часть постоянную часть вынести во временную таблицу и в использовать ее в цикле 2. если цикл не бесконечный, то можно собрать пакетный запрос и выполнить его один раз. а потом в цикле просматривать результаты
#20 by nop
вот пример
#21 by AquaKosh
Дык зависит от методики построения... Если используется ПАКЕТНЫЙ запрос, т.е. в одном тексте запроса много запросов, которые делают временные таблицы (ПОМЕСТИТЬ врТаб), то тогда ВыполнитьПакет. А если каждый запрос, который создаётся в цикле тут же выполняется, а потом делается Выборка/Выгрузить, тогда Выполнить.
#22 by nop
+ грубо говоря мне надо выполнить этот запрос 2 раза: 1 раз по РегистрБухгалтерии.Хозрасчетный, 2ой - РегистрБухгалтерии.Управленческий и получить результаты обоих запросов, и вернуть их из функции в Соответствие (с ключами) Функция ПолучитьСуммуСписанияАктивов.
#23 by nop
Вот пока что я использую второй способ с циклом и Выполнить. Где понятные запросы - переписываю под ОБЪЕДЕНИТЬ, СОЕДИНЕНИЕ. Иначе выполняю запрос в цикле. Но есть мысль что с ВыполнитьПакет производительность будет больше.
#24 by AquaKosh
Так если всего два запроса, да ещё и по разным регистрам, да ещё и не срощенные вместе... зачем пакетный запрос? Обычные два запроса...
#25 by AquaKosh
Не увидел 22... :)
#26 by nop
ну потому что во первых надо разобраться с пакетным режимом, во вторых, по моему, будет все же немного быстрее, потому что текст передается серверу 1 раз, и результат будет возвращен 1 куском.
#27 by AquaKosh
Не, затраты времени на передачу текста запроса по сравнению с временем выполнения оного - ничтожны, поэтому если два запроса по разным регистрам, то выигрыша, имхо, на глаз не заметить.
#28 by nop
Возможно. Но для практики (понимания) сделаю с ВыполнитьПакет
#29 by Живой Ископаемый
2 Главное сами тексты запросов в коде нужно разделить, а то констурктор будет хавать только последний запрос из пакета...
#30 by AquaKosh
Лично я юзаю временные таблицы только в больших запросах, в которых есть более-менее одинаковые куски, перевод которых на временные таблицы даёт СУЩЕСТВЕННОЕ ускорение, т.к. запросы к регистрам делаются 1 раз, а дальше идёт юзанье уже временных таблиц.
#31 by nop
я вот не пойму из статьи: Почему первые 2 будут содержать только число? Из-за слова ПОМЕСТИТЬ ?
#32 by Fragster
лучше через "Объединить Все" делай - оно у тебя сразу одну таблицу вернет
#33 by AquaKosh
Эм... Не я автор и, честно говоря, уже не помню подробности... Сейчас почитаю... ПОМЕСТИТЬ - это признак того, что требуется создать виртуальную таблицу.
#34 by AquaKosh
Вот описание ВыполнитьПакет из СП: Синтаксис: ВыполнитьПакет Возвращаемое значение: Тип: Массив. Описание: Последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета. Результаты помещаются в массив в последовательности расположения запросов в тексте пакета. Результатом выполнения запроса на уничтожение временной таблицы является значение Неопределено, которое также помещается в массив результатов. Верить, соответственно, лучше СП. :)
#35 by Живой Ископаемый
+ стопроцентов - так и есть
#36 by AquaKosh
Посмотри ещё про "МенеджерВременныхТаблиц" у запроса. Иногда его очень удобно использовать.
#37 by nop
это просто оболочка что бы помещать в неё запросы и иметь доступ к временным талицам?
#38 by AquaKosh
Ну типа того. Но у этой фишки есть плюс: текст запроса не обязательно должен включать сразу все временные таблицы, т.е. можно ОДНОМУ И ТОМУ ЖЕ экземпляру объекта ЗАПРОС, передавать различные тексты и выполнять их (через Выполнить) сколько угодно раз - менеджер будет запоминать эти временные таблицы и по ним ПОЗЖЕ можно будет строить запросы, например если на данный момент не известны какие-либо параметры или ещё чего...
#39 by nop
вот что было ----------------- ----------------- Вот что стало -----------------
#40 by AquaKosh
Ох, ё.... А где переносы? :))
#41 by nop
О_О какие переносы? Пост криво отображается?
#42 by AquaKosh
После беглого осмотра того, что СТАЛО, скажу вот что: я не знаю, сколько видов учёта, но это будет ОЧЕНЬ медленно, т.к. у тебя, предположительно, туча однотипных запросов к одному регистру. Лучше сделай так: создай ОДИН запрос к ОДНОМУ регистру с минимальным отбором и помести его во временную таблицу + про индекс на вид учёта не забудь. А далее выбирай данные уже из этой виртуальной таблицы, накладывая отбор по виду учёта.
#43 by AquaKosh
У меня 39-ый пост отобразился одной ОООООЧЕНЬ длинной строкой.
#44 by nop
а щас?
#45 by AquaKosh
+ к : у тебя там ещё отбор по регистратору? Хм... Его тоже в индекс.
#46 by AquaKosh
О, сейчас ок.
#47 by nop
до завтра, надо бежать
#48 by Serg_1960
Прочитал вопрос - понял, что ничего не понял :( Почитал ответы - понял, что ничего не знал :( Спасибо за "хороший" вопрос :)
#49 by nop
:)
#50 by NULLL
Посоветую на угад. Я бы это выполнял в запросе:
#51 by nop
О_о как?
#52 by NULLL
Для опеределения типпа данных в запросе можна сипользовать логический оператор ССылка.
#53 by nop
можно простой пример? Я вообще ничего не понял, что за оператор?
#54 by NULLL
И используйте псевдонимы.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С