Просмотр временных таблиц запроса

При построении запросов, в языке 1с есть возможность получения результата выполнения запроса с помощью команды: " ПОМЕСТИТЬ ", где — имя "временной таблицы", которая является свойством объекта "Запрос" и представляет из себя объект типа МенеджерВременныхТаблиц, который описывает пространство имен временных таблиц и отвечает за их создание и уничтожение в базе данных. Данный механизм применяется для получения промежуточных данных запросов для дальнейшего их использования в других запросах, что позволяет сделать удобней их отладку, оптимизировать код, сделать запросы более читаемыми.

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

Добавляем к себе в модуль следующую функцию (серверную, если это управляемое приложение):

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

Теперь в переменной Табл содержится временная таблица Итоговая, ее можно просмотреть в отладке или вывести в табличный документ.

Время жизни

При выполнении запроса платформа уничтожает все временные таблицы, которые были созданы в рамках его выполнения. То есть, время жизни временных таблиц, создаваемых в рамках одного запроса со стороны платформы 1С:Предприятие, начинается от момента создания таблицы в запросе и завершается по его выполнении.

При этом возможно уничтожить временную таблицу программным образом, выполнив в одном из пакетов запроса инструкцию "УНИЧТОЖИТЬ ". Тогда платформа выполняет SQL-команду "TRUNCATE" на уничтожение временной таблицы.

При использовании менеджера временных таблиц, если таблицы не были явно уничтожены разработчиком (инструкция запроса "УНИЧТОЖИТЬ", сброс менеджера временных таблиц в "Неопределено" или методом "Закрыть()"), то платформа уничтожает их самостоятельно после того, как был уничтожен контекст, в рамках которого они были сформированы. Другими словами, объект будет уничтожен при завершении процедуры или функции, в которой он был создан.

Читайте также  Рейзер фон 2 цена

Влияние на производительность

Использование временных таблиц позволяет существенно снизить нагрузку на SQL-сервер за счет многократного использования ранее сформированной выборки из таблицы в других запросах. Конечно, создание и хранение временных таблиц занимает дополнительные ресурсы, но, по сравнению с тратой ресурсов при повторных запросах к таблицам, этот вариант более оптимальный.

Создание же временных таблиц на основе таблицы значений может нести негативное влияние на производительность, поскольку передача таблицы значений и заполнение на ее основе временной таблицы на SQL-сервере может занять длительное время и создать дополнительную нагрузку на систему. Использовать эту возможность нужно только в том случае, если в дальнейшем запросы интенсивно используют данные из таблицы значений. В противном случае более оптимальным был бы шаг по обработке этой таблицы программным образом после выполнения запроса к базе данных. Точный ответ зависит от конкретной задачи.

Вывод

Поддержка временных таблиц платформой 1С:Предприятие позволяет писать более оптимальные запросы к базе данных, при этом сам текст запроса также упрощается и становится более читабельным.

Самым главным аргументом в пользу использования временных таблиц является то, что их использование позволяет SQL-серверу строить более оптимальные планы запросов.

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

Добавляем к себе в модуль следующую функцию(серверную, если это управляемое приложение):

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

Теперь в переменной Табл содержится временная таблица Итоговая, ее можно просмотреть в отладке или вывести в табличный документ.

Читайте также  Почему твиттер на английском языке

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

Рассмотрим 4 способа получения этой информации.

Данные: в наличии имеется бесполезный запрос с двумя временными таблицами (“Подразделения”, “Пользователи”):

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

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

Способ 1. Берем консоль запросов для разработчиков под управляемые формы, вставляем наш туда текст запроса и с помощью панели управления таблицами, выводим их в табличный документ:

Для обычных форм так же существуют консоли запросов, в которых можно просматривать временные таблицы. Для примера можете её взять из подсистемы “Инструменты разработчика”.

Способ 2. Используя процедуру многих типовых конфигураций: “ПоказатьВременнуюТаблицу”. Если в вашей конфигурации таковой не имеется, то приведу полное её описание (смело копируйте в свой общий модуль):

Ссылка на основную публикацию
Adblock
detector