Что такое менеджер временных таблиц?
Если говорить в общем смысле, то Менеджер временных таблиц (МВТ) — это встроенный механизм. Он позволяет сохранять промежуточные результаты запросов и использовать их в нескольких запросах подряд. Для этого в 1С существует специальный объект конфигурации, который хранит временные таблицы. Он управляет их жизненным циклом и называется — МенеджерВременныхТаблиц (далее часто МВТ).
Простыми словами, главное назначение МВТ — переносить временные таблицы из одного запроса в другой. В этом случае нам не нужно пересчитывать их каждый раз заново и не дублировать сложные условия.
Как создать и использовать менеджер временных таблиц
1. Создать объект Менеджер временных таблиц
Впервую очередь необходимо создать экземпляр объекта МенеджерВременныхТаблиц.
МенеджерВТ = Новый МенеджерВременныхТаблиц;2. Привязать Менеджер временных таблиц к запросу
У объекта Запрос есть свойство МенеджерВременныхТаблиц. В него нужно передать созданный менеджер.
Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;3. Создать временную таблицу в запросе
Для создания временной таблицы в запросе используется ключевое слово ПОМЕСТИТЬ. Либо можно это сделать на вкладке Дополнительно в Конструкторе запроса.
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос1.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.ИНН КАК ИНН
|ПОМЕСТИТЬ втКонтрагенты
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
После выполнения такого запроса таблица «втКонтрагенты» будет сохранена в менеджере временных таблиц и доступна для следующих запросов.
4. Использовать временную таблицу в следующем запросе
Во втором запросе, привязанном к тому же менеджеру временных таблиц, можно обращаться к уже созданной временной таблице, как к обычной таблице. На выходе получаем следующий итоговый код:
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос1.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.ИНН КАК ИНН
|ПОМЕСТИТЬ втКонтрагенты
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
... // возможно какой-то код
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст =
"ВЫБРАТЬ
| втКонтрагенты.Ссылка КАК Ссылка,
| втКонтрагенты.Наименование КАК Наименование,
| втКонтрагенты.ИНН КАК ИНН,
| ДоговорыКонтрагентов.Наименование КАК НаименованиеДоговора,
| ДоговорыКонтрагентов.ДатаНачалаДействия КАК ДатаНачалаДействия,
| ДоговорыКонтрагентов.ДатаОкончанияДействия КАК ДатаОкончанияДействия,
| ДоговорыКонтрагентов.Дата КАК Дата,
| ДоговорыКонтрагентов.Номер КАК Номер
|ИЗ
| втКонтрагенты КАК втКонтрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПО втКонтрагенты.Ссылка = ДоговорыКонтрагентов.Контрагент"Чтобы добавить уже созданную ранее временную таблицу в конструкторе запросов необходимо воспользоваться кнопкой «Создать описание временной таблицы». В открывшемся окне необходимо описать поля созданной таблицы.

*Стоит сделать поправку, что в реальной практике после описания временной таблицы ее желательно поместить во временную таблицу, прежде чем соединяться с реальными таблицами. Но в данном примере этот этап был опущен для наглядности использования созданной ВТ в новом запросе.
Жизненный цикл временной таблицы
У временных таблиц есть чёткий жизненный цикл:
- Временная таблица создаётся при выполнении запроса с оператором
ПОМЕСТИТЬ. - Она хранится в памяти или на диске (внутри СУБД). Временная таблица доступна только в рамках действия менеджера временных таблиц.
- После завершения работы с менеджером (или при явном удалении) таблица уничтожается и больше не доступна.
Если нужно явно удалить временную таблицу до окончания работы, применяют специальный метод УНИЧТОЖИТЬ:
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ втКонтрагенты
Если же необходимо удалить все временные таблицы, хранящиеся в МВТ, то можно использовать метод Закрыть() менеджера временных таблиц.
МенеджерВТ.Закрыть();В этом случае МВТ закрывается, все находящиеся в нем временные таблицы удаляются, дальнейшая работа с ним невозможна.