Сортировка по алфавиту в 1С 8.3: список, отчёт и запрос

· 9 мин

Содержание

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

Дальше — по каждому месту отдельно. Везде речь о платформе 8.3 с интерфейсом «Такси». Если вы только пользователь и кода не пишете, вам хватит первых трёх разделов.

Сортировка по алфавиту в списке: справочники и журналы

Откройте любой справочник, например «Номенклатура» или «Контрагенты». Над списком видны заголовки колонок. Щёлкните по нужному заголовку.

  • первый щелчок — по возрастанию (А → Я, от меньшего к большему);
  • второй щелчок по той же колонке — по убыванию (Я → А);
  • у колонки, по которой идёт сортировка, появляется стрелка.

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

Что мешает сортировке

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

  • 📌 колонка вычисляемая: значение не хранится в базе, а считается при показе;
  • 📌 в колонке составной тип (значения разных видов — например, и контрагент, и физлицо): порядок между разными типами не определён;
  • 📌 список показывает иерархию: группы всегда идут выше элементов, сортировка действует внутри уровня.

Нужен именно алфавитный порядок, а список открыт в режиме дерева? Включите режим «Список» в командах просмотра иерархии, и группы перестанут отделяться от элементов.

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

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

Настройка списка и колонок: порядок, который сохранится

В командной панели списка найдите меню «Еще». Там есть команда настройки списка. Состав команд зависит от конфигурации и релиза, поэтому, если не нашли с первого раза, ищите именно в «Еще», а не на панели кнопок.

В окне настройки вы увидите:

  1. колонки — какие показывать и в каком порядке слева направо;
  2. сортировку — по каким полям упорядочить строки и в каком направлении;
  3. отбор — какие строки оставить.

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

Эта настройка запоминается для вашего пользователя. Другие пользователи её не увидят.

Если после настройки список выглядит странно и вы не помните, что меняли, в том же окне есть возврат к стандартным настройкам. Пользуйтесь им, а не удаляйте поля по одному.

Порядок колонок и сортировка — разные вещи

Перетаскивание колонок мышью меняет только то, где они стоят. Строки от этого не переставляются. Новички часто путают: передвинули «Наименование» на первое место и ждут алфавита.

Сортировка в отчётах и обработках

В отчётах на основе схемы компоновки данных порядок строк задаётся в настройках варианта отчёта. Откройте отчёт, нажмите «Показать настройки» (в новых релизах кнопка может называться «Настройки»), перейдите на закладку «Сортировка».

Порядок действий:

  1. Нажмите «Добавить» и выберите поле, по которому нужен алфавитный порядок, — например «Контрагент» или «Номенклатура».
  2. Задайте направление: «По возрастанию» или «По убыванию».
  3. Если полей несколько, расставьте их стрелками вверх и вниз: верхнее — главное.
  4. Нажмите «Сформировать».

Сохраните вариант отчёта под своим именем, иначе при следующем открытии настройка может слететь.

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

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

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

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

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

Сначала решите, где проще упорядочить: в запросе или после него. Запрос работает быстрее на больших выборках, потому что сортирует сервер СУБД. Таблицу значений удобно упорядочивать, когда данные уже в памяти.

Запрос: УПОРЯДОЧИТЬ ПО

Оператор стоит в самом конце запроса:

ВЫБРАТЬ
    Контрагенты.Наименование КАК Наименование,
    Контрагенты.ИНН КАК ИНН
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    НЕ Контрагенты.ЭтоГруппа
УПОРЯДОЧИТЬ ПО
    Наименование

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

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

Если в запросе есть СГРУППИРОВАТЬ ПО, упорядочивать можно только по полям группировки и агрегатным функциям. Иначе платформа сообщит об ошибке в тексте запроса.

Таблица значений: метод Сортировать

Таблица.Сортировать("Наименование");
Таблица.Сортировать("Наименование УБЫВ");
Таблица.Сортировать("Группа, Наименование");

В строке перечисляют колонки через запятую, после имени можно написать УБЫВ или ВОЗР. Метод меняет саму таблицу, копию он не создаёт. Если нужен исходный порядок, сделайте копию через Таблица.Скопировать() до сортировки.

Хотите полный пример, который читает строки и выводит их по алфавиту? Вот он:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура";
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Сортировать("Наименование");

Для Каждого Строка Из Таблица Цикл
    Сообщить(Строка.Наименование);
КонецЦикла;

Список значений

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

Массив

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

Русский алфавит: ё, регистр, цифры и пробелы

Тут и возникают жалобы «1С сортирует неправильно». Почти всегда это не сбой, а особенности сравнения строк.

