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