Содержит описание временной таблицы. Используется для описания временной таблицы, которая не описана в пакетном запросе. Например, для таблицы из менеджера временных таблиц.
Полное описание, параметры и ограничения
ОписаниеВременнойТаблицыСхемыЗапроса (QuerySchemaTempTableDescription)
ОписаниеВременнойТаблицыСхемыЗапроса (QuerySchemaTempTableDescription)
Доступен, начиная с версии 8.3.5.
Свойства:
ДоступныеПоля (AvailableFields)
ИмяТаблицы (TableName)
Псевдоним (Alias)
Описание:
Содержит описание временной таблицы. Используется для описания временной таблицы, которая не описана в пакетном запросе. Например, для таблицы из менеджера временных таблиц.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Методическая информация
Практические примеры
Контракт внешней временной таблицы: добавить, вставить, удалить и восстановить поля
Собираем описание входных остатков КодТовара/Количество, временно добавляем Склад между ними, удаляем его по проверенному индексу, очищаем описание и восстанавливаем контракт. Независимая модель сохраняет прежние поля; конечная выборка строится по восстановленным типам. Это редактирование собственной схемы, не загрузка записей.
Где и как запускать
Полный серверный общий модуль УчебныеЗадачи своей новой пустой конфигурации УчебныеВнешниеПоля85; в1С не запускался.
Подготовка
Нужна НОВАЯ отдельная учебная база, не копия рабочей: точно8.5.1.1343, имя конфигурации УчебныеВнешниеПоля85, совместимость Не использовать. Никаких справочников, документов, регистров, иных бизнес-объектов, расширений, подписок и фоновых заданий; модули вручную пустые, кроме данного общего модуля. Данные не нужны.
Общий модуль УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставьте весь основной модуль. Своя внешняя обработка УчебныеВнешниеПоля85 → управляемая Форма: команда/кнопка Выполнить с действием Выполнить. Реквизиты не нужны, полный отдельный модуль формы дан ниже.
Будущая ручная подготовка только вне опыта: завершить прежний собственный сеанс, сохранить конфигурацию, Конфигурация → Обновить конфигурацию базы данных (F7), затем свежий собственный клиент и своя обработка. Платформа, F7, форма и BSL здесь не запускались.
Описание УчебныеОстатки85 создаётся в памяти документированным вариантом Источники.Добавить(Тип("ОписаниеВременнойТаблицыСхемыЗапроса"), имя, псевдоним). Ни реальной таблицы в менеджере, ни параметра с чужими данными, ни таблицы метаданных нет. Сформированный текст предназначен только для просмотра; выполнять его без отдельно подготовленного источника нельзя.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойПустойСтенд();
Если ПривилегированныйРежим() Тогда
ВызватьИсключение "Для собственного контракта не нужен привилегированный режим";
КонецЕсли;
Пусто = Новый Массив;
ДваИмени = СтрРазделить("КодТовара,Количество", ",");
ДваТипа = СтрРазделить("Строка,Число", ",");
Схема = СоздатьСвойКаркасВнешнегоОписания();
Поля = ПроверитьСвоиДоступныеПоля(Схема, Пусто, Пусто);
Поля.Добавить("КодТовара", Тип("Строка"));
ПроверитьСвоиДоступныеПоля(Схема, СтрРазделить("КодТовара", ","), СтрРазделить("Строка", ","));
Поля.Добавить("Количество", Тип("Число"));
ПроверитьСвоиДоступныеПоля(Схема, ДваИмени, ДваТипа);
Поля.Вставить(1, "Склад", Тип("Строка"));
ПроверитьСвоиДоступныеПоля(Схема, СтрРазделить("КодТовара,Склад,Количество", ","), СтрРазделить("Строка,Строка,Число", ","));
ТекущийСклад = Поля.Найти("Склад");
Если ТипЗнч(ТекущийСклад) <> Тип("ДоступноеПолеСхемыЗапроса") Тогда
ВызватьИсключение "Удаляется только собственный текущий склад";
КонецЕсли;
ИндексСклада = Поля.Индекс(ТекущийСклад);
Если ИндексСклада <> 1 Тогда
ВызватьИсключение "Склад должен находиться между кодом и количеством";
КонецЕсли;
Поля.Удалить(ИндексСклада);
ПроверитьСвоиДоступныеПоля(Схема, ДваИмени, ДваТипа);
Копия = СоздатьСвойКаркасВнешнегоОписания();
ПоляКопии = ПроверитьСвоиДоступныеПоля(Копия, Пусто, Пусто);
ПоляКопии.Добавить("КодТовара", Тип("Строка"));
ПоляКопии.Добавить("Количество", Тип("Число"));
ПроверитьСвоиДоступныеПоля(Копия, ДваИмени, ДваТипа);
Поля.Очистить();
ПроверитьСвоиДоступныеПоля(Схема, Пусто, Пусто);
ПроверитьСвоиДоступныеПоля(Копия, ДваИмени, ДваТипа);
Поля = ПолучитьСвойОператорВнешнегоОписания(Схема).Источники.Получить(0).Источник.ДоступныеПоля;
Поля.Добавить("КодТовара", Тип("Строка"));
Поля.Добавить("Количество", Тип("Число"));
ПроверитьСвоиДоступныеПоля(Схема, ДваИмени, ДваТипа);
Для Индекс = 0 По 1 Цикл
Если Поля.Получить(Индекс).Имя <> ПоляКопии.Получить(Индекс).Имя Тогда
ВызватьИсключение "Полные имена независимых восстановленных описаний должны совпасть";
КонецЕсли;
КонецЦикла;
ЗаполнитьСвоиКонечныеКолонки(Схема);
ЗаполнитьСвоиКонечныеКолонки(Копия);
ПроверитьСвоиКонечныеКолонки(Схема);
ПроверитьСвоиКонечныеКолонки(Копия);
Если Схема.ПолучитьТекстЗапроса() <> Копия.ПолучитьТекстЗапроса() Тогда
ВызватьИсключение "Не совпал полный конечный текст независимых собственных моделей";
КонецЕсли;
Сообщить(Схема.ПолучитьТекстЗапроса());
Сообщить("Внешнее описание: КодТовара Строка, Количество Число; порядок восстановлен, реальные таблицы не создавались");
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвойОператорВнешнегоОписания(Схема)
Если Схема.РежимКомпоновкиДанных Или Схема.ПакетЗапросов.Количество() <> 1 Тогда
ВызватьИсключение "Нужна одна собственная обычная схема";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Или Выбор.Операторы.Количество() <> 1 Тогда
ВызватьИсключение "Нужна единственная собственная выборка";
КонецЕсли;
Оператор = Выбор.Операторы.Получить(0);
Если ТипЗнч(Оператор) <> Тип("ОператорВыбратьСхемыЗапроса") Или Оператор.Источники.Количество() <> 1 Тогда
ВызватьИсключение "Нужен единственный собственный источник";
КонецЕсли;
Описание = Оператор.Источники.Получить(0).Источник;
Если ТипЗнч(Описание) <> Тип("ОписаниеВременнойТаблицыСхемыЗапроса")
Или Описание.ИмяТаблицы <> "УчебныеОстатки85" Или Описание.Псевдоним <> "Остатки"
Или ТипЗнч(Описание.ДоступныеПоля) <> Тип("ДоступныеПоляСхемыЗапроса") Тогда
ВызватьИсключение "Изменять можно только собственное внешнее описание УчебныеОстатки85";
КонецЕсли;
Возврат Оператор;
КонецФункции
Функция СоздатьСвойКаркасВнешнегоОписания()
Схема = Новый СхемаЗапроса;
Схема.РежимКомпоновкиДанных = Ложь;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ 0 КАК Заготовка");
Если Схема.ПакетЗапросов.Количество() <> 1 Тогда
ВызватьИсключение "Собственная заготовка должна содержать одну выборку";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Или Выбор.Операторы.Количество() <> 1 Тогда
ВызватьИсключение "Не совпала собственная заготовка выборки";
КонецЕсли;
Оператор = Выбор.Операторы.Получить(0);
Если ТипЗнч(Оператор) <> Тип("ОператорВыбратьСхемыЗапроса") Или Оператор.Источники.Количество() <> 0 Тогда
ВызватьИсключение "В своей новой заготовке ещё нет источников";
КонецЕсли;
Оператор.ВыбираемыеПоля.Очистить();
Если Оператор.ВыбираемыеПоля.Количество() <> 0 Или Выбор.Колонки.Количество() <> 0 Тогда
ВызватьИсключение "Свою числовую заготовку нужно убрать до построения контракта";
КонецЕсли;
Источник = Оператор.Источники.Добавить(Тип("ОписаниеВременнойТаблицыСхемыЗапроса"), "УчебныеОстатки85", "Остатки");
Если ТипЗнч(Источник) <> Тип("ИсточникСхемыЗапроса") Тогда
ВызватьИсключение "Документированный вариант должен вернуть собственный источник";
КонецЕсли;
ПолучитьСвойОператорВнешнегоОписания(Схема);
Возврат Схема;
КонецФункции
Функция ПроверитьСвоиДоступныеПоля(Схема, Имена, ИменаТипов)
Оператор = ПолучитьСвойОператорВнешнегоОписания(Схема);
Поля = Оператор.Источники.Получить(0).Источник.ДоступныеПоля;
Если Имена.Количество() <> ИменаТипов.Количество() Или Поля.Количество() <> Имена.Количество() Тогда
ВызватьИсключение "Не совпал полный размер собственного контракта полей";
КонецЕсли;
Для Индекс = 0 По Имена.Количество() - 1 Цикл
Поле = Поля.Получить(Индекс);
Если ТипЗнч(Поле) <> Тип("ДоступноеПолеСхемыЗапроса") Или ТипЗнч(Поле.Имя) <> Тип("Строка") Тогда
ВызватьИсключение "Каждый собственный элемент должен быть простым описанием поля";
КонецЕсли;
ЧастиИмени = СтрРазделить(НРег(Поле.Имя), ".");
Если ЧастиИмени.Количество() = 0 Или ЧастиИмени[ЧастиИмени.Количество() - 1] <> НРег(Имена[Индекс]) Тогда
ВызватьИсключение "Не совпали имена и порядок всех собственных полей";
КонецЕсли;
Если Поля.Индекс(Поле) <> Индекс Или Поля.Найти(Имена[Индекс]) <> Поле Или Поля[Индекс] <> Поле Тогда
ВызватьИсключение "Поиск и индекс должны вести к одному текущему собственному элементу";
КонецЕсли;
ПроверитьСвойПолныйТипПоля(Поле.ТипЗначения, Тип(ИменаТипов[Индекс]));
КонецЦикла;
Возврат Поля;
КонецФункции
Процедура ПроверитьСвойПолныйТипПоля(Описание, ОжидаемыйТип)
Если ТипЗнч(Описание) <> Тип("ОписаниеТипов") Тогда
ВызватьИсключение "Тип доступного поля должен быть полным описанием";
КонецЕсли;
Типы = Описание.Типы();
Если Типы.Количество() <> 1 Или Типы[0] <> ОжидаемыйТип Тогда
ВызватьИсключение "Не совпал полный набор типов собственного поля";
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСвоиКонечныеКолонки(Схема)
Имена = СтрРазделить("КодТовара,Количество", ",");
ПроверитьСвоиДоступныеПоля(Схема, Имена, СтрРазделить("Строка,Число", ","));
Оператор = ПолучитьСвойОператорВнешнегоОписания(Схема);
Выбор = Схема.ПакетЗапросов.Получить(0);
Если Оператор.ВыбираемыеПоля.Количество() <> 0 Или Выбор.Колонки.Количество() <> 0 Тогда
ВызватьИсключение "Конечные колонки строятся один раз из собственной пустой выборки";
КонецЕсли;
Для Индекс = 0 По 1 Цикл
Выражение = Оператор.ВыбираемыеПоля.Добавить("Остатки." + Имена[Индекс]);
Если ТипЗнч(Выражение) <> Тип("ВыражениеСхемыЗапроса") Тогда
ВызватьИсключение "Нужно реальное собственное выбираемое выражение";
КонецЕсли;
Колонка = Выбор.Колонки.Найти(Выражение);
Если ТипЗнч(Колонка) <> Тип("КолонкаСхемыЗапроса") Тогда
ВызватьИсключение "Нужна реальная колонка текущего собственного выражения";
КонецЕсли;
Колонка.Псевдоним = Имена[Индекс];
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьСвоиКонечныеКолонки(Схема)
Имена = СтрРазделить("КодТовара,Количество", ",");
Типы = СтрРазделить("Строка,Число", ",");
ПроверитьСвоиДоступныеПоля(Схема, Имена, Типы);
Оператор = ПолучитьСвойОператорВнешнегоОписания(Схема);
Выбор = Схема.ПакетЗапросов.Получить(0);
Если Оператор.ВыбираемыеПоля.Количество() <> 2 Или Выбор.Колонки.Количество() <> 2 Тогда
ВызватьИсключение "Конечная собственная выборка должна содержать оба поля";
КонецЕсли;
Для Индекс = 0 По 1 Цикл
Колонка = Выбор.Колонки.Получить(Индекс);
Если ТипЗнч(Колонка) <> Тип("КолонкаСхемыЗапроса") Или Колонка.Псевдоним <> Имена[Индекс]
Или Колонка.Поля.Количество() <> 1 Тогда
ВызватьИсключение "Не совпали порядок и псевдонимы всех конечных колонок";
КонецЕсли;
Выражение = Оператор.ВыбираемыеПоля.Получить(Индекс);
Если ТипЗнч(Выражение) <> Тип("ВыражениеСхемыЗапроса")
Или Выражение <> Новый ВыражениеСхемыЗапроса("Остатки." + Имена[Индекс])
Или Колонка.Поля.Получить(0) <> Выражение Тогда
ВызватьИсключение "Не совпало полное собственное выражение конечной колонки";
КонецЕсли;
ПроверитьСвойПолныйТипПоля(Колонка.ТипЗначения, Тип(Типы[Индекс]));
КонецЦикла;
КонецПроцедурыУчебныеВнешниеПоля85.Форма
Своя внешняя обработка УчебныеВнешниеПоля85 → управляемая Форма → Модуль
Полный отдельный модуль своей формы с серверным вызовом; здесь не запускался.
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Состав доступных полей внешнего описания изменён и восстановлен; независимая модель проверена");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныеЗадачи.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Создать собственную выборку из числовой заготовки. Удалить её выбранное поле до построения источника и проверить нулевые колонки. Добавить именно внешнее описание временной таблицы УчебныеОстатки85 с явным псевдонимом Остатки; проверить полный путь родительской схемы и точный тип описания.
Добавить КодТовара с Тип("Строка"), затем Количество с Тип("Число"). Второй аргумент — значение Тип, а не ОписаниеТипов. Методы Добавить/Вставить здесь не используются как возвращающие элемент: реальные поля получаются через текущую коллекцию после вызова.
Вставить Склад Строка по индексу1. Полный контракт теперь КодТовара/Склад/Количество, типы Строка/Строка/Число. Проверить порядок каждого поля, точный набор типов, положительный Найти, Получить, индекс и оператор[]; квалификация строкового Имя не угадывается, сравнивается его собственная конечная часть.
Найти текущий Склад, подтвердить тип и индекс1, передать в Удалить именно число. После удаления старый ТекущийСклад не используется. Повторно проверить полный контракт КодТовара/Количество, а не одно количество элементов.
Создать независимую схему тем же собственным каркасом и заново добавить имена/типы из своего согласованного контракта. Дочерние объекты не передаются между схемами. Очистить только доступные поля оригинала, подтвердить0; копия продолжает содержать два поля нужных типов.
После Очистить получить текущую коллекцию заново и восстановить оба поля. Семь состояний оригинала проверяются полностью:0→1→2→3→2→0→2. Сравнить полные имена восстановленного описания с независимой моделью.
Только после восстановления сформировать конечные выбранные поля Остатки.КодТовара/Остатки.Количество и явные псевдонимы. У обеих схем проверить полный источник, два выражения, порядок, псевдонимы и типы колонок; сравнить целиком канонический текст. Это не обещание, что текст запроса сериализует типы внешних доступных полей.
Как проверить результат
Будущий результат модели: внешний контракт содержит КодТовара Строка и Количество Число в порядке0/1; Склад удалён. Конечная выборка обращается к УчебныеОстатки85 КАК Остатки, колонки КодТовара/Количество имеют нужные полные наборы типов. В сообщениях — сформированный текст и результат собственного контроля, не строки остатков.
Будущий отрицательный контроль: только первый Поля.Добавить("Количество", Тип("Число")) изменить на Тип("Строка"). Размер останется2, но полная проверка типов должна отказать до вставки склада. Вернуть код, сохранить/F7 вне опыта, открыть новый свой сеанс. Здесь контроль не выполнялся.
runtimeVerifiedScenarios=0. Все записи, реальные временные таблицы, менеджер, Запрос.Выполнить, транзакции и рабочие конфигурации отсутствуют. Статические проверки не доказывают выполнение текста или загрузку внешнего источника.
Ожидаемый результат
Полный урок отличает изменение доступного контракта временного источника от изменения выбранных колонок и от чтения данных.
На что обратить внимание
Четыре метода разрешены только у доступных полей ОписаниеВременнойТаблицыСхемыЗапроса. Не используйте их у полей справочника, регистра, вложенной табличной части или произвольной коллекции с похожим именем.
Описание.ДоступныеПоля readonly: саму коллекцию получают и редактируют её документированными методами, а не присваивают свойству. ДоступноеПоле.Имя/ТипЗначения также readonly. Реквизиты метаданных и данные этим не изменяются.
Удалить принимает индекс. После удаления/очистки прежние элементы не используются; родительская Схема живёт до конца. Вставить1 означает абсолютную позицию между двумя текущими полями, не относительное смещение.
Описание типов не переносится автоматически в текст SELECT. Самостоятельная контрольная схема строится со своими источником, именами и типами заново. В чужую схему не передаём ни описание поля, ни источник, ни колонку.
Во время изменения доступного контракта выбранных полей ещё нет: это исключает зависимость выражений от удалённого поля. Конечная выборка строится после восстановления. Для изменения уже использованных колонок сначала нужен отдельный анализ зависимостей.
Без реального заранее созданного собственного временного источника конечный запрос не исполняем. Этот опыт учит объектной модели и полному контролю контракта; строки товаров, количество3 или остаток на складе не выдумываются как полученные данные.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Прочитать описание собственной временной таблицы
Второй запрос пакета видит описание УчебныеКниги ещё до исполнения. Его поля описывают типы; реальные числа получаем отдельным выполнением.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.
СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.
Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.
Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ 3 КАК Количество, 250 КАК Цена ПОМЕСТИТЬ УчебныеКниги;
|ВЫБРАТЬ Книги.Количество * Книги.Цена КАК Сумма ИЗ УчебныеКниги КАК Книги");
Если Схема.ПакетЗапросов.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались создание и чтение собственной временной таблицы";
КонецЕсли;
Создание = Схема.ПакетЗапросов.Получить(0);
Чтение = Схема.ПакетЗапросов.Получить(1);
Если ТипЗнч(Создание) <> Тип("ЗапросВыбораСхемыЗапроса") Или ТипЗнч(Чтение) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
ВызватьИсключение "Обе операции должны быть собственными выборками";
КонецЕсли;
Если Создание.ТаблицаДляПомещения <> "УчебныеКниги" Тогда
ВызватьИсключение "Первый запрос не создаёт нашу временную таблицу";
КонецЕсли;
Если Чтение.Операторы.Количество() <> 1 Тогда
ВызватьИсключение "Ожидался один оператор чтения своей таблицы";
КонецЕсли;
Оператор = Чтение.Операторы.Получить(0);
Источник = Оператор.Источники.НайтиПоПсевдониму("Книги");
Если Источник = Неопределено Тогда
ВызватьИсключение "Нет собственного источника Книги";
КонецЕсли;
ОписаниеТаблицы = Источник.Источник;
Если ТипЗнч(ОписаниеТаблицы) <> Тип("ОписаниеВременнойТаблицыСхемыЗапроса") Тогда
ВызватьИсключение "Ожидалось описание собственной временной таблицы";
КонецЕсли;
Сообщить(ОписаниеТаблицы.ИмяТаблицы = "УчебныеКниги");
Сообщить(ОписаниеТаблицы.Псевдоним = "Книги");
Поля = ОписаниеТаблицы.ДоступныеПоля;
КоличествоПоле = Поля.Найти("Количество");
Если КоличествоПоле = Неопределено Тогда
ВызватьИсключение "Описание не содержит собственного количества";
КонецЕсли;
Если ТипЗнч(КоличествоПоле) <> Тип("ДоступноеПолеСхемыЗапроса") Тогда
ВызватьИсключение "Ожидалось простое описание числового поля";
КонецЕсли;
Сообщить(Поля.Количество() = 2);
Сообщить(КоличествоПоле.ТипЗначения.СодержитТип(Тип("Число")));
Менеджер = Новый МенеджерВременныхТаблиц;
Попытка
Запрос = Новый Запрос(Схема.ПолучитьТекстЗапроса());
Запрос.МенеджерВременныхТаблиц = Менеджер;
Результаты = Запрос.ВыполнитьПакет();
Если Результаты.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались два результата собственного пакета";
КонецЕсли;
Таблица = Результаты[1].Выгрузить();
Если Таблица.Количество() <> 1 Тогда
ВызватьИсключение "Ожидалась одна собственная строка";
КонецЕсли;
Сообщить(Таблица[0].Сумма = 750);
Сообщить(Менеджер.Таблицы.Количество() = 1);
Исключение
Менеджер.Закрыть();
ВызватьИсключение;
КонецПопытки;
Менеджер.Закрыть();Разбор по шагам
Схема знает описание временной таблицы из первой операции пакета. Но физическая временная таблица появится лишь при исполнении.
Источник находится по псевдониму Книги и проверяется до чтения Источник.
Дополнительно проверяем точный тип ОписаниеВременнойТаблицыСхемыЗапроса: его нельзя путать с вложенным запросом или реальной таблицей метаданных.
ИмяТаблицы обозначает УчебныеКниги, Псевдоним — Книги в тексте второй операции. ДоступныеПоля даёт два описания, а не две строки товаров.
Тип количества числовой; значение 3 и расчёт 750 проверяет только выполненный пакет со своим менеджером.
Как проверить результат
Шесть сообщений Истина.
Описание двух колонок получено до выполнения; реальная строка и сумма 750 проверены после.
Ожидаемый результат
Показана граница между объектной схемой и созданной временной таблицей.
На что обратить внимание
ОписаниеТаблицы не имеет метода Выгрузить для строк данных.
Не подставляйте чужой менеджер и не изменяйте произвольные имена временных таблиц в рабочем пакете.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.