Работа с временными таблицами в языке запросов

В языке запросов можно использовать временные таблицы. Они повышают производительность запросов и делают сложные запросы более легкими для восприятия.

Для работы с временными таблицами используются:

  • тип встроенного языка ОбластьВидимостиВременныхТаблиц, который хранит в себе данные временных таблиц;
  • синтаксис языка запросов, позволяющий создавать новые временные таблицы и использовать существующие временные таблицы.

Область видимости временных таблиц

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

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

Экземпляр типа ОбластьВидимостиВременныхТаблиц можно создать с помощью метода ОбластьВидимостиВременныхТаблиц.Открыть():

исп Область1 = ОбластьВидимостиВременныхТаблиц.Открыть()

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

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

Доступность существующих временных таблиц

При создании новой области видимости таблицы, созданные в существующих областях видимости, недоступны в новой области. Чтобы они стали доступны, используйте параметр метода:

// Области, существовавшие ранее.
исп Область1 = ОбластьВидимостиВременныхТаблиц.Открыть()
...
исп Область2 = ОбластьВидимостиВременныхТаблиц.Открыть()
...
// Новая область, включающая в себя область 2
исп Область3 = ОбластьВидимостиВременныхТаблиц.Открыть(Ложь)

При этом все таблицы из предыдущей открытой области (Область2) становятся доступны в этой области (Область3).

Создание временной таблицы

Временную таблицу можно создать двумя способами:

Рассмотрим подробнее первый вариант создания временной таблицы.

// Создать область видимости. Она понадобится другими запросам, 
// которые будут использовать эту же временную таблицу.
исп Область1 = ОбластьВидимостиВременныхТаблиц.Открыть()

// Создать запрос, выбирающий данные и помещающий их 
// во временную таблицу.
знч Запрос = Запрос{ВЫБРАТЬ
                        Сотрудники.Ссылка КАК Ссылка, 
                        Сотрудники.ФИО КАК ФИО, 
                        Сотрудники.Код КАК Код
                    ПОМЕСТИТЬ
                        ВременнаяТаблица
                    ИЗ 
                        Сотрудники КАК Сотрудники
                    ИНДЕКСИРОВАТЬ ПО
                        Код}

// Выполнить запрос и заполнить временную таблицу.
Запрос.Выполнить()

В запросе используются предложения ПОМЕСТИТЬ и ИНДЕКСИРОВАТЬ ПО, которые помещают выбранные данные во временную таблицу и создают в ней индекс по полю Код. Псевдонимы элементов списка выборки (Ссылка, ФИО, Код) становятся именами полей временной таблицы.

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

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

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

Важно: Все запросы, которые работают с одними и теми же временными таблицами, должны исполняться в рамках одной и той же области видимости временных таблиц.

Удаление временных таблиц

Для удаления некоторых записей из временной таблицы используйте предложение УДАЛИТЬ, а для удаления всей временной таблицы используйте предложение УНИЧТОЖИТЬ.