Временные таблицы 1с – хранятся на сервере и позволяют писать более простые запросы.
Временные таблицы 1с в конструкторе запросов.
Для создания или уничтожения предназначена вкладка «Дополнительно». На данной вкладке указывается имя временной таблице.
Добавляем Запрос пакета на вкладке “Пакет запросов”:
Далее такая таблица появляется в дереве «Таблицы/Базы данных»:
Код запроса 1с содержащий временную таблицу 1с Предприятие 8:
Запрос.Текст="ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
| МАКСИМУМ(ПриходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура КАК Номенклатура,
| ЕСТЬNULL(НоменклатураДокумента.Цена, 0) КАК Цена,
| ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
| ПО НоменклатураДокумента.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
|ИТОГИ
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура";
Использование менеджера временных таблиц 1с
Временные таблицы 1с создаются при помощи МенеджерВременныхТаблиц.
Временные таблицы хранятся в объекте типа МенеджерВременныхТаблиц. Когда этот объект уничтожается, уничтожаются и временные таблицы.
Чтобы создать временную таблицу, используется ключевое слово “ПОМЕСТИТЬ“, например:
ВЫБРАТЬ
ПриходнаяНакладнаяСписокНоменклатуры.Ссылка КАК Ссылка,
ПриходнаяНакладнаяСписокНоменклатуры.НомерСтроки КАК НомерСтроки,
ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
ПриходнаяНакладнаяСписокНоменклатуры.Количество КАК Количество,
ПриходнаяНакладнаяСписокНоменклатуры.Цена КАК Цена,
ПриходнаяНакладнаяСписокНоменклатуры.Сумма КАК Сумма
ПОМЕСТИТЬ НоменклатураДокумента
ИЗ
Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
Пошаговое создание временных таблиц:
Во-первых создаем МенеджерВТ:
МенеджерВТ=новый МенеджерВременныхТаблиц;
На данным этапе создаем Запрос:
Запрос=новый Запрос;
Связываем Запрос и Менеджер временных таблиц:
Запрос.МенеджерВременныхТаблиц=МенеджерВТ;
Во-вторых работаем с запросом. Вводим текст запроса с использованием ключевого слова ПОМЕСТИТЬ(Первый код в статье).
Запрос.Текст="ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
| МАКСИМУМ(ПриходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура";
Устанавливаем Параметры для запроса при необходимости.
Запрос.УстановитьПараметр("Ссылка",Ссылка);
В-третьих записываем временную таблицу.
Запрос.Выполнить();
Краткий кодс использованием временных таблиц 1с:
МенеджерВТ=новый МенеджерВременныхТаблиц;
Запрос=новый Запрос;
Запрос.МенеджерВременныхТаблиц=МенеджерВТ;
Запрос.Текст=«…ПОМЕСТИТЬ НоменклатураДокумента…." ;
Запрос.УстановитьПараметр("Ссылка",Ссылка);
РЗ=Запрос.Выполнить();
как использовать временные таблицы в 1с
Во-первых создаем запрос::
Запрос2=новый запрос();
Во-вторых получаем временную таблицу из ранее созданной временной таблице:
Запрос2.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;
В-третьих используем в запросе созданную временную таблицу:
Запрос2.Текст="Выбрать * из НоменклатураДокумента";
Далее с запросом можно выполнять все доступные операции.
Особенности использования временных таблиц 1с
- Запрещено использовать в запросах динамического списка.
- Разрешается использовать в СКД.
- Временные таблицы особенно индексирование занимает некоторое время, но обычно их использование ускоряет запросы.
- Индексировать доступно только при наличии ПОМЕСТИТЬ, иначе будет вот такая ошибка «Синтаксическая ошибка индексировать ПО»
- Допустимо использовать в соединениях
- Появились в платформе 8.1, далее оптимизировалось их использование, синтаксис не менялся.