[Alimir_BootModal_Login]

Язык запросов 1С 8.3 для начинающих программистов: упорядочивание

Автор уроков и преподаватель школы: Владимир Милькин

Упорядочивание в запросах

Давайте напишем запрос, который получает из таблицы Справочник.Еда код и название еды:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда

Как всегда, выполните этот запрос у себя на компьютере.

С большой долей вероятности у вас получится следующий результат:

01

Возможно вы удивитесь, но при таком написании запроса никто не гарантирует нам именно такого порядка выдачи записей в таблице. В случае использования клиент-серверного режима работы на различных СУБД результат мог бы быть и такой:

01_1

И такой:

01_2

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

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

Секция УПОРЯДОЧИТЬ ПО

Поля по которым требуется упорядочить запрос перечисляются в секции УПОРЯДОЧИТЬ ПО через запятую:

05

Следом за именем поля упорядочивания может идти одно из двух ключевых слов:

  • ВОЗР - упорядочивание по возрастанию.
  • УБЫВ - упорядочивание по убыванию.

Если не указывать ни одно из этих слов, считается, что сортировка идёт по возрастанию.

Вооружившись знаниями, давайте упорядочим результат нашего запроса по убыванию поля Код:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Код УБЫВ

06

По возрастанию поля Наименование (алфавитный порядок):

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Наименование ВОЗР

07

А теперь упорядочим следующую таблицу

09

так, чтобы сначала шла сортировка по полю Вкус по возрастанию, а затем (среди строчек с одинаковым значением поля Вкус) шла сортировка по полю Цвет по убыванию:

ВЫБРАТЬ
    Вкус,
    Цвет
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Вкус.Наименование ВОЗР,
    Цвет.Наименование УБЫВ

10

Отдельно обращаю ваше внимание на то, что мы указали сортировку не по самим полям Вкус и Цвет, а по их строковому реквизиту Наименование. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Это связано с тем, что сортировка возможна лишь по полям имеющим один из типов: СтрокаЧислоДата.

А поля Вкус и Цвет являются ссылками на элементы справочников Вкус и Цвет, сортировать по которым не имеет смысла. Зато можно сделать сортировку по одному из реквизитов этих элементов. Наиболее подходящим в нашем случае будет строковый реквизит Наименование.

Секция АВТОУПОРЯДОЧИВАНИЕ

А теперь зайдите в конфигуратор и найдите настройку данных для справочника Еда:

12

Обратите внимание на то, что основным представлением элементов справочника выбрано поле Наименование.

Это означает, что поле Наименование будет полем сортировки таблицы Справочник.Еда по умолчанию.

Таким образом, если сделать автоупорядочивание запроса добавив секцию АВТОУПОРЯДОЧИВАНИЕ:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
АВТОУПОРЯДОЧИВАНИЕ

то результаты будут отсортированы по полю Наименование по возрастанию:

11

Секция АВТОУПОРЯДОЧИВАНИЕ может использоваться совместно с секцией УПОРЯДОЧИТЬ ПО.

В этом случае сначала будет идти сортировка по указанным полям (УПОРЯДОЧИТЬ ПО), а затем по полям сортировки по умолчанию (АВТОУПОРЯДОЧИВАНИЕ).

Использование секции АВТОУПОРЯДОЧИВАНИЕ нежелательно

Секция АВТОУПОРЯДОЧИВАНИЕ подходит для универсальных запросов, когда разработчик не может предвидеть из каких таблиц будут запрашиваться данные.

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

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

А завтра фирма 1С (или другой разработчик) изменят настройки базы в конфигураторе так, что полем сортировки по умолчанию для справочника Еда станет, к примеру, поле Код. И, если мы использовали автоупорядочивание в запросе, то наш отчет сломается, ведь порядок сортировки уже будет другим. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Поэтому всегда старайтесь указывать конкретные поля и конкретный порядок сортировки по ним в секции УПОРЯДОЧИТЬ ПО, такой запрос уже не сломать просто так:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Наименование ВОЗР

Пройдите тест

Начать тест

Домашнее задание

а) Напишите запрос, который получает список клиентов, упорядоченный по их любимому цвету по возрастанию:

01 

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

б) Напишите запрос, который получает список заказов клиентов (таблица Документ.ЗаказКлиента), упорядоченный по дате по убыванию:

02 

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