Записки программиста 1с

Временные таблицы 1с

Временные таблицы 1с – хранятся на сервере и позволяют писать более простые запросы.

Временные таблицы 1с в конструкторе запросов.

Для создания или уничтожения предназначена вкладка «Дополнительно». На данной вкладке указывается имя временной таблице. 

временные таблицы 1с
Вкладка “Дополнительно” в Консоли запросов 1с

Добавляем Запрос пакета на вкладке “Пакет запросов”:

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

Далее такая таблица появляется в дереве «Таблицы/Базы данных»:

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

Код запроса 1с содержащий временную таблицу 1с Предприятие 8:

Запрос.Текст="ВЫБРАТЬ
             |	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
             |	СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
             |	СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
             |	МАКСИМУМ(ПриходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена
             |ПОМЕСТИТЬ НоменклатураДокумента
             |ИЗ
             |	Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
             |ГДЕ
             |	ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
             |
             |СГРУППИРОВАТЬ ПО
             |	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура
             |;
             |
             |////////////////////////////////////////////////////////////////////////////////
             |ВЫБРАТЬ
             |	НоменклатураДокумента.Номенклатура КАК Номенклатура,
             |	ЕСТЬNULL(НоменклатураДокумента.Цена, 0) КАК Цена,
             |	ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток,
             |	ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток
             |ИЗ
             |	НоменклатураДокумента КАК НоменклатураДокумента
             |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
             |		ПО НоменклатураДокумента.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
             |ИТОГИ
             |	СУММА(КоличествоОстаток),
             |	СУММА(СуммаОстаток)
             |ПО
             |	Номенклатура";

Использование менеджера временных таблиц 1с

Временные таблицы 1с создаются при помощи МенеджерВременныхТаблиц.

временные таблицы 1с
создание временных таблиц 1с

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

ВЫБРАТЬ
	ПриходнаяНакладнаяСписокНоменклатуры.Ссылка КАК Ссылка,
	ПриходнаяНакладнаяСписокНоменклатуры.НомерСтроки КАК НомерСтроки,
	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
	ПриходнаяНакладнаяСписокНоменклатуры.Количество КАК Количество,
	ПриходнаяНакладнаяСписокНоменклатуры.Цена КАК Цена,
	ПриходнаяНакладнаяСписокНоменклатуры.Сумма КАК Сумма
ПОМЕСТИТЬ НоменклатураДокумента
ИЗ
	Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры

Пошаговое создание временных таблиц:

Во-первых создаем МенеджерВТ:

МенеджерВТ=новый МенеджерВременныхТаблиц;

На данным этапе создаем Запрос:

 Запрос=новый Запрос;

Связываем Запрос и Менеджер временных таблиц:

Запрос.МенеджерВременныхТаблиц=МенеджерВТ;

Во-вторых работаем с запросом. Вводим текст запроса с использованием ключевого слова ПОМЕСТИТЬ(Первый код в статье).

Запрос.Текст="ВЫБРАТЬ
             |	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
             |	СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
             |	СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
             |	МАКСИМУМ(ПриходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена
             |ПОМЕСТИТЬ НоменклатураДокумента
             |ИЗ
             |	Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
             |ГДЕ
             |	ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
             |
             |СГРУППИРОВАТЬ ПО
             |	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура";

Устанавливаем Параметры для запроса при необходимости.

Запрос.УстановитьПараметр("Ссылка",Ссылка);

В-третьих записываем временную таблицу.

Запрос.Выполнить();

Краткий кодс использованием временных таблиц 1с:

МенеджерВТ=новый МенеджерВременныхТаблиц;
Запрос=новый Запрос;
Запрос.МенеджерВременныхТаблиц=МенеджерВТ;
Запрос.Текст=«…ПОМЕСТИТЬ НоменклатураДокумента…." ;
Запрос.УстановитьПараметр("Ссылка",Ссылка);
РЗ=Запрос.Выполнить();

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

Во-первых создаем запрос::

Запрос2=новый запрос();

Во-вторых получаем временную таблицу из ранее созданной временной таблице:

Запрос2.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;

В-третьих используем в запросе созданную временную таблицу:

 Запрос2.Текст="Выбрать * из НоменклатураДокумента";

Далее с запросом можно выполнять все доступные операции.

Особенности использования временных таблиц 1с

  • Запрещено использовать в запросах динамического списка.
  • Разрешается использовать в СКД.
  • Временные таблицы особенно индексирование занимает некоторое время, но обычно их использование ускоряет запросы.
  • Индексировать доступно только при наличии ПОМЕСТИТЬ, иначе будет вот такая ошибка «Синтаксическая ошибка индексировать ПО»
  • Допустимо использовать в соединениях
  • Появились в платформе 8.1, далее оптимизировалось их использование, синтаксис не менялся.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *