ПакетЗапросовСхемыЗапроса.Добавить

Методы · Add

Добавляет новый элемент коллекции и возвращает его. Если тип нового элемента не подходит для данной коллекции, добавления не происходит. В этом случае метод возвращает Неопределено.

Синтаксис

Добавить(<Тип>)
Полное описание, параметры и ограничения

ПакетЗапросовСхемыЗапроса.Добавить (QuerySchemaQueryBatch.Add)

ПакетЗапросовСхемыЗапроса (QuerySchemaQueryBatch)

Добавить (Add)

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

Синтаксис:
Добавить(<Тип>)
Параметры:

<Тип> (необязательный)
Тип: Тип.
Тип добавляемого элемента. Элементами коллекции могут быть ЗапросВыбораСхемыЗапроса, ЗапросУничтоженияТаблицыСхемыЗапроса.
Значение по умолчанию: ЗапросВыбораСхемыЗапроса.
Возвращаемое значение:
Тип: ЗапросВыбораСхемыЗапроса, ЗапросУничтоженияТаблицыСхемыЗапроса.

Описание:

Добавляет новый элемент коллекции и возвращает его. Если тип нового элемента не подходит для данной коллекции, добавления не происходит. В этом случае метод возвращает Неопределено.

Доступность:

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

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

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

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

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

Добавить выборку в свою схему с нуля

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

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

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

Подготовка

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

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

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

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

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

  1. Новый СхемаЗапроса создаёт родителя, ПакетЗапросов.Добавить без параметра — собственный дочерний запрос выбора.

  2. УстановитьТекстЗапроса вызывается у дочерней выборки, а не подменяет весь пакет другой схемой.

  3. ПолучитьТекстЗапроса выборки возвращает её текст; Представление — пользовательское представление, не протокол выполнения.

  4. Выполняем весь сформированный пакет через Запрос и проверяем два собственных числа.

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

  1. Четыре проверки Истина плюс диагностическое представление.

  2. Родитель Схема существует до последней проверки, дочерний объект не передаётся другой схеме.

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

Показано создание и выполнение своего дочернего запроса без внешних данных.

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

  1. Нельзя присоединить дочерний объект к другой независимой схеме.

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

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

Уничтожить только свою временную таблицу запросом

В пакете создаём собственную временную таблицу с числами, читаем её и добавляем отдельный ЗапросУничтоженияТаблицыСхемыЗапроса. Это не удаление таблицы СУБД или регистра 1С.

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

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

Подготовка

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

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

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

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

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

  1. Две первые операции пакета целиком описаны в уроке: создают временную таблицу и читают её числовые данные.

  2. Добавить получает объект Тип, а не строку имени типа. После проверки типа устанавливаем имя только своей временной таблицы.

  3. Новый МенеджерВременныхТаблиц принадлежит этому фрагменту, не взят из внешнего рабочего запроса.

  4. Результаты[1] — результат чтения, а не операции создания или уничтожения. Сначала проверяем размер массива.

  5. После уничтожения свой менеджер не содержит таблиц. Он закрывается и на успешном, и на ошибочном пути.

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

  1. Четыре сравнения Истина: имя, размер пакета, сумма 750, отсутствие временных таблиц.

  2. Никакой справочник, регистр, документ или физическая таблица СУБД не удаляются.

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

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

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

  1. УНИЧТОЖИТЬ относится к временной таблице языка запросов, не к команде DROP TABLE.

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

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

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

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

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

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