Упорядочивание в запросах в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

См. урок для начинающих по упорядочиванию в языке запросов 1С
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

/// Как упорядочить результат запроса по
/// определенным полям в 1с 8.3, 8.2
 
&НаСервере
Процедура КакУпорядочитьРезультатЗапросаПоПолямНаСервере()
 
    // Чтобы сортировать строки в результате запроса
    // используется секция УПОРЯДОЧИТЬ ПО.
 
    // Требуется вывести продукты, упорядоченные
    // сначала по возрастанию цвета, а затем
    // по убыванию калорийности.
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Наименование,
        |   Цвет,
        |   Калорийность
        |ИЗ
        |   Справочник.Номенклатура
        |УПОРЯДОЧИТЬ ПО
        |   Цвет ВОЗР,
        |   Калорийность УБЫВ"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как упорядочить результат запроса по
/// выражению в 1с 8.3, 8.2
 
&НаСервере
Процедура КакУпорядочитьРезультатЗапросаПоВыражениюНаСервере()
 
    // В секции УПОРЯДОЧИТЬ ПО можно использовать
    // выражения.
 
    // Например, упорядочим продукты по
    // максимальному содержанию белков и углеводов
    // вместе.
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Наименование,
        |   Белки,
        |   Углеводы,
        |   Жиры,
        |   Вода
        |ИЗ
        |   Справочник.Номенклатура
        |УПОРЯДОЧИТЬ ПО
        |   (Белки + Углеводы) УБЫВ"
    );
 
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как упорядочить результат запроса по
/// иерархии в 1с 8.3, 8.2
 
&НаСервере
Процедура КакУпорядочитьРезультатЗапросаПоИерархииНаСервере()    
 
    // Для таблиц, для которых задано свойство иерархичности
    // возможно упорядочивание в соответствии с иерархией.
 
    // К примеру, сделаем вывод элементов из
    // справочника "Номенклатура" в порядке
    // их следования в иерархии справочника.
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |  Наименование
        |ИЗ
        |  Справочник.Вкусы КАК Вкусы
        |УПОРЯДОЧИТЬ ПО
        |  Наименование Иерархия"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как упорядочить результат запроса по
/// агрегатной функции группировки в 1с 8.3, 8.2
 
&НаСервере
Процедура КакУпорядочитьРезультатЗапросаПоАгрегатнойФункцииНаСервере()
 
    // В секции УПОРЯДОЧИТЬ ПО также возможно использование
    // агрегатных функций, которые были использованы для
    // группировки результата запроса.
 
    // Для каждого цвета - выберем минимальную калорийность
    // продукта, имеющиего такой цвет. А затем отсортируем
    // результат по возрастанию этой минимальной калорийности.
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Цвет,
        |   МИНИМУМ(Калорийность)
        |ИЗ
        |   Справочник.Номенклатура
        |СГРУППИРОВАТЬ ПО
        |   Цвет
        |УПОРЯДОЧИТЬ ПО
        |   МИНИМУМ(Калорийность) ВОЗР");
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как работает автоупорядочивание результата
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакРаботаетАвтоупорядочиваниеНаСервере()
 
    // Предложение АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим
    // автоматического формирования полей для упорядочивания
    // результата запроса.
 
    // Автоупорядочивание работает по следующим принципам:
 
    // Если в запросе было указано предложение УПОРЯДОЧИТЬ ПО,
    // то каждая ссылка на таблицу, находящаяся в этом предложении,
    // будет заменена полями, по которым по умолчанию сортируется таблица
    // (для справочников это код или наименование, для документов – дата
    // документа). Если поле для упорядочивания ссылается на иерархический справочник,
    // то будет применена иерархическая сортировка по этому справочнику.
 
    // Если в запросе отсутствует предложение УПОРЯДОЧИТЬ ПО,
    // но есть предложение ИТОГИ, тогда результат запроса будет
    // упорядочен по полям, присутствующим в предложении
    // ИТОГИ после ключевого слова ПО, в той же последовательности и,
    // в случае если итоги рассчитывались по полям – ссылкам,
    // то по полям сортировки по умолчанию таблиц, на которые были ссылки. 
 
    // Если в запросе отсутствуют предложения УПОРЯДОЧИТЬ ПО и ИТОГИ,
    // но есть предложение СГРУППИРОВАТЬ ПО, тогда результат запроса
    // будет упорядочен по полям, присутствующим в предложении,
    // в той же последовательности и, в случае если группировка велась
    // по полям – ссылкам, то по полям сортировки по умолчанию таблиц,
    // на которые были ссылки. 
 
    // В случае же, если в запросе отсутствуют предложения и
    // УПОРЯДОЧИТЬ ПО, ИТОГИ и СГРУППИРОВАТЬ ПО, результат будет
    // упорядочен по полям сортировки по умолчанию для таблиц,
    // из которых выбираются данные, в порядке их появления в запросе.
 
    // В случае, если запрос содержит предложение ИТОГИ, каждый уровень
    // итогов упорядочивается отдельно.
 
    // В примере ниже мы сортируем по полю Ссылка и используем
    // ключевое слово АВТОУПОРЯДОЧИВАНИЕ. Система при этом
    // заменит поле Ссылка в секции УПОРЯДОЧИТЬ ПО на дату документа.
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Ссылка
        |ИЗ
        |   Документ.ПродажаЕды
        |УПОРЯДОЧИТЬ ПО
        |   Ссылка ВОЗР
        |АВТОУПОРЯДОЧИВАНИЕ"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Упорядочивание в запросах в языке 1С 8.3, 8.2 (в примерах)

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться: