ВыражениеПорядкаСхемыЗапроса

Типы · QuerySchemaOrderExpression

Описывает объектную модель выражения порядка.

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

ВыражениеПорядкаСхемыЗапроса (QuerySchemaOrderExpression)

ВыражениеПорядкаСхемыЗапроса (QuerySchemaOrderExpression)

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

Свойства:
Направление (Direction)
Элемент (Item)

Описание:

Описывает объектную модель выражения порядка.

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

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

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

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

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

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

Изменить приоритет сортировки количества и цены

Свои строки 3/250 и 2/300 сортируем по убыванию количества, затем делаем цену главным критерием. Результат действительно меняет последовательность.

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

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

Подготовка

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

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

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

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

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

  1. Добавить со строкой сначала ищет колонку; обе собственные колонки существуют. Поэтому Элемент у первого критерия является КолонкаСхемыЗапроса.

  2. Направление задаётся у каждого критерия отдельно, оба здесь по убыванию.

  3. Первый критерий Количество определяет порядок 3/2. Проверяем фактическую выгрузку после выполнения.

  4. Переместить Цена в индекс 0 делает её главным критерием: цены 300/250, соответственно количества 2/3.

  5. Сдвинуть возвращает критерий цены на одну позицию, затем удаляем и очищаем только свой порядок. После очистки не утверждаем, что прежняя сортировка сохраняется.

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

  1. Все сравнения Истина.

  2. Реальная последовательность количеств меняется 3/2 → 2/3, поскольку изменился главный критерий.

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

Проверены направление, приоритет и коллекция сортировки на фактических строках.

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

  1. Без порядка схема не гарантирует прежнюю последовательность.

  2. Элемент критерия readonly: меняем Направление или состав коллекции, не присваиваем Элемент.

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

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

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

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

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