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

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

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

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

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

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

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

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

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

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

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

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

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

// Области, существовавшие ранее.
исп Область1 = новый ОбластьВидимостиВременныхТаблиц()
исп Область2 = новый ОбластьВидимостиВременныхТаблиц()

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

При этом все таблицы из существующих областей (Область1, Область2) становятся доступны в этой области (Область3). Если в существующих областях есть таблицы с одинаковыми именами, то «1С:Шина» выбросит исключение.

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

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

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

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

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

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

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

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

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

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

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

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