Книга знаний

1С:Предприятие / v8

v8: Временные таблицы в 8.1

Использование временных таблиц в 8.1Автор статьи: Гений 1С | Редакторы: Sol78, ILM, zag2art, Alex_Sun, Kreont,
Последняя редакция №5 от 23.04.08 | История
URL: http://kb.mista.ru/article.php?id=628

В 8.1. появились временные таблицы. Они хранятся на сервере и позволяют писать более простые запросы.
Временные таблицы хранятся в объекте типа Запрос. Когда этот объект уничтожается, уничтожаются и временные таблицы.
Чтобы создать временную таблицу, используется ключевое слово "ПОМЕСТИТЬ В", например:
ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары

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

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

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

Запрос=Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары");
Запрос.Выполнить(); //Создалась таблица ВТТовары
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТовары");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; //Копируем ссылку на временные таблицы
ТЗ=ЗапросТМП.Выполнить().Выгрузить(); //Получаем временную таблицу в таблице значений


Готовую таблицу значений из памяти можно выгружать в менеджер временных таблиц запроса. Единственное условие - у  Вот пример, демонстрирующий это (спасибо Чепелевич А.А., раньше я думал что это невозможно):

ТЗ=Новый ТаблицаЗначений();
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));

//Заполняем таблицу данными
Стр=ТЗ.Добавить();
Стр.А="А";
Стр.Б="Б";
Стр=ТЗ.Добавить();
Стр.А="А1";
Стр.Б="Б1";


//Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос=Новый Запрос("Выбрать Т.А, Т.Б ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
//Вариант: Запрос=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",ТЗ);
Запрос.Выполнить();

//Получаем таблицу из менеджера временных таблиц запроса
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТаб");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; 
ТЗ1=ЗапросТМП.Выполнить().Выгрузить(); 
ТЗ1.ВыбратьСтроку(); //Показываем полученную таблицу


Вместо перечисления списка полей можно использовать "ВЫБРАТЬ *".

Функция для просмотра ВТ в отладчике:
Функция  ЛукВТ(Запрос, ИмяВнутреннейТаблицы) Экспорт
    Перем ЗапросТМП, Р;
    //Получаем таблицу из менеджера временных таблиц запроса
    ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ "+ИмяВнутреннейТаблицы);
    ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; 
    Р=ЗапросТМП.Выполнить().Выгрузить(); 
    Возврат Р;
КонецФункции



Вот как получить список всех ВТ, не знаю. Видимо никак.


Недостатки временных таблиц:
1. Если в тексте запроса есть временная таблица, то этот запрос не разбирается конструктором запроса (это ограничение можно обойти нештатно, используя объявление подзапроса Книга знаний: v8: Конструирование сложных запросов для 1С). В релизе 8.1.11 можно использовать конструктор
2. Нельзя удалить временную таблицу.
3. Нельзя выполнить запрос над временной таблицей и поместить данные в нее же саму.



Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика