Быстрый старт · 11 мин
Как отсортировать таблицу в 1С: списки, отчёты и программная сортировка
Как отсортировать таблицу в 1С: сортировка в списках, отчётах и табличных частях, метод Сортировать() в коде, типичные ошибки и проверка результата.
Сортировка таблицы в 1С — одна из самых частых операций: упорядочить список контрагентов по наименованию, выстроить документы по дате, отсортировать строки отчёта по сумме. В зависимости от того, где находится таблица — в списке справочника, в отчёте, в табличной части документа или в обработке на встроенном языке — применяются разные способы. Ниже разобраны все основные сценарии с конкретными действиями.
Важно понимать разницу между визуальной сортировкой и физическим изменением данных. Когда вы сортируете список в пользовательском режиме, сами данные в базе не меняются — меняется только порядок их отображения. Программная сортировка таблицы значений или табличной части, наоборот, перестраивает порядок строк в самой структуре данных, что влияет на последующую обработку.
Сортировка списка кликом по заголовку колонки
Самый простой способ работает в любой динамической таблице: списке справочников, документов, регистров сведений. Достаточно щёлкнуть левой кнопкой мыши по заголовку колонки, по которой нужно упорядочить строки. Повторный клик по тому же заголовку меняет направление сортировки — по возрастанию или по убыванию. Направление обычно обозначается стрелкой рядом с названием колонки.
У этого способа есть ограничение: он задаёт сортировку только по одной колонке. Если нужен составной порядок — например, сначала по организации, а внутри неё по дате документа — клика по заголовкам недостаточно, потребуется настройка через меню «Ещё».
Обратите внимание: в динамических списках сортировка выполняется на стороне сервера запросом к базе данных. Поэтому колонки, вычисляемые на лету или добавленные программно без связи с полем запроса, могут не сортироваться — клик по заголовку просто ничего не даст.
Сортировка через меню «Ещё» с несколькими полями
Для составной сортировки откройте список, нажмите кнопку «Ещё» в командной панели и выберите пункт «Настроить список» (в некоторых конфигурациях — «Сортировать» или «Изменить форму»). В открывшемся окне перейдите на вкладку «Сортировка».
Добавьте нужные поля из левой части окна в правую, для каждого укажите направление — по возрастанию или по убыванию. Порядок полей в списке определяет приоритет: сначала строки упорядочиваются по первому полю, при совпадении значений — по второму и так далее. Кнопками со стрелками можно перемещать поля выше или ниже.
- 1Откройте нужный список (справочник или журнал документов)
- 2Нажмите «Ещё» и выберите «Настроить список»
- 3Перейдите на вкладку «Сортировка»
- 4Перенесите нужные поля вправо и задайте направление для каждого
- 5Нажмите «ОК» и проверьте порядок строк в списке
Настройка сохраняется для текущего пользователя и применяется при следующих открытиях списка. Если требуется вернуть стандартный порядок, откройте те же настройки и нажмите «Установить стандартные настройки».
Сортировка в отчётах на СКД
В отчётах, построенных на системе компоновки данных (а это большинство отчётов в типовых конфигурациях), сортировка настраивается отдельно. Сформируйте отчёт, нажмите кнопку «Настройки» (или «Ещё — Изменить вариант») и перейдите на вкладку «Сортировка».
Здесь доступны все поля, которые отчёт может выводить, а не только видимые колонки. Это удобно: можно отсортировать отчёт по сумме, даже если колонка с суммой скрыта. Добавьте поле, выберите направление и пересформируйте отчёт кнопкой «Закрыть и сформировать».
Сортировка внутри группировок
Если отчёт содержит группировки (например, продажи по менеджерам, а внутри — по номенклатуре), сортировку можно задавать на каждом уровне. В расширенных настройках выберите нужную группировку в структуре отчёта и установите для неё собственный порядок. Сортировка верхнего уровня влияет на порядок групп, сортировка детальных записей — на строки внутри каждой группы.
Сортировка табличной части документа
Табличные части (списки товаров, услуг, сотрудников внутри документа) в пользовательском режиме обычно не имеют кликабельной сортировки по заголовкам — порядок строк там значим, потому что влияет на печатные формы и нумерацию строк.
Во многих типовых документах есть команда сортировки в меню «Ещё» табличной части или в командной панели над ней: «Сортировать по возрастанию», «Сортировать по убыванию» либо специализированные команды вроде «Сортировать по наименованию». Если такой команды нет, строки можно перемещать вручную кнопками «Переместить вверх» и «Переместить вниз» или перетаскиванием мышью.
Учтите, что изменение порядка строк в табличной части — это реальное изменение данных документа. После сортировки документ нужно записать, а если он проведён — перепровести. Для документов в закрытых периодах или при ограниченных правах запись может быть недоступна.
Программная сортировка таблицы значений и табличной части
Для разработчиков и при доработке конфигураций сортировка выполняется методом Сортировать(). У таблицы значений метод принимает строку с перечислением колонок и направлений через запятую:
ТаблицаТоваров.Сортировать("Номенклатура Возр, Сумма Убыв");
Ключевые слова Возр и Убыв задают направление; если направление не указано, применяется сортировка по возрастанию. Вторым необязательным параметром можно передать объект сравнения значений — это нужно для нестандартных правил, например регистронезависимого сравнения строк.
У табличной части объекта (документа, справочника) метод Сортировать() работает так же, но изменяет порядок строк самого объекта. После вызова объект нужно записать, иначе изменения потеряются. У динамического списка метод Сортировать() отсутствует — порядок там задаётся через свойство Порядок настроек компоновки или параметр УпорядочитьПо в запросе основной таблицы.
// Сортировка табличной части документа по наименованию товара
ОбъектДокумента.Товары.Сортировать("Номенклатура Возр");
ОбъектДокумента.Записать();Если сортировка нужна только для вывода пользователю, а данные менять нельзя, выгрузите данные в таблицу значений (Выгрузить()), отсортируйте копию и покажите её — исходный объект останется нетронутым.
Сортировка в запросе: когда она предпочтительнее
Если данные извлекаются запросом, сортировать их лучше на уровне самого запроса с помощью конструкции УПОРЯДОЧИТЬ ПО, а не после выгрузки в таблицу значений. Сервер базы данных выполняет упорядочивание эффективнее, особенно на больших объёмах, и дополнительно позволяет использовать АВТОУПОРЯДОЧИВАНИЕ для результата с итогами.
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
СУММА(Товары.Сумма) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
СГРУППИРОВАТЬ ПО
Товары.Номенклатура
УПОРЯДОЧИТЬ ПО
Сумма УБЫВ
Правило выбора простое: запрос — для данных из базы, метод Сортировать() — для таблиц, уже собранных в памяти или полученных из внешних источников (файлов, обменов), где запрос невозможен.
Сравнение способов
Быстро, но только одно поле и только в динамических списках
Несколько полей и сохранение настройки, доступно пользователю без прав разработчика
Сортировка по любым полям выборки, включая скрытые, и по уровням группировок
Полный контроль из кода, но требует прав на доработку и аккуратности с записью объектов
Максимальная производительность на больших данных, применяется до выгрузки результата
Проверка результата и типичные ошибки
После сортировки убедитесь, что порядок соответствует ожиданиям: прокрутите список, сравните значения в соседних строках, при составной сортировке проверьте порядок внутри групп с одинаковым значением первого поля. В отчётах пересформируйте результат после изменения настроек — старый результат на экране не обновляется сам.
Как проверить результат
Значения идут от меньшего к большему или наоборот, как задано
Чередование хаотично — вероятно, колонка строкового типа или сортировка не применилась
Внутри одинаковых значений первого поля строки упорядочены по второму
Второе поле игнорируется — проверьте порядок полей в настройках
После сортировки табличной части документ записан без ошибок
Появилось сообщение о невозможности записи — проверьте права и дату запрета изменения
Частые вопросы о сортировке таблиц в 1С
Почему клик по заголовку колонки не сортирует список?
Чаще всего колонка не связана с полем запроса динамического списка — например, добавлена программно или вычисляется при выводе. Сортировка динамического списка выполняется на сервере, поэтому доступна только для реальных полей данных. Проверьте также, не снят ли у списка признак использования стандартной сортировки.
Как отсортировать по нескольким колонкам одновременно?
В пользовательском режиме — через «Ещё — Настроить список», вкладка «Сортировка»: добавьте поля и расставьте их в нужном порядке приоритета. Программно — перечислите колонки через запятую в методе Сортировать(), например: Таблица.Сортировать("Организация Возр, Дата Убыв").
Меняет ли сортировка списка данные в базе?
Нет. Сортировка списка в пользовательском режиме влияет только на отображение. Реально изменяет данные только сортировка табличной части объекта с последующей записью или программная обработка, изменяющая порядок строк.
Как вернуть сортировку по умолчанию?
Откройте настройки списка через «Ещё» и нажмите «Установить стандартные настройки» — сортировка вернётся к порядку, заданному конфигурацией (обычно по дате для документов и по наименованию для справочников). В отчётах аналогично: в настройках выберите стандартный вариант.
Почему числа сортируются как 1, 10, 2, 25?
Это признак того, что значения хранятся или выводятся как строки, а не как числа. Строковое сравнение идёт посимвольно. Решение — привести колонку к числовому типу: в запросе через ВЫРАЗИТЬ(... КАК ЧИСЛО), в таблице значений — задать тип при создании колонки.
Можно ли отсортировать таблицу в мобильном клиенте 1С?
Да, если форма списка адаптирована под мобильный клиент: сортировка обычно доступна через меню настроек списка. Набор колонок и команд в мобильном интерфейсе может быть уже, чем в тонком клиенте, — это зависит от того, как разработчик конфигурации настроил формы для мобильных устройств.
Что важно запомнить
Для быстрой сортировки списка кликните по заголовку колонки, для составной — используйте «Ещё — Настроить список». В отчётах порядок задаётся на вкладке «Сортировка» в настройках, в коде — методом Сортировать() или конструкцией УПОРЯДОЧИТЬ ПО в запросе. Следите за типами данных колонок и помните: сортировка табличной части требует записи объекта.