ИндексСхемыЗапроса

Типы · QuerySchemaIndex

Содержит описание индекса временной таблицы.

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

ИндексСхемыЗапроса (QuerySchemaIndex)

ИндексСхемыЗапроса (QuerySchemaIndex)

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

Свойства:
ВыраженияИндекса (IndexExpressions)
Уникальный (Unique)

Описание:

Содержит описание индекса временной таблицы.

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

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

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

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

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

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

Создать уникальный индекс собственной временной таблицы

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

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

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

Подготовка

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

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

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

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

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

  1. Индексы и Индекс — разные коллекции: первая содержит наборы, внутри каждого набора находятся ВыраженияИндекса.

  2. Создаём два собственных набора, по Количество и Цена, перемещаем второй на индекс 0 и проверяем его состав.

  3. После Удалить и Очистить старые Первый и Второй не используются. Новому набору Уникальный задаём собственное поле Количество.

  4. Один созданный ряд с количеством 3 удовлетворяет уникальности. Уникальность не означает автоматическое удаление дубликатов.

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

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

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

  2. Один уникальный набор Количество и проверенный результат 750.

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

Разобраны несколько наборов и отдельный признак уникальности.

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

  1. Индексы и Уникальный доступны с 8.3.25; в учебной базе используйте современный режим совместимости.

  2. Уникальный индекс может отклонить пакет с одинаковыми ключами; он не очищает повторяющиеся строки.

  3. Это не настройка индекса физической таблицы SQL и не измерение скорости.

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

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

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

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

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