Сортировка в 1С 8.3: по колонке, по нескольким полям, в отчёте и в запросе

· 10 мин

Содержание

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

Частое заблуждение — что так же сортируется любая таблица на экране. Нет: список справочника, табличная часть документа, готовый отчёт и таблица в коде сортируются по-разному. Всё ниже относится к платформе 1С:Предприятие 8.3 с интерфейсом «Такси» и одинаково работает в Бухгалтерии, ЗУП, УТ и других типовых конфигурациях.

Какую таблицу вы хотите отсортировать?

Сортировка списка в 1С щелчком по колонке

Списки справочников, журналы документов и регистры — это динамические списки. Данные в них читаются из базы порциями, а сортировку выполняет сама СУБД. Поэтому даже список из 200 000 контрагентов сортируется за секунды.

Как это работает на практике:

  1. Откройте список, например Справочники → Контрагенты в Бухгалтерии.
  2. Щёлкните левой кнопкой мыши по заголовку колонки Наименование.
  3. Рядом с названием появится стрелка: вверх — по возрастанию, вниз — по убыванию.
  4. Щёлкните ещё раз — направление сменится.

Сортировка по одной колонке заменяет предыдущую. Если сначала отсортировать по ИНН, а потом щёлкнуть по наименованию, сортировка по ИНН пропадёт.

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

Иерархические справочники

В справочниках с группами (номенклатура, контрагенты) порядок зависит от режима просмотра. Переключается он в меню Ещё → Режим просмотра:

  • 📁 Иерархический список — сортировка действует внутри текущей группы, группы показываются выше элементов;
  • 📄 Список — все элементы одним полотном, сортировка идёт по всему справочнику без учёта групп;
  • 🌳 Дерево — группы раскрываются ветками, элементы сортируются внутри своей ветки.

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

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

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

Сортировка по нескольким полям через настройку списка

Щелчок по заголовку даёт только один уровень. Когда нужно, например, сначала по организации, а внутри — по дате, откройте настройку списка.

  1. В командной панели списка нажмите Ещё → Настроить список….
  2. Перейдите на вкладку Сортировка.
  3. В левой части найдите нужное поле и перетащите его вправо или дважды щёлкните по нему.
  4. Для каждого поля задайте направление: По возрастанию или По убыванию.
  5. Порядок строк в правой части — это приоритет: верхнее поле сортирует первым.
  6. Нажмите Завершить редактирование.

Пример для журнала документов реализации:

ПриоритетПолеНаправлениеЧто получится
1КонтрагентПо возрастаниюПокупатели по алфавиту
2ДатаПо убываниюУ каждого покупателя свежие отгрузки сверху

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

В этом же окне есть вкладки Отбор и Условное оформление. Сочетание отбора и сортировки — самый быстрый способ получить «отгрузки по одному складу от больших к малым» без отчётов.

Если в списке всё перепуталось и непонятно, откуда взялся порядок, в окне настройки списка через меню Ещё выберите команду установки стандартных настроек. Она сбросит ваши сортировку, отбор и оформление этого списка. Чужие настройки не затрагиваются.

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

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

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

  1. Откройте документ и поставьте курсор в нужную колонку табличной части, например Номенклатура.
  2. Нажмите кнопку Ещё над табличной частью.
  3. Выберите команду сортировки по возрастанию или по убыванию.
  4. Строки перестроятся, номера в колонке N пересчитаются.
  5. Запишите документ — новый порядок сохранится.

Чем это отличается от списка:

  • 🔢 сортировка меняет сами данные документа, а не только отображение;
  • 🖨️ печатная форма (накладная, счёт) выведет строки уже в новом порядке;
  • ↩️ закрыть документ без записи — значит вернуть прежний порядок.

💡 Если нужно поменять местами пару строк, а не сортировать всё, используйте кнопки со стрелками вверх и вниз в командной панели табличной части. В большинстве типовых форм они есть.

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

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

Готовый отчёт на экране — это табличный документ, по сути картинка из ячеек. Отсортировать его щелчком по заголовку, как в Excel, нельзя. Порядок задают до формирования, в настройках отчёта.

Через настройки отчёта

Большинство отчётов в типовых конфигурациях построены на системе компоновки данных (СКД). В них:

  1. Нажмите кнопку Настройки в форме отчёта.
  2. Если доступны только простые параметры, переключитесь на расширенный вид настроек.
  3. Откройте вкладку Сортировка.
  4. Добавьте поле, выберите направление, расположите поля по приоритету.
  5. Нажмите Закрыть и сформировать.

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

Через меню ячейки

Быстрый путь без похода в настройки: дважды щёлкните по ячейке в колонке готового СКД-отчёта. В меню расшифровки выберите Упорядочить и направление. Отчёт перестроится с новым порядком.

Если отчёт не на СКД

Отдельные отчёты и внешние обработки выводят табличный документ напрямую из кода. Сортировки в них нет, если её не предусмотрел разработчик. Рабочий выход — сохранить результат в Excel:

  1. Нажмите кнопку сохранения в командной панели отчёта (значок дискеты).
  2. Выберите формат «Лист Microsoft Excel 2007-…» (.xlsx).
  3. Откройте файл и отсортируйте данные средствами Excel.

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

УПОРЯДОЧИТЬ ПО: сортировка в запросе 1С

Для программиста сортировка начинается в запросе. Конструкция УПОРЯДОЧИТЬ ПО ставится в конце текста, после условий и группировок.

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

Правила, которые стоит держать в голове:

  • ⬆️ ВОЗР — по возрастанию, действует по умолчанию, писать его необязательно;
  • ⬇️ УБЫВ — по убыванию, указывается для каждого поля отдельно;
  • 📋 сортировать можно по полю, которого нет в списке выборки, как Наименование в примере;
  • 🔗 при сортировке по ссылке платформа упорядочивает по полям представления объекта. Надёжнее и нагляднее указать поле явно: Контрагент.Наименование;
  • 🧩 в запросе с ОБЪЕДИНИТЬ конструкция УПОРЯДОЧИТЬ ПО пишется один раз, в самом конце, и действует на весь результат.

АВТОУПОРЯДОЧИВАНИЕ

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

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

Нужно вывести покупателей от самых крупных к мелким — сортируйте по агрегатному полю:

ВЫБРАТЬ
    Продажи.Контрагент КАК Контрагент,
    СУММА(Продажи.Сумма) КАК Выручка
ИЗ
    РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
    Продажи.Контрагент
УПОРЯДОЧИТЬ ПО
    Выручка УБЫВ

Имя регистра в примере условное: в каждой конфигурации набор регистров свой. Сортировать по псевдониму (Выручка) можно, это короче, чем повторять СУММА(...).

Сортировка таблицы значений, списка и дерева в коде

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

Таблица значений

Метод Сортировать() принимает строку с именами колонок через запятую. Направление пишется после имени колонки через пробел.

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

Здесь строки упорядочатся по контрагенту, а внутри одного контрагента — от большей суммы к меньшей.

Тонкость со ссылками: если колонка содержит ссылки на справочник, без второго параметра сортировка идёт не по алфавиту. Чтобы упорядочить по представлению, передайте объект сравнения:

Таблица.Сортировать("Контрагент", Новый СравнениеЗначений);

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

У списка значений два метода: СортироватьПоЗначению() и СортироватьПоПредставлению(). Направление — системное перечисление НаправлениеСортировки.

У массива метода сортировки нет. Стандартный приём — пропустить массив через список значений:

Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(Массив);
Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
Массив = Список.ВыгрузитьЗначения();

Дерево значений

Сортируют коллекцию строк дерева. Второй параметр Истина распространяет сортировку на все подчинённые уровни:

Дерево.Строки.Сортировать("Наименование", Истина);

Табличная часть документа в коде

Надёжный путь на сервере — выгрузить табличную часть в таблицу значений, отсортировать и загрузить обратно:

ТЧ = ДокументОбъект.Товары.Выгрузить();
ТЧ.Сортировать("Номенклатура");
ДокументОбъект.Товары.Загрузить(ТЧ);

Номера строк при загрузке пересчитаются. Изменение сохранится только после записи объекта.

Порядок динамического списка в форме

Задать начальную сортировку списка на форме можно в модуле формы, например в ПриСозданииНаСервере:

ЭлементПорядка = Список.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Дата");
ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
ЭлементПорядка.Использование = Истина;

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

Почему таблица в 1С не сортируется: частые случаи

Диагностика: выберите симптом

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

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

Можно ли отсортировать список сразу для всех пользователей?
Через пользовательскую настройку — нет, она у каждого своя. Администратор может скопировать настройки другим пользователям в разделе Администрирование → Настройки пользователей и прав, а разработчик — задать порядок по умолчанию в форме списка.
Почему в журнале новые документы внизу, а у коллеги вверху?
У вас разное направление сортировки по дате. Щёлкните по заголовку колонки Дата, пока стрелка не укажет вниз, — свежие документы окажутся сверху.
Как отсортировать номенклатуру по остатку?
В обычном списке номенклатуры остатков нет: они хранятся в регистрах. Сформируйте ведомость или отчёт по остаткам и в настройках отчёта задайте сортировку по количеству или сумме по убыванию.
Влияет ли сортировка на данные в базе?
Сортировка списка и отчёта — нет, это только отображение. Сортировка табличной части меняет порядок строк документа после его записи.
Почему по колонке сортируется, а по другой похожей — нет?
Первая колонка берётся из поля базы, вторая рассчитывается при выводе. Сортировать можно только по полям, которые есть в запросе списка.