ЗапросВыбораСхемыЗапроса.ТаблицаДляПомещения

Свойства · PlacementTable

Тип: Строка. Содержит имя временной таблицы, которая будет создана при выполнении запроса и в которую будет помещен результат запроса. Соответствует ключевому слову ПОМЕСТИТЬ языка запроса.

Полное описание, параметры и ограничения

ЗапросВыбораСхемыЗапроса.ТаблицаДляПомещения (QuerySchemaSelectQuery.PlacementTable)

ЗапросВыбораСхемыЗапроса (QuerySchemaSelectQuery)

ТаблицаДляПомещения (PlacementTable)

Доступен, начиная с версии 8.3.5.

Использование:
Чтение и запись.
Описание:
Тип: Строка.
Содержит имя временной таблицы, которая будет создана при выполнении запроса и в которую будет помещен результат запроса.
Соответствует ключевому слову ПОМЕСТИТЬ языка запроса.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.5.

Методическая информация

Практические примеры

Разделить режим СКД и обычную схему запроса

Переключаем режим компоновки на собственном запросе без итогов. Недоступные в этом режиме свойства итогов не читаются; после возврата обычного режима выполняем запрос.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.

  2. СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.

  3. Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.

Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ 3 КАК Количество, 250 КАК Цена");
Если Схема.ПакетЗапросов.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидался один собственный запрос";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
    ВызватьИсключение "Первый собственный запрос не является выборкой";
КонецЕсли;
Схема.РежимКомпоновкиДанных = Истина;
Сообщить(Схема.РежимКомпоновкиДанных);
Сообщить(Выбор.Колонки.Количество() = 2);
Схема.РежимКомпоновкиДанных = Ложь;
Выбор.Автопорядок = Ложь;
Выбор.ВыбиратьРазрешенные = Ложь;
Сообщить(Не Схема.РежимКомпоновкиДанных);
Сообщить(Не Выбор.ОбщиеИтоги);
Сообщить(Не Выбор.Автопорядок И Не Выбор.ВыбиратьРазрешенные);
Сообщить(Выбор.ТаблицаДляПомещения = "" И Выбор.ТаблицаДляДобавления = "");
Запрос = Новый Запрос(Схема.ПолучитьТекстЗапроса());
Таблица = Запрос.Выполнить().Выгрузить();
Если Таблица.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидалась одна собственная строка";
КонецЕсли;
Сообщить(Таблица[0].Количество * Таблица[0].Цена = 750);

Разбор по шагам

  1. Исходный запрос содержит свои два числовых поля и не имеет выражения ИТОГИ.

  2. РежимКомпоновкиДанных=Истина меняет режим схемы. ОбщиеИтоги, КонтрольныеТочкиИтогов и ВыраженияИтогов в нём недоступны и в этом участке не читаются.

  3. Возвращаем Ложь до обращения к ОбщиеИтоги. У своего запроса без ИТОГИ ожидаем Ложь.

  4. Автопорядок и ВыбиратьРазрешенные выключаются только в собственном запросе констант. Это не инструкция отключать ограничения доступа в рабочих запросах.

  5. Пустые имена временных таблиц показывают, что запрос не выполняет ПОМЕСТИТЬ или ДОБАВИТЬ. Выполненная строка по-прежнему даёт 750.

Как проверить результат

  1. Семь сравнений Истина.

  2. Чтение ОбщиеИтоги идёт только после выключения режима СКД; скрытые итоговые коллекции не затрагиваются.

Ожидаемый результат

Разобраны режим схемы и отдельные флаги выборки без неверного доступа к итогам.

На что обратить внимание

  1. РежимКомпоновкиДанных не превращает объект в настройки или процессор СКД.

  2. Ложь у ВыбиратьРазрешенные не означает включение привилегированного режима.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Прочитать описание собственной временной таблицы

Второй запрос пакета видит описание УчебныеКниги ещё до исполнения. Его поля описывают типы; реальные числа получаем отдельным выполнением.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.

  2. СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.

  3. Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.

Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ 3 КАК Количество, 250 КАК Цена ПОМЕСТИТЬ УчебныеКниги;
|ВЫБРАТЬ Книги.Количество * Книги.Цена КАК Сумма ИЗ УчебныеКниги КАК Книги");
Если Схема.ПакетЗапросов.Количество() <> 2 Тогда
    ВызватьИсключение "Ожидались создание и чтение собственной временной таблицы";
