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

Учебные задачи

В пакете создаём собственную временную таблицу с числами, читаем её и добавляем отдельный ЗапросУничтоженияТаблицыСхемыЗапроса. Это не удаление таблицы СУБД или регистра 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С» и не аффилирован с ней.