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

Методы · IndexOf

Получает индекс элемента в коллекции.

Синтаксис

Индекс(<Элемент>)
Полное описание, параметры и ограничения

ОператорыСхемыЗапроса.Индекс (QuerySchemaOperators.IndexOf)

ОператорыСхемыЗапроса (QuerySchemaOperators)

Индекс (IndexOf)

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

Синтаксис:
Индекс(<Элемент>)
Параметры:

<Элемент> (обязательный)
Тип: ОператорВыбратьСхемыЗапроса.
Элемент, индекс которого определяется.
Возвращаемое значение:
Если не найдено, то возвращается -1.
Описание:

Получает индекс элемента в коллекции.

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

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

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

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

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

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

Скопировать оператор и изменить только его количество

Третий оператор — копия первого в том же запросе. Меняем его количество на 4, проверяем три строки после выполнения и только затем очищаем свою структуру.

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

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

Подготовка

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

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

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

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

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

  1. Добавить(Первый) создаёт копию собственного оператора, а не новый объект из другой схемы.

  2. Проверяем число полей копии, затем заменяем только её первое выражение. У исходного оператора остаётся количество 3.

  3. Переместить и Сдвинуть меняют позиции операторов в структуре. После упражнения копия снова последняя.

  4. Без УПОРЯДОЧИТЬ ПО язык запросов не гарантирует порядок строк. Поэтому сначала сортируем свою выгрузку по Количество, а затем проверяем 3/3/4.

  5. Удаление и очистка выполняются после расчёта. Копия, Первый и Второй после очистки не используются.

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

  1. Восемь сравнений Истина.

  2. В сортированной собственной выгрузке количества 3, 3 и 4 при цене 250 у каждой строки.

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

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

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

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

  2. После очистки операторов сформированный прежний запрос не выполняется повторно.

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

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

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

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

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