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