Правильный порядок строк в 1С: от списков до запросов
Содержание
Порядок строк в 1С задаётся в трёх местах: в настройках самого списка на форме, в настройках отчёта (сортировка на СКД) и в тексте запроса через УПОРЯДОЧИТЬ ПО. Если строки идут «не так» — в большинстве случаев либо сортировка сброшена на порядок по умолчанию, либо поле сортируется как текст, а вы ждёте порядок как у чисел.
Разберём все уровни по очереди: от клика по заголовку колонки в пользовательском режиме до программного упорядочивания в запросе и индексов, без которых сортировка по реквизиту работает медленно или не работает вовсе.
Где задаётся порядок строк: быстрый ориентир
Сначала определитесь, с чем вы работаете — тогда станет понятно, куда идти. Порядок задаётся на разных уровнях, и настройка одного не влияет на другой.
| Что сортируете | Где настраивать | Инструмент |
|---|---|---|
| Журнал, список справочника | Форма списка | Клик по заголовку, Ещё → Настроить список |
| Строки отчёта | Настройки отчёта | Вкладка Сортировка в СКД |
| Выборку в коде | Текст запроса | УПОРЯДОЧИТЬ ПО |
| Таблицу значений, дерево | Объект в памяти | Метод Сортировать |
| Табличную часть | Документ | Стрелки перемещения или Сортировать |
| Вид «по умолчанию» для всех | Конфигуратор | Настройка списка, индекс реквизита |
Если порядок «не слушается», почти всегда вы настраиваете не тот уровень: меняете сортировку на форме, а она зафиксирована в конфигураторе, либо сортируете в запросе, но результат выводится через СКД, которая переупорядочивает строки по своим настройкам.
Порядок в списках и журналах в режиме «Предприятие»
Самый быстрый способ — клик по заголовку колонки. Первый клик сортирует по возрастанию, второй — по убыванию, рядом с названием появляется стрелка. Это работает в журналах документов, списках справочников и любых динамических списках.
Если нужна сортировка по нескольким полям сразу или по колонке, которой нет в видимой таблице, откройте меню Ещё → Настроить список… и перейдите на вкладку Сортировка. Слева — доступные поля, справа — выбранные. Перетащите нужные, стрелками задайте направление (↑ возрастание, ↓ убывание) и порядок приоритета: верхнее поле — главное, остальные уточняют.
💡 Порядок полей в правой колонке — это и есть приоритет. Сначала система сортирует по первому полю, при равных значениях — по второму, и так далее.
Настройка сохраняется для текущего пользователя на этой форме. Чтобы вернуться к исходному виду, в том же меню выберите Установить стандартные настройки.
По вычисляемым полям и по реквизитам, которые не проиндексированы, сортировка в динамическом списке может быть недоступна — поле просто не появится в списке доступных для сортировки. Это лечится индексом на уровне конфигуратора (см. раздел про метаданные).
Сортировка в отчётах на системе компоновки данных (СКД)
В любом отчёте на СКД порядок строк настраивается не в запросе, а в пользовательских настройках. Откройте отчёт, нажмите Настройки (или Ещё → Изменить вариант для расширенной настройки) и найдите вкладку Сортировка.
Принцип тот же, что и в списках: выбираете поля, направление и приоритет. Но у СКД есть важная особенность — сортировка применяется внутри каждой группировки.
Если в отчёте есть группировки (например, по складу, затем по номенклатуре), то:
- порядок самих групп задаётся сортировкой на уровне этой группировки;
- порядок строк внутри группы — сортировкой на уровне детальных записей.
🔸 Частая путаница: пользователь задаёт сортировку по сумме, а строки упорядочены по названию. Причина — сортировка стоит на уровне Детальные записи, а группировка по номенклатуре сортирует номенклатуру по наименованию. Нужно открыть структуру отчёта, встать на нужную группировку и задать сортировку именно для неё.
Ещё один момент — элемент Порядок в самой структуре компоновки. Если разработчик зафиксировал порядок в макете, пользовательская сортировка может быть заблокирована или объединяться с фиксированной. Тогда настраивать порядок нужно в конфигураторе, в схеме компоновки данных на вкладке Настройки → Сортировка.
Порядок по умолчанию на уровне конфигурации
То, как список выглядит при первом открытии, задаётся в конфигураторе. Здесь три рычага.
Настройка списка на форме. У реквизита формы типа «Динамический список» есть свойство с настройками. Через Настройка списка можно задать сортировку по умолчанию, а флаг фиксированной настройки запретит пользователю её менять. Это удобно, когда журнал всегда должен идти, например, по дате убывания.
Индексирование реквизита. Чтобы по реквизиту справочника или документа можно было быстро сортировать и отбирать, его индексируют. У реквизита есть свойство Индексировать со значениями:
Не индексировать— сортировка по полю будет медленной или недоступной в динамическом списке;Индексировать— обычный индекс;Индексировать с доп. упорядочиванием— индекс плюс поле представления, нужен когда сортируете по ссылочному реквизиту и хотите порядок по его представлению.
Без индекса сортировка больших списков по реквизиту либо тормозит, либо платформа её не предлагает. Это первое, что стоит проверить, если нужного поля нет в настройках сортировки.
Иерархические справочники. Для справочника с иерархией порядок зависит от флага «Располагать группы сверху» в настройках списка. При включённом флаге сначала идут группы, потом элементы; при выключенном — всё вперемешку по полю сортировки.
Управление порядком в запросах: УПОРЯДОЧИТЬ ПО
В коде порядок строк задаёт секция УПОРЯДОЧИТЬ ПО в конце запроса. Синтаксис простой:
ВЫБРАТЬ
Номенклатура.Наименование КАК Наименование,
Номенклатура.Код КАК Код
ИЗ
Справочник.Номенклатура КАК Номенклатура
УПОРЯДОЧИТЬ ПО
Наименование ВОЗР,
Код УБЫВ
ВОЗР — по возрастанию (это значение по умолчанию, можно не писать), УБЫВ — по убыванию. Перечисляйте поля через запятую в порядке приоритета.
Несколько практических нюансов, которые экономят часы отладки:
Сортировка по ссылочному полю. Если упорядочить по полю-ссылке (например, по Контрагент), строки пойдут не по наименованию контрагента, а по внутреннему порядку ссылок. Чтобы сортировать по тому, что видит пользователь, упорядочивайте по представлению: УПОРЯДОЧИТЬ ПО Контрагент.Наименование.
Иерархия. Для иерархических справочников есть особая форма — упорядочивание с сохранением иерархии. Используйте ключевое слово ИЕРАРХИЯ:
УПОРЯДОЧИТЬ ПО
Наименование ИЕРАРХИЯ
Тогда элементы расположатся внутри своих групп, а не сплошным плоским списком.
АВТОУПОРЯДОЧИВАНИЕ. Ключевое слово АВТОУПОРЯДОЧИВАНИЕ в конце запроса достраивает сортировку автоматически: по ссылочным полям — по их представлению, по иерархическим таблицам — с учётом иерархии. Удобно, но на больших выборках добавляет нагрузку, поэтому в рабочих отчётах лучше задавать УПОРЯДОЧИТЬ ПО явно.
Если в запросе есть СГРУППИРОВАТЬ ПО, то упорядочивать можно только по полям группировки или по агрегатным функциям (СУММА, КОЛИЧЕСТВО). Попытка отсортировать по полю, которого нет в группировке, вызовет ошибку.
Сортировка по дате в регистрах. При выборке движений из регистра накопления или сведений упорядочивайте по полю Период — именно оно хранит момент времени записи. Если нужен порядок «как в хронологии проведения», добавьте вторым полем Регистратор, а внутри одного регистратора строки пойдут в порядке их добавления.
Первые N строк в нужном порядке. Чтобы выбрать, например, десять последних документов, сочетайте ПЕРВЫЕ и сортировку по убыванию:
ВЫБРАТЬ ПЕРВЫЕ 10
Продажа.Ссылка КАК Ссылка,
Продажа.Дата КАК Дата
ИЗ
Документ.РеализацияТоваровУслуг КАК Продажа
УПОРЯДОЧИТЬ ПО
Дата УБЫВ
Без УПОРЯДОЧИТЬ ПО конструкция ПЕРВЫЕ вернёт произвольные строки — порядок без явной сортировки не гарантирован.
Естественная сортировка кодов и артикулов. Если артикулы вида А-2, А-10 должны идти по-человечески, а не по алфавиту, одного запроса мало: текст сортируется посимвольно. Рабочий приём — хранить числовую часть в отдельном числовом реквизите и сортировать по нему, либо добивать номер ведущими нулями при вводе (А-002, А-010), чтобы длина строки совпадала.
Порядок в таблицах значений и других коллекциях
Данные, собранные в памяти, сортируются методом объекта, а не запросом.
Таблица значений и дерево значений. Метод Сортировать принимает строку с колонками и направлением:
ТаблицаТоваров.Сортировать("Склад Возр, Сумма Убыв");
Сначала строки упорядочатся по складу по возрастанию, при равных складах — по сумме по убыванию. Названия направлений пишутся по-русски: Возр и Убыв.
Список значений. У списка значений есть два метода: СортироватьПоЗначению() и СортироватьПоПредставлению(), каждый принимает направление сортировки как параметр.
Соответствие. Напрямую не сортируется — порядок ключей в соответствии не гарантирован. Если нужен упорядоченный обход, выгрузите ключи в массив или таблицу значений и отсортируйте её.
🔸 Если сортируете коллекцию по полю, где числа хранятся как строки, порядок будет текстовым. Решение то же, что и везде: приводить к числу заранее или хранить число в числовой колонке.
Сортировка табличных частей и табличных документов
Здесь часто возникает недопонимание, поэтому разберём отдельно.
Табличная часть документа. Строки табличной части хранятся в том порядке, в котором их добавили. Интерактивной «вечной» сортировки по клику, как в динамических списках, у табличной части нет — пользователь может менять порядок строк стрелками Переместить вверх/вниз. Если нужно упорядочить табличную часть программно, используйте метод Сортировать:
Документ.Товары.Сортировать("Номенклатура");
Пересортировка табличной части в проведённом документе меняет порядок строк и может повлиять на нумерацию и печатные формы. Делайте это осознанно и перепроводите документ, если движения зависят от порядка.
Табличный документ (макет вывода). У табличного документа — того, что формируется на печать или в отчёт, — встроенной интерактивной сортировки готового результата нет. Порядок строк в нём определяется тем, в каком порядке вы выводите данные. Поэтому сортировать нужно источник: отсортируйте таблицу значений или результат запроса до вывода в макет, и строки лягут в нужном порядке.
Если отчёт построен на СКД и выводится в табличный документ — возвращайтесь к разделу про сортировку СКД: порядок задаётся там, а не в готовом документе.
Почему порядок «неправильный»: диагностика
Чаще всего причина не в том, что сортировка сломалась, а в том, что сортируется не то поле или не тем типом. Сопоставьте симптом с причиной:
СокрЛП() при вводе или в запросе.УПОРЯДОЧИТЬ ПО … ИЕРАРХИЯ.Индексировать у реквизита.Контрагент.Наименование или по представлению.Отдельно про регистр и буквы «е»/«ё». Сравнение строк в 1С по умолчанию нечувствительно к регистру, а «е» и «ё» считаются разными символами. Если список расходится с ожиданием именно на словах с «ё» — это оно.
Частые вопросы
Почему после закрытия формы сортировка сбрасывается?
Можно ли отсортировать справочник по произвольному реквизиту навсегда?
Как отсортировать по дате, а внутри даты — по номеру?
Сортировка, в запросе — УПОРЯДОЧИТЬ ПО Дата ВОЗР, Номер ВОЗР.Чем отличается АВТОУПОРЯДОЧИВАНИЕ от УПОРЯДОЧИТЬ ПО?
УПОРЯДОЧИТЬ ПО задаёт порядок явно по перечисленным полям. АВТОУПОРЯДОЧИВАНИЕ достраивает сортировку автоматически — по представлениям ссылок и по иерархии. На больших выборках явное упорядочивание предсказуемее и быстрее.Почему сортировка по реквизиту тормозит на большом справочнике?
Индексировать, а если часто сортируете по ссылочному полю по его представлению — Индексировать с доп. упорядочиванием.