В разработке на платформе 1С:Предприятие 8.3 часто возникает задача зафиксировать определенный порядок строк в динамическом списке и запретить пользователю его менять (Методы доработки динамических списков из моей практики [март 2026]). Стандартное поведение платформы предполагает, что клик по заголовку колонки автоматически перестраивает список. Рассмотрим подробнее, какими методами можно ограничить или полностью отключить эту возможность, сохранив при этом удобство интерфейса.
Проанализируем самый простой и эффективный способ, который не требует написания сложного кода и работает на уровне метаданных. Этот метод основан на управлении составом настроек, доступных пользователю.
Разберем этот процесс по шагам:
ДинамическийСписок.Дата или Наименование).Важный нюанс: когда мы снимаем этот флажок, платформа понимает, что пользователь не должен иметь возможности интерактивно влиять на порядок строк. После этого клик по заголовку любой колонки в режиме «Предприятие» перестанет вызывать пересортировку. Это решение является наиболее «чистым» с точки зрения архитектуры платформы.
Иногда нам требуется отключить сортировку не для всего списка, а только для конкретных колонок. В этом случае на помощь приходит встроенный язык 1С. Выясним, как использовать метод УстановитьОграниченияИспользованияВПорядке.
Рассмотрим пример кода, который следует разместить в процедуре ПриСозданииНаСервере (для масштабных манипуляций с интерфейсом пригодится Программное изменение форм (для разработчиков)):
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем элемент управления "Список"
МассивПолей = Новый Массив;
МассивПолей.Добавить("Комментарий");
МассивПолей.Добавить("СуммаДокумента");
// Запрещаем сортировку по указанным полям
Список.УстановитьОграниченияИспользованияВПорядке(МассивПолей, Ложь);
КонецПроцедуры
Проанализируем ситуацию: если пользователь попытается нажать на заголовок колонки "Комментарий", система может выдать предупреждение о невозможности сортировки. Чтобы сделать работу более комфортной, этот метод часто комбинируют с визуальными приемами.
Существует интересный технический «трикс», связанный с особенностями работы динамических списков. Если в основном тексте запроса динамического списка используется предложение СГРУППИРОВАТЬ ПО, то платформа по умолчанию ограничивает возможности интерактивной сортировки по полям, не входящим в группировку.
Посмотрим на пример запроса (для отладки сложных выборок используйте Управляемая консоль запросов, отчетов 3.9.0 (расширение, внешняя обработка)):
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Код КАК Код,
СправочникНоменклатура.Наименование КАК Наименование
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
СГРУППИРОВАТЬ ПО
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.Код,
СправочникНоменклатура.Наименование
Хотя этот метод кажется избыточным (группировка по всем полям), он эффективно блокирует стандартные механизмы перестроения индекса при клике. Однако помните о производительности: для больших таблиц использование СГРУППИРОВАТЬ ПО может замедлить выборку данных.
Рассмотрим еще один «тихий» способ, доступный в конструкторе динамического списка. В настройках списка есть вкладка Поля. Для каждого выбранного поля там предусмотрена колонка Использовать в порядке.
Если мы снимем соответствующий флажок напротив поля, оно перестанет участвовать в механизме сортировки. Платформа просто не будет реагировать на клик по заголовку такой колонки, при этом визуально заголовок останется прежним. Это отличная альтернатива программному методу, так как настройка хранится в метаданных и не требует исполнения кода при запуске формы.
Если стоит задача сделать так, чтобы заголовок вообще не выглядел как кнопка, можно воспользоваться приемом с группировкой колонок. Этот метод позволяет «подменить» реальный заголовок, на который можно нажать, статичным текстом.
Разберем по шагам, как это реализовать:
В результате пользователь видит заголовок группы, который визуально неотличим от заголовка колонки, но клик по нему не вызывает никаких действий, так как группа колонок не обладает встроенным функционалом сортировки.
Часто желание отключить сортировку продиктовано тем, что список начинает «тормозить» при попытке пользователя отсортировать данные по неиндексированным полям (например, по строковому комментарию или реквизиту через несколько точек). Проанализируем, как можно решить эту проблему правильно:
1. Индексирование полей. Если сортировка все же нужна, но она медленная, проверьте свойство Индексировать у соответствующего реквизита в метаданных справочника или документа.
2. Использование Компоновщика настроек. В современных версиях платформы (8.3.10+) мы можем программно управлять доступностью полей через компоновщик. Это позволяет тонко настраивать права на сортировку в зависимости от роли пользователя:
ДоступноеПоле = Список.КомпоновщикНастроек.Настройки.ПорядокДоступныеПоля.Элементы.Найти("Дата");
Если ДоступноеПоле <> Неопределено Тогда
ДоступноеПоле.Доступность = Ложь;
КонецЕсли;
Рассмотренные методы позволяют гибко управлять поведением динамического списка. Выбор конкретного способа зависит от ваших целей: нужно ли полностью запретить сортировку во всем списке или только для определенных колонок, и хотите ли вы оставить пользователю возможность менять настройки через меню Еще — Настроить список.