Временные таблицы в запросах 1С 8.3

Временная таблица

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

Создается временная таблица с помощью ключевого слова ПОМЕСТИТЬ:

В данном примере выборка из справочника Бренды будет помещена во временную таблицу ВТБренды, а уже потом данные будут выбраны из временной таблицы.

При создании новой временной таблицы она не сохраняется в базе данных. В файловой базе временные таблицы хранятся в оперативной памяти, в MS SQL Server в специальной служебной базе TempDB.

Также временные таблицы можно использовать для оптимизации работы СУБД. Если вместо временной таблицы использовать вложенный запрос, то оптимизатор не будет знать сколько строк в этой таблице и не сможет оптимизировать план запроса. В случае использования временной таблицы количество строк будет известно, что позволит лучше оптимизировать план запроса.

Но у временных таблиц есть и свои минусы:

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

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

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

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

Затем его можно указать в свойстве МенеджерВременныхТаблиц запроса:

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

Запрос на создание временной таблицы вернет одну строку с колонкой Количество. В этой колонке будет количество строк во временной таблице.

Уничтожить временную таблицу можно несколькими способами:

  • Использовать метод Закрыть менеджера временных таблиц
  • Использовать ключевое слово УНИЧТОЖИТЬ в запросе.
  • Все временные таблицы, которыми управляет менеджер временных таблиц будут автоматически удалены при удалении переменной, в которой хранился менеджер временных таблиц. Например, в процедуре был создан новый менеджер временных таблиц, при выходе из этой процедуры все временные таблицы будут автоматически удалены.

Пример уничтожения временной таблицы в запросе:

Индексы временных таблиц

Временные таблицы можно индексировать. Индексирование позволит ускорить операции соединения с временными таблицами, фильтрацию (условие ГДЕ) и т.п. Но на построение индексов тратится время. Поэтому не стоит индексировать все подряд временные таблицы. Например, таблицу в которой три строки точно не нужно индексировать. И не нужно индексировать все поля. Индексировать нужно те поля, которые будут использоваться в условиях отбора (ГДЕ) и в условиях соединения таблиц.

Индексирование выполняется с помощью ключевого слова ИНДЕКСИРОВАТЬ ПО после которого указываются поля, которые нужно проиндексировать.

Получить данные временной таблицы

Если при выполнении запроса использовался менеджер временных таблиц, то можно через него посмотреть содержимое временных таблиц. Это можно сделать через свойство Таблицы менеджера:

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


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok