К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как в 1С отсортировать по возрастанию

Как в 1С отсортировать по возрастанию: сортировка списков, табличных частей, отчётов СКД и запросов. Пошаговые инструкции, примеры кода и частые ошибки.

Сортировка по возрастанию — одна из самых частых операций в 1С: она нужна при просмотре списков документов, формировании отчётов, при программной обработке таблиц значений и в запросах. Способ зависит от того, где именно вы работаете: в пользовательском интерфейсе, в настройках отчёта или в коде на встроенном языке.

В интерфейсе «Такси» сортировка обычно выполняется без программирования — через настройку списка или щелчок по заголовку колонки. В отчётах на СКД порядок задаётся на вкладке «Сортировка». В запросах используется конструкция УПОРЯДОЧИТЬ ПО, а для таблиц значений — метод Сортировать(). Каждый вариант имеет свои ограничения, которые важно учитывать.

Сортировка списка документов и справочников в интерфейсе

Самый простой сценарий — упорядочить список в режиме 1С:Предприятие. Откройте нужный список (например, «Реализация товаров и услуг» или справочник «Номенклатура»), затем в меню «Ещё» выберите пункт «Настроить список». В открывшемся окне перейдите на закладку «Сортировка», добавьте нужное поле и установите направление «По возрастанию».

Быстрый способ — щёлкнуть левой кнопкой мыши по заголовку колонки, если она отображается в списке. Первый щелчок обычно включает сортировку по возрастанию, повторный — меняет направление на убывание. Рядом с заголовком появляется стрелка, показывающая текущее направление.

Учтите: сортировать можно только по тем полям, для которых в конфигурации разрешено упорядочивание (у поля включено индексирование или оно входит в стандартные реквизиты). Если поле недоступно для сортировки, в «Настроить список» оно будет отсутствовать или отмечено как недоступное.

Порядок действий в интерфейсе
  1. 1
    Откройте нужный список документов или справочника
  2. 2
    Выберите «Ещё → Настроить список» и перейдите на закладку «Сортировка»
  3. 3
    Добавьте поле и установите направление «По возрастанию»
  4. 4
    Нажмите «ОК» и проверьте порядок строк в списке

Как отсортировать динамический список по возрастанию

Динамический список на форме (например, в самописной обработке или в настройке произвольного запроса) сортируется через свойство «Порядок». В конфигураторе откройте свойства динамического списка, найдите «Настройки» и добавьте элемент порядка с направлением «По возрастанию».

Программно порядок динамического списка задаётся через коллекцию Порядок.Настройки. Ниже пример установки сортировки по реквизиту «Дата» по возрастанию:

ЭлементПорядка = Список.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));

ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Дата");

ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;

ЭлементПорядка.Использование = Истина;

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

Сортировка по возрастанию в запросе

В языке запросов 1С сортировка выполняется предложением УПОРЯДОЧИТЬ ПО. По умолчанию направление — по возрастанию, но его можно указать явно ключевым словом ВОЗР. Для обратного порядка используется УБЫВ.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Наименование КАК Наименование,

| Номенклатура.Код КАК Код

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|УПОРЯДОЧИТЬ ПО

| Наименование ВОЗР";

Можно сортировать по нескольким полям: перечислите их через запятую, для каждого указав своё направление. Например, «УПОРЯДОЧИТЬ ПО Дата ВОЗР, Номер УБЫВ» сначала упорядочит записи по дате от ранней к поздней, а внутри одной даты — по номеру в обратном порядке.

Отдельный случай — иерархическая сортировка. Для справочников с иерархией используется конструкция УПОРЯДОЧИТЬ ПО ... ИЕРАРХИЯ, которая сохраняет древовидную структуру: сначала идут группы и их элементы, внутри — упорядочивание по указанному полю. Без ключевого слова ИЕРАРХИЯ список будет плоским, и вложенность потеряется.

Сортировка отчёта на СКД по возрастанию

В отчётах, построенных на системе компоновки данных, порядок задаётся на вкладке «Сортировка» в настройках отчёта. Пользователь может сделать это самостоятельно: открыть «Ещё → Изменить вариант отчёта», перейти на закладку «Сортировка», добавить поле и выбрать направление «По возрастанию».

Разработчик задаёт сортировку по умолчанию в схеме компоновки данных: на закладке «Настройки» в конструкторе отчёта добавьте элемент сортировки с нужным полем и направлением «По возрастанию». Этот порядок увидят все пользователи, пока не изменят его в своих настройках.

Важный нюанс: если в запросе набора данных уже есть УПОРЯДОЧИТЬ ПО, а в настройках СКД задана своя сортировка, приоритет обычно у настроек компоновки — она переупорядочивает результат. Однако для иерархических отчётов лишняя сортировка в запросе может замедлять выполнение, поэтому порядок лучше задавать только в настройках.

Где задавать сортировку

Настройка списка (интерфейс)

Подходит пользователю без доступа к конфигуратору; не требует кода, но работает только с индексируемыми полями

УПОРЯДОЧИТЬ ПО в запросе

Подходит для программной выборки и печатных форм; порядок жёстко фиксирован разработчиком

Сортировка в настройках СКД

Подходит для отчётов; пользователь может переопределить порядок под свою задачу

Метод Сортировать()

Подходит для таблиц значений и списков значений в коде после их заполнения

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

Таблица значений — универсальная структура для промежуточной обработки данных. Для сортировки по возрастанию используется метод Сортировать() с указанием колонок и направления:

ТаблицаРезультат.Сортировать("Сумма Возр");

// По нескольким колонкам:

ТаблицаРезультат.Сортировать("Дата Возр, Сумма Убыв");

Табличную часть документа напрямую методом Сортировать() упорядочить нельзя — у неё нет такого метода. Обходной путь: выгрузить табличную часть в таблицу значений методом Выгрузить(), отсортировать её и загрузить обратно методом Загрузить():

ВременнаяТаблица = ДокументОбъект.Товары.Выгрузить();

ВременнаяТаблица.Сортировать("Номенклатура Возр");

ДокументОбъект.Товары.Загрузить(ВременнаяТаблица);

Учтите, что при загрузке обратно нумерация строк пересчитывается, а сортировка выполняется по строковому представлению, если типы колонок смешанные. Перед сортировкой убедитесь, что в колонке один тип данных — иначе числа могут сравниваться как строки («10» окажется раньше «2»).

Типичные ошибки
01
Сортировка числовой колонки со смешанным типом: значения сравниваются как строки, порядок получается неверным
02
Попытка вызвать Сортировать() у табличной части документа: метод отсутствует, возникает ошибка выполнения
03
Указание УПОРЯДОЧИТЬ ПО в запросе динамического списка одновременно с настройками порядка — конфликт и непредсказуемый результат
04
Ожидание, что сортировка в отчёте СКД сработает, если она задана только в запросе набора данных: настройки компоновки могут её переопределить

Проверка результата и ограничения

После настройки сортировки проверьте порядок на данных, где результат очевиден: например, отсортируйте список по дате и убедитесь, что самый ранний документ стоит первым. Для числовых полей проверьте граничные значения — пустые значения, нули, отрицательные числа.

Отдельно проверяйте поведение пустых значений: в запросах 1С пустые ссылки и незаполненные поля при сортировке по возрастанию обычно оказываются в начале выборки. Если это нежелательно, отфильтруйте их условием ГДЕ или обработайте отдельно.

Ограничения, о которых стоит помнить: сортировка больших таблиц значений в памяти потребляет ресурсы сервера, поэтому для больших объёмов предпочтительнее УПОРЯДОЧИТЬ ПО в запросе — упорядочивание выполнит СУБД. Также помните, что сортировка по неиндексированному полю в динамическом списке может заметно замедлить его открытие на крупных базах.

Контрольные точки

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

Порядок строк в списке
Норма

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

Тревожный признак

Порядок перемешан или числа идут как строки (1, 10, 2)

Результат запроса
Норма

Первая строка содержит минимальное значение поля сортировки

Тревожный признак

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

Отчёт СКД
Норма

Группировки и строки упорядочены по возрастанию в соответствии с настройкой

Тревожный признак

Порядок игнорирует настройку — проверьте сортировку в запросе набора данных

Частые вопросы о сортировке в 1С

Как отсортировать по возрастанию, если поле недоступно в настройке списка?

Поле недоступно, если для него не разрешено упорядочивание в конфигурации (нет индексирования или это поле через точку). Варианты: попросить разработчика включить индексирование реквизита, вывести данные через отчёт, где сортировка по такому полю возможна, или использовать произвольный запрос с УПОРЯДОЧИТЬ ПО.

Чем отличается УПОРЯДОЧИТЬ ПО от ИТОГИ ПО в запросе?

УПОРЯДОЧИТЬ ПО задаёт порядок строк в результате, не меняя его структуру. ИТОГИ ПО создаёт группировку с итогами по указанным полям и косвенно упорядочивает записи по полям итогов, но основное её назначение — подведение итогов, а не сортировка.

Как сделать сортировку по возрастанию по умолчанию для всех пользователей?

Задайте порядок в настройках динамического списка формы в конфигураторе или в схеме компоновки данных отчёта. Пользовательские настройки, сохранённые ранее, могут перекрывать стандартные — тогда их нужно сбросить через «Установить стандартные настройки».

Почему числа сортируются как 1, 10, 2, 20?

Это признак того, что значения хранятся как строки или колонка имеет составной тип. Сравнение идёт посимвольно: «10» меньше «2», потому что сравниваются первые символы. Решение — привести значения к числовому типу при заполнении таблицы или в запросе.

Можно ли отсортировать по возрастанию список значений?

Да, у списка значений есть метод СортироватьПоЗначению() с параметром направления (НаправлениеСортировки.Возр) и метод СортироватьПоПредставлению() — если нужно упорядочить по отображаемому тексту, а не по самому значению.

Итог

Что важно запомнить

В интерфейсе сортировка по возрастанию настраивается через «Ещё → Настроить список» или щелчком по заголовку колонки. В запросе используйте УПОРЯДОЧИТЬ ПО с ключевым словом ВОЗР, в отчётах СКД — вкладку «Сортировка», а для таблиц значений в коде — метод Сортировать(). Следите за типами данных в сортируемых колонках и не дублируйте порядок одновременно в запросе и в настройках компоновки.