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