1С 8.x : Временные таблицы, что из себя представляют и как с ними работать?
Временные таблицы — хранятся на сервере и позволяют писать более простые запросы.
Временные таблицы хранятся в объекте типа МенеджерВременныхТаблиц. Когда этот объект уничтожается, уничтожаются и временные таблицы.
Чтобы создать временную таблицу, используется ключевое слово "ПОМЕСТИТЬ В", например:
Код 1C v 8.х
Временная таблица создается при выполнении запроса, если повторно выполнить запрос, то выдастся ошибка, что таблица уже существует.
Описания временных таблиц хранятся в свойстве запроса МенеджерВременныхТаблиц. К сожалению, нельзя получить список временных таблиц, которые хранятся в запросе.
Пример 1: Как можно выгрузить временную таблицу в таблицу значений и как использовать менеджер временных таблиц:
Код 1C v 8.х
Вместо перечисления списка полей можно использовать "ВЫБРАТЬ * ".
Если есть ТЗ, в каждой колонке которой значения всего одного типа, для типизации колонок, можно воспользоваться функцией:
Код 1C v 8.х
Пример 2: Нужно в отчете СКД Связать Данные из Регистра Накопления ВзаиморасчетыСРаботниками и Табличной Части Документа ЗарплатаКВыплате по Ссылке на Документ и ФизЛицу! И вывести полученные данные за указанный Период(с ДатаН по ДатаК) — Запрос будет такой:
Код 1C v 8.х
Временные таблицы в конструкторе запросов
Рассмотрим создание временных таблиц при помощи конструктора запросов. Рассмотрим несколько ситуаций.
Как поместить результат запроса во временную таблицу
Создадим с помощью конструктора вот такой простейший запрос:
Соответственно текст запроса будет выглядеть следующим образом:
Но мы хотим поместить результат запроса во временную таблицу, которую назовем ВТ_Товары, то есть привести наш запрос вот к такому виду
Для этого нам необходимо перейти на закладку Дополнительно, установить тип запроса в положение Создание временной таблицы и заполнить поле с именем таблицы
Как прочитать временную таблицу из другого запроса
Очень часто при проектировании запросов большого объема возникает необходимость передавать временные таблицы из одного запроса в другой с использованием объекта МенеджерВременныхТаблиц. То есть вот такая ситуация:
Чтобы выбрать данные из временной таблицы, необходимо на закладке Таблицы и поля нажать на кнопку Создать описание временной таблицы и в открывшейся форме заполнить наименование таблицы и ее поля:
Как создать временную таблицу из параметра запроса
А теперь представим, что мы хотим выбрать данные во временную таблицу без использования менеджера временных таблиц — из внешнего источника данных, например, из таблицы значений. Такая ситуация уже рассматривалась ранее в статье о том как правильно поместить таблицу значений во временную. Применительно к текущей статье текст запроса выглядит вот так:
В этом случае нам надо сначала создать описание временной таблицы. А затем прописать ее имя на закладке Дополнительно.
То есть получается комбинация двух предудущих методов. Причем знак амперсанта можно также проставить в поле с именем таблицы:
Временные таблицы
В языке запросов временный таблицы являются промежуточным звеном для получения данных и обработки данных.
Общая концепция использования
- Данные , полученные любым способом, помещаются в некую таблицу с указанным именем
- Далее возможно обращение и выборка из данной таблицы по этому имени
- Обращение может быть многократным
- Таблицу можно уничтожить после применения
- Можно использовать позднее через объект менеджер временных таблиц
- Можно помещать несколько временных таблиц, но имена должны отличаться (перезаписи нет)
Синтаксис:
Запросы разделяются между собой «;» с переводом строки, этим формируются пакет запросов
Использование в конструкторе запросов
Для создания или уничтожения предназначена вкладка «Дополнительно»
Далее такая таблица появляется в дереве «Таблицы/Базы данных»:
У временной таблицы своя особая иконка таблицы.
Для временных таблиц доступна вкладка Индексы, использование которых может ускорить обработку данных временной таблицы.
Получится такой запрос:
ИНДЕКСИРОВАТЬ ПО
Один
;
Использование менеджера временных таблиц
[qu_spoiler title=»Код с иллюстрации» icon=»chevron-circle»]
// Далее можем что-то выполнить, а затем опять выбрать данные.
Запрос . Текст = «ВЫБРАТЬ * ИЗ ВремТаблица» ;
Выборка = Запрос . Выполнить ( ) . Выбрать ( ) ;
Предупреждение ( Выборка . Количество ( ) ) ;
Особенности
- Нельзя использовать в запросах динамического списка.
- Можно использовать в СКД.
- Временные таблицы особенно индексирование занимает некоторое время, но обычно их использование ускоряет запросы.
- Индексировать доступно только при наличии ПОМЕСТИТЬ, иначе будет вот такая ошибка «Синтаксическая ошибка индексировать ПО»
(система не ожидает эту команду в данном месте)
- Допустимо использовать в соединениях
- Появились в платформе 8.1, далее оптимизировалось их использование, синтаксис не менялся.
Реклама — это когда изо всех сил колотят палкой по днищу пустой кастрюли.
— Джордж Оруэлл