Алфавитный порядок в 1С: списки, отчёты, запросы и печатные формы

· 9 мин

Содержание

Открыли справочник «Номенклатура», а позиции идут в порядке ввода: «Ящик» стоит выше «Автомата», «Бумага» затерялась посередине. Чтобы отсортировать по алфавиту в 1С 8.3, щёлкните по заголовку колонки «Наименование». Один клик даёт порядок от А до Я, второй — от Я до А.

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

Сортировка по алфавиту в списке: клик по заголовку

Самый быстрый способ — заголовок колонки. Работает в справочниках, журналах документов и любых списках с интерфейсом «Такси».

Как это выглядит на практике

  1. Откройте список, например Справочники → Номенклатура (в конфигурациях разные разделы, но принцип одинаков).
  2. Щёлкните по заголовку нужной колонки. В заголовке появится стрелка направления.
  3. Щёлкните ещё раз — порядок развернётся.

Порядок хранится только пока открыта форма. Закрыли список, открыли заново — вернулась сортировка по умолчанию, которую задал разработчик конфигурации.

Что даёт клик, а что нет

КолонкаКак сортируется
Строковая («Наименование»)по алфавиту, регистр не учитывается
Числовая («Сумма»)по возрастанию или убыванию значения
Датапо хронологии
Ссылка на другой элементпо представлению этого элемента
Колонка-флажоксначала без отметки, потом с отметкой

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

Нужно сохранить порядок на постоянной основе? Для личного пользования используйте настройки списка в форме. Для всех пользователей порядок меняет только разработчик.

Папки и группы: почему сортировка «ломается»

В иерархическом справочнике сначала идут группы, затем элементы. Это не ошибка. Платформа сортирует внутри каждого уровня отдельно.

Что видит пользователь:

  • 📁 группы стоят вверху списка, даже если их названия начинаются на «Я»;
  • 📄 элементы внутри группы упорядочены по алфавиту;
  • ➡️ чтобы увидеть всё одним плоским списком, отключите иерархический просмотр. Кнопка переключения находится в командной панели списка.

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

Алфавитная сортировка в отчётах

В отчётах на системе компоновки данных (большинство стандартных отчётов) порядок строк настраивается в пользовательских настройках.

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

  1. Сформируйте отчёт.
  2. Откройте настройки отчёта кнопкой Настройки (она есть в командной панели).
  3. Перейдите на вкладку или в раздел Сортировка.
  4. Добавьте поле, по которому нужен порядок, например «Контрагент» или «Номенклатура».
  5. Выберите направление: по возрастанию или по убыванию.
  6. Нажмите Сформировать.

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

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

Когда отчёт сортирует сам

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

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

Для разработчиков и тех, кто пишет запросы в консоли, порядок задаёт оператор УПОРЯДОЧИТЬ ПО в конце запроса.

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

ВОЗР — от А до Я, УБЫВ — от Я до А. Если слово не указать, подразумевается порядок по возрастанию.

Несколько полей и ссылки

Можно перечислять поля через запятую:

УПОРЯДОЧИТЬ ПО
    Контрагент.Наименование ВОЗР,
    Дата УБЫВ

Для ссылочного поля есть два варианта:

  • УПОРЯДОЧИТЬ ПО Контрагент — порядок определяется внутренним значением ссылки, а не названием. Алфавита не получится.
  • УПОРЯДОЧИТЬ ПО Контрагент.Наименование — именно по тексту наименования. Нужен он.

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

Порядок строк задавайте в итоговом запросе. Результат подзапроса или временной таблицы никто не обещает вернуть в нужной последовательности: СУБД вправе переставить строки при соединении.

Таблица значений, список и массив в коде

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

Таблица значений. Метод Сортировать принимает перечень колонок через запятую и направление:

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

Список значений. Здесь два метода: СортироватьПоЗначению и СортироватьПоПредставлению. Второй нужен, когда в списке лежат ссылки, а показываем мы их текст:

Список.СортироватьПоПредставлению(НаправлениеСортировки.Возр);

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

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

Строки сравниваются без учёта регистра в таблице и списке по умолчанию, но если вы сравниваете их самостоятельно оператором < или >, регистр может повлиять. Для сложных правил, например «сначала латиница, потом кириллица», нужен собственный компаратор через цикл или запрос.

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

Тут чаще всего возникают вопросы «почему порядок неправильный».

Числа в строковых полях

