1с временная таблица как параметр запроса
Перейти к содержимому

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

  • автор:

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, далее оптимизировалось их использование, синтаксис не менялся.

Реклама — это когда изо всех сил колотят палкой по днищу пустой кастрюли.

— Джордж Оруэлл

Добавить комментарий

Ваш адрес email не будет опубликован.