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

Быстрый старт · 11 мин

Как отсортировать таблицу в 1С: списки, отчёты и программная сортировка

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

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

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

Сортировка списка кликом по заголовку колонки

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

У этого способа есть ограничение: он задаёт сортировку только по одной колонке. Если нужен составной порядок — например, сначала по организации, а внутри неё по дате документа — клика по заголовкам недостаточно, потребуется настройка через меню «Ещё».

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

Сортировка через меню «Ещё» с несколькими полями

Для составной сортировки откройте список, нажмите кнопку «Ещё» в командной панели и выберите пункт «Настроить список» (в некоторых конфигурациях — «Сортировать» или «Изменить форму»). В открывшемся окне перейдите на вкладку «Сортировка».

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

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

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

Сортировка в отчётах на СКД

В отчётах, построенных на системе компоновки данных (а это большинство отчётов в типовых конфигурациях), сортировка настраивается отдельно. Сформируйте отчёт, нажмите кнопку «Настройки» (или «Ещё — Изменить вариант») и перейдите на вкладку «Сортировка».

Здесь доступны все поля, которые отчёт может выводить, а не только видимые колонки. Это удобно: можно отсортировать отчёт по сумме, даже если колонка с суммой скрыта. Добавьте поле, выберите направление и пересформируйте отчёт кнопкой «Закрыть и сформировать».

Сортировка внутри группировок

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

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

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

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

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

Программная сортировка таблицы значений и табличной части

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

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

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

У табличной части объекта (документа, справочника) метод Сортировать() работает так же, но изменяет порядок строк самого объекта. После вызова объект нужно записать, иначе изменения потеряются. У динамического списка метод Сортировать() отсутствует — порядок там задаётся через свойство Порядок настроек компоновки или параметр УпорядочитьПо в запросе основной таблицы.

bsl
// Сортировка табличной части документа по наименованию товара
ОбъектДокумента.Товары.Сортировать("Номенклатура Возр");
ОбъектДокумента.Записать();

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

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

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

ВЫБРАТЬ

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

СУММА(Товары.Сумма) КАК Сумма

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

СГРУППИРОВАТЬ ПО

Товары.Номенклатура

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

Сумма УБЫВ

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

Сравнение способов

Клик по заголовку колонки

Быстро, но только одно поле и только в динамических списках

Настройка списка через «Ещё»

Несколько полей и сохранение настройки, доступно пользователю без прав разработчика

Настройки отчёта (СКД)

Сортировка по любым полям выборки, включая скрытые, и по уровням группировок

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

Полный контроль из кода, но требует прав на доработку и аккуратности с записью объектов

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

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

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Попытка сортировать колонку с данными разных типов — строки сравниваются с числами, порядок получается непредсказуемым; приведите типы заранее
02
Сортировка чисел как строк — значения 2, 10, 100 выстроятся как 10, 100, 2; проверьте тип колонки
03
Ожидание, что сортировка списка изменит данные в базе — визуальная сортировка ничего не записывает
04
Вызов Сортировать() у табличной части без последующей записи объекта — изменения теряются
05
Сортировка динамического списка методом Сортировать() — у него нет такого метода, настраивайте Порядок в компоновке
Контрольные точки

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

Направление сортировки
Норма

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

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

Чередование хаотично — вероятно, колонка строкового типа или сортировка не применилась

Составная сортировка
Норма

Внутри одинаковых значений первого поля строки упорядочены по второму

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

Второе поле игнорируется — проверьте порядок полей в настройках

Сохранность данных
Норма

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

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

Появилось сообщение о невозможности записи — проверьте права и дату запрета изменения

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

Почему клик по заголовку колонки не сортирует список?

Чаще всего колонка не связана с полем запроса динамического списка — например, добавлена программно или вычисляется при выводе. Сортировка динамического списка выполняется на сервере, поэтому доступна только для реальных полей данных. Проверьте также, не снят ли у списка признак использования стандартной сортировки.

Как отсортировать по нескольким колонкам одновременно?

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

Меняет ли сортировка списка данные в базе?

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

Как вернуть сортировку по умолчанию?

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

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

Это признак того, что значения хранятся или выводятся как строки, а не как числа. Строковое сравнение идёт посимвольно. Решение — привести колонку к числовому типу: в запросе через ВЫРАЗИТЬ(... КАК ЧИСЛО), в таблице значений — задать тип при создании колонки.

Можно ли отсортировать таблицу в мобильном клиенте 1С?

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

Итог

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

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