КонецЕсли;
Создание = Схема.ПакетЗапросов.Получить(0);
Чтение = Схема.ПакетЗапросов.Получить(1);
Если ТипЗнч(Создание) <> Тип("ЗапросВыбораСхемыЗапроса") Или ТипЗнч(Чтение) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
    ВызватьИсключение "Обе операции должны быть собственными выборками";
КонецЕсли;
Если Создание.ТаблицаДляПомещения <> "УчебныеКниги" Тогда
    ВызватьИсключение "Первый запрос не создаёт нашу временную таблицу";
КонецЕсли;
Если Чтение.Операторы.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидался один оператор чтения своей таблицы";
КонецЕсли;
Оператор = Чтение.Операторы.Получить(0);
Источник = Оператор.Источники.НайтиПоПсевдониму("Книги");
Если Источник = Неопределено Тогда
    ВызватьИсключение "Нет собственного источника Книги";
КонецЕсли;
ОписаниеТаблицы = Источник.Источник;
Если ТипЗнч(ОписаниеТаблицы) <> Тип("ОписаниеВременнойТаблицыСхемыЗапроса") Тогда
    ВызватьИсключение "Ожидалось описание собственной временной таблицы";
КонецЕсли;
Сообщить(ОписаниеТаблицы.ИмяТаблицы = "УчебныеКниги");
Сообщить(ОписаниеТаблицы.Псевдоним = "Книги");
Поля = ОписаниеТаблицы.ДоступныеПоля;
КоличествоПоле = Поля.Найти("Количество");
Если КоличествоПоле = Неопределено Тогда
    ВызватьИсключение "Описание не содержит собственного количества";
КонецЕсли;
Если ТипЗнч(КоличествоПоле) <> Тип("ДоступноеПолеСхемыЗапроса") Тогда
    ВызватьИсключение "Ожидалось простое описание числового поля";
КонецЕсли;
Сообщить(Поля.Количество() = 2);
Сообщить(КоличествоПоле.ТипЗначения.СодержитТип(Тип("Число")));
Менеджер = Новый МенеджерВременныхТаблиц;
Попытка
    Запрос = Новый Запрос(Схема.ПолучитьТекстЗапроса());
    Запрос.МенеджерВременныхТаблиц = Менеджер;
    Результаты = Запрос.ВыполнитьПакет();
    Если Результаты.Количество() <> 2 Тогда
        ВызватьИсключение "Ожидались два результата собственного пакета";
    КонецЕсли;
    Таблица = Результаты[1].Выгрузить();
    Если Таблица.Количество() <> 1 Тогда
        ВызватьИсключение "Ожидалась одна собственная строка";
    КонецЕсли;
    Сообщить(Таблица[0].Сумма = 750);
    Сообщить(Менеджер.Таблицы.Количество() = 1);
Исключение
    Менеджер.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Менеджер.Закрыть();

Разбор по шагам

  1. Схема знает описание временной таблицы из первой операции пакета. Но физическая временная таблица появится лишь при исполнении.

  2. Источник находится по псевдониму Книги и проверяется до чтения Источник.

  3. Дополнительно проверяем точный тип ОписаниеВременнойТаблицыСхемыЗапроса: его нельзя путать с вложенным запросом или реальной таблицей метаданных.

  4. ИмяТаблицы обозначает УчебныеКниги, Псевдоним — Книги в тексте второй операции. ДоступныеПоля даёт два описания, а не две строки товаров.

  5. Тип количества числовой; значение 3 и расчёт 750 проверяет только выполненный пакет со своим менеджером.

Как проверить результат

  1. Шесть сообщений Истина.

  2. Описание двух колонок получено до выполнения; реальная строка и сумма 750 проверены после.

Ожидаемый результат

Показана граница между объектной схемой и созданной временной таблицей.

На что обратить внимание

  1. ОписаниеТаблицы не имеет метода Выгрузить для строк данных.

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

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.