Что видитеПричинаЧто делать
«Квартира 10» стоит выше «Квартира 2»Сравнивается текст по символам: «1» меньше «2»Использовать ведущие нули в кодах и номерах: 002, 010
Слова с пробелом в начале идут первымиПробел меньше любой буквыУбрать лишние пробелы в наименованиях (СокрЛП() при записи)
Слово с «ё» стоит не там, где ждётеПорядок «ё» относительно «е» зависит от правил сравненияПроверить на своей базе и при необходимости заменить «ё» в ключе сортировки
Заглавные и строчные идут вперемешкуРегистр при сравнении обычно не учитываетсяОбычно ничего: это нормальное поведение
Латиница и кириллица в разных блокахЭто разные алфавиты, они не смешиваютсяПривести наименования к одному алфавиту

Порядок в запросе зависит от СУБД

В клиент-серверной базе запрос упорядочивается средствами СУБД, и правила сравнения строк задаются настройками её сортировки (collation). В файловой базе их определяет платформа. Поэтому одна и та же выгрузка в двух базах может отличаться в мелочах — в первую очередь, это «ё» и спецсимволы. Если порядок критичен (например, для отчёта, который сверяют между базами), используйте отдельное числовое поле порядка и сортируйте по нему.

Цифры в наименованиях

Если наименования вида «Договор 1», «Договор 2», «Договор 10», естественный порядок по алфавиту даст 1, 10, 2. Решения:

  • 🔹 заводить номера с ведущими нулями (Договор 001);
  • 🔹 хранить номер в отдельном числовом реквизите и сортировать по нему;
  • 🔹 в коде вытащить число из строки и использовать его как дополнительное поле сортировки.

Невидимые символы

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

Веб-клиент и тонкий клиент: чем отличается сортировка

Основной принцип одинаков: щелчок по заголовку, меню «Еще», настройки. Различия в деталях.

  • В тонком клиенте порядок строк динамического списка определяется на сервере, клиент получает уже готовую порцию. В веб-клиенте то же самое, но порции подгружаются при прокрутке, поэтому на очень больших справочниках интерфейс может отвечать с задержкой.
  • Мобильный клиент показывает списки по-своему: заголовков колонок там нет, порядок задаёт разработчик, а пользователь выбирает его в меню списка, если разработчик это предусмотрел.
  • Сохранённые настройки хранятся на стороне сервера для пользователя, так что в веб-клиенте и в тонком они общие, если вы входите под одним именем.

Если сортировка по щелчку «не срабатывает» только в браузере, сначала обновите страницу с очисткой кеша (сочетание Ctrl + F5). После обновления конфигурации браузер иногда держит старые скрипты формы.

Что проверить, если порядок не тот

Ещё одна типичная ситуация: вы сортируете список документов по контрагенту, а порядок выглядит случайным. Колонка показывает ссылку на элемент справочника, и платформа упорядочивает по ссылке, а не по тексту наименования. Для ссылочных колонок порядок обычно строится по представлению, но если конфигурация настроена иначе, помогает настройка списка с сортировкой по полю «Контрагент.Наименование», когда такое поле доступно в выборе.

Пройдите по пунктам сверху вниз, остановитесь на первом, который объясняет картину:

  1. Список в режиме иерархии? Переключите на плоский вид.
  2. Сортируете по колонке составного типа или вычисляемой? Выберите другую колонку или настройте порядок в настройках списка.
  3. Включён отбор или поиск, и вы видите только часть строк? Сбросьте отбор.
  4. В наименованиях цифры без ведущих нулей? Измените нумерацию.
  5. Наименования содержат пробелы или невидимые символы в начале? Исправьте их.
  6. Это отчёт? Проверьте сортировку для каждой группировки отдельно.
  7. Это свой код? Убедитесь, что Сортировать вызван после заполнения таблицы, а не до.
Где вы пытаетесь отсортировать?

Частые вопросы

Как отсортировать в 1С от Я до А?
Щёлкните по заголовку колонки дважды: второй щелчок включает убывание. В настройках списка выберите «По убыванию», в запросе добавьте УБЫВ.
Почему сортировка не запоминается после закрытия списка?
Щелчок по заголовку временный. Чтобы порядок остался, задайте его в настройке списка в меню «Еще».
Можно ли отсортировать по алфавиту без учёта регистра?
Обычно регистр на порядок букв не влияет, и отдельно ничего включать не нужно. Если в вашей базе заглавные и строчные расходятся, поведение задаёт сортировка СУБД, и надёжнее вывести в запросе поле с приведённым регистром функцией ВЕРХНИЙРЕГИСТР и упорядочить по нему.
Как отсортировать список так, чтобы наименования с цифрами шли по числам, а не по тексту?
Хранить номер в отдельном числовом реквизите либо записывать номера с ведущими нулями, чтобы текстовый порядок совпал с числовым.
Что делать, если колонка не сортируется?
Скорее всего, она вычисляемая или составного типа. Сортируйте по связанному реквизиту, например по наименованию вместо ссылки.