Коды часто хранятся строкой. Тогда «10» идёт раньше «2», потому что сравниваются символы, а не значения. Спасает код с ведущими нулями: «0002», «0010». У справочников с кодом типа «Число» такой проблемы нет.

Пробелы и спецсимволы

Лишний пробел в начале наименования сдвигает элемент в самое начало списка. Кавычки и скобки тоже влияют. Если «ООО “Ромашка”» оказалось выше «Агат», ищите пробел перед названием или нестандартный символ.

Поиск таких элементов: отберите в списке наименования, начинающиеся с пробела, и поправьте вручную или обработкой.

Буква ё

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

Выгрузка в файлы

Кодировка влияет не на сортировку, а на чтение результата. Если вы выгружаете отсортированный список в текстовый файл и в Блокноте видны «кракозябры», сохраняйте файл в UTF-8 и открывайте с той же кодировкой.

Алфавитный порядок в печатных формах

Табличный документ сам по себе ничего не сортирует: он выводит строки в том порядке, в каком их передали. Поэтому порядок нужно навести до вывода.

Три рабочих способа:

  1. Отсортировать табличную часть документа. Если в командной панели табличной части есть команда сортировки, упорядочьте строки ею. Печатная форма, которая берёт данные из табличной части, часто повторит порядок экрана, но не всегда: это зависит от того, как написан макет. Такой способ годится для разовой печати.
  2. Сортировка в запросе печатной формы. Если форма строится запросом, добавьте УПОРЯДОЧИТЬ ПО. Единственный способ, который гарантирует результат.
  3. Сортировка таблицы значений перед выводом. Если данные собираются в коде, перед циклом вывода вызовите Таблица.Сортировать("Наименование").

Если печатная форма внешняя, подключенная как обработка, порядок задаёт её автор. Сами пользователи его не меняют.

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

Как проверить результат до печати

Не отправляйте документ на принтер вслепую. Откройте предварительный просмотр и пройдитесь по первым и последним строкам: ошибки порядка обычно видны на краях. Для таблицы из сотни строк достаточно проверить три места: начало, середину и конец. Если встретилась пара строк в обратном порядке, ищите в наименованиях лишний пробел или латинскую букву, похожую на русскую («С», «А», «О», «Е» бывают и там и там). Такая «подмена» часто возникает при копировании из почты и мессенджеров, и порядок она ломает без видимых причин.

Личные настройки и сохранение порядка в отчёте

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

Несколько практических замечаний:

  • 💾 личный вариант видите только вы, общий вариант доступен всем, у кого есть право на отчёт;
  • 💾 типовой вариант лучше не перезаписывать: при обновлении конфигурации он вернётся к исходному виду;
  • 💾 если вариантов много, назовите их по смыслу: «Контрагенты по алфавиту», «Номенклатура по группам».

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

Когда сортировка тормозит

На справочнике из десятков тысяч позиций порядок по наименованию срабатывает мгновенно. На миллионе записей и по неиндексированному полю — уже нет.

Что помогает:

  • ⚡ в свойствах реквизита метаданных включить индексирование. Вариант «Индексировать с дополнительным упорядочиванием» нужен как раз для быстрой сортировки по тексту;
  • ⚡ сортировать по меньшему числу полей. Каждое новое поле в УПОРЯДОЧИТЬ ПО — дополнительная работа для СУБД;
  • ⚡ ограничивать выборку: отборами и оператором ПЕРВЫЕ N, если нужны только первые строки;
  • ⚡ не упорядочивать то, что не будут читать. В промежуточных запросах порядок часто бесполезен.

Индексы добавляет разработчик в конфигураторе, и обновление структуры базы занимает время. Делайте это вне рабочих часов и в копии базы.

Где вы хотите упорядочить данные?

Если порядок не тот, который нужен

Типичные причины, если после всех действий строки стоят не так:

  • 🔎 в наименовании есть ведущий пробел или невидимый символ;
  • 🔎 колонка хранит число строкой, и «100» идёт перед «20»;
  • 🔎 в запросе сортируется ссылка, а не её наименование;
  • 🔎 в иерархическом справочнике вы ждёте плоский список, а платформа показывает группы сверху;
  • 🔎 в отчёте остались пользовательские настройки, которые перекрывают сортировку, заданную в варианте отчёта.

Последний случай решается просто: сбросьте настройки варианта или создайте новый вариант отчёта и сохраните его под своим именем.

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

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