«Использование пакетных запросов» – бесплатные материалы из курса «Разработка и оптимизация запросов в 1С:Предприятие 8.2 и 8.3»

О чем эта статья

В статье рассказывается о механизме пакетных запросов, реализованных в платформе «1С:Предприятие». Прочитав статью, вы узнаете:

  • Что такое пакетные запросы и для чего они нужны?
  • Как создать пакет запросов при помощи конструктора запросов?
  • Как вернуть массив результатов для каждого запроса из пакета?

Применимость

Материал актуален для текущих версий платформы «1С:Предприятие» редакции 8.3

Назначение пакета запросов

Платформа позволяет работать с пакетами запросов. Получаем возможность выполнить несколько запросов «за раз». В пакетном запросе тексты запросов разделяются символом «;» (точка с запятой).

Запросы исполняются последовательно, при этом временные таблицы, которые были созданы во время исполнения какого-либо запроса, будут существовать до окончания исполнения всего пакета запроса или до исполнения в пакете запроса, уничтожающего данную временную таблицу. Важное отличие от вложенного запроса заключается в том, что доступны результаты каждого запроса пакета отдельно.

Пакеты запросов позволяют достичь поэтапного выполнения запроса. Для этого в пакетном запросе сначала происходит создание временных таблиц, далее – их совместное использование (соединение, объединение, фильтры) для получения итогового результата запроса. Также важно отметить, что использование временных таблиц в пакетных запросах позволяет улучшить читаемость текста запроса.

Объемные запросы с завернутыми друг в друга вложенными запросами зачастую бывают достаточно сложными для восприятия. Но если переписать такой запрос с использованием временных таблиц, наглядность запроса может повыситься достаточно сильно. Применение пакета запросов с временными таблицами также может повысить производительность запроса.

Существуют методики оптимизации производительности запросов, основанные на замене вложенных запросов на временные таблицы.

Временная таблица может быть полезна, когда необходимо использовать одни и те же данные в большом запросе несколько раз, например, соединяя или объединяя с другими таблицами. При использовании вложенных запросов такие данные пришлось бы получать несколько раз при помощи одинаковых вложенных запросов, что, безусловно, сказалось бы и на читаемости текста, и на производительности.

Создание пакета запросов при помощи конструктора

Отдельные запросы, входящие в пакет, отделяются в тексте символом «;» (точка с запятой). Чтобы не разделять текст запроса вручную, можно использовать для этого конструктор запросов.
В конструкторе запросов есть отдельная закладка для пакетов запросов. Запросы в пакет можно добавлять при помощи соответствующей кнопки на командной панели, а также передвигать вверх или вниз.

Конструктор запроса

Визуальное отображение отдельных запросов – закладки в правой части конструктора, при помощи которых можно перейти к редактированию текста отдельного запроса. На этих закладках для временных таблиц выводятся имена, для запросов на выборку данных – «Запрос пакета 2» и т.п., на уничтожение – «– ИмяВТ».

Редактирование текста отдельного запроса

Также в списке таблиц базы данных появляются временные таблицы, созданные в рамках данного пакета. Однако это не означает, что временные таблицы хранятся в базе данных вместе со всеми остальными таблицами информационной базы.

Выполнение запросов пакета

Если объекту Запрос, исполняющему пакетный запрос, установлен менеджер временных таблиц, временные таблицы, которые не были уничтожены в рамках пакетного запроса, сохранятся в установленном менеджере.

В тексте пакетного запроса возможно использование и уничтожение временных таблиц, которые существовали в установленном менеджере временных таблиц на момент запуска пакета на исполнение.

Кроме метода Выполнить(), последовательно выполняющего все запросы пакета и возвращающего результат последнего запроса в пакете, в платформе существует еще один метод – ВыполнитьПакет().

Этот метод последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета в последовательности расположения запросов в тексте пакета.

Результатом выполнения запроса на уничтожение временной таблицы является значение Неопределено, которое также помещается в массив результатов.

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Бесплатные материалы курса по Запросам в PDF-формате

Статья в PDF-формате

Вы можете скачать эту статью в формате PDF: Курсы-по-1С.рф – Материалы из курса по запросам – Использование пакетных запросов.pdf

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

5 комментариев к “«Использование пакетных запросов» – бесплатные материалы из курса «Разработка и оптимизация запросов в 1С:Предприятие 8.2 и 8.3»

    • Василий Ханевич сказал:

      Вот буквально на днях видел конструкцию УНИЧТОЖИТЬ в запросе для заполнения декларации по налогу на имущество организаций. Также уничтожение временных таблиц встречается в многоэтажных запросах для расчета заработной платы. Еще встречал в правилах конвертации данных для переноса остатков по ОС из Бухгалтерии 1.6 в 2.0. А в конфигурации УПП 1.3 УНИЧТОЖИТЬ вообще встречается более 300 раз (при расчете себестоимости, зарплатных операциях, переоценке валютных средств, отчетных формах и т.д.).

      • andr_andrey сказал:

        “Убрать за собой” – это хорошая практика в принципе, меньше растут темплоги, меньше утечек памяти.

    • Сергей Онучин сказал:

      Важны случаи, когда нельзя обойтись без уничтожения временных таблиц. Это будет необходимо, если запрос с временными таблицами выполняется в цикле (о, ужас!). На самом деле, если мы итерациями хотим получить решение, на каждом витке проверяя, насколько мы приблизились к нему, то именно в этом случае мы будем использовать предыдущий результат выполнения запроса для получения следующего. То есть из ВремТаб1 получаем ВремТаб2, а из ВремТаб2 – снова ВремТаб1. И здесь надо уничтожить временную таблицу, прежде чем получать таблицу с тем же именем.

      • Василий Ханевич сказал:

        Дополню только, что на практике подобный способ выполнения запроса с временными таблицами в цикле можно увидеть, например, в типовой конфигурации УПП 1.3 при заполнении регламентированной формы РегламентированныйОтчетИмущество. Уничтожение временной таблицы производится, чтобы на следующем витке цикла не получилась временная таблица с таким же именем.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Мы используем файлы cookies, чтобы сделать сайт удобнее.
Продолжая просмотр сайта, Вы соглашаетесь с их использованием.
Подробнее