Как отключить сортировку по нажатию на шапку динамического списка в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Ограничения платформы при работе с шапкой таблицы

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

  1. В платформе 1С отсутствует прямое событие или свойство ячейки заголовка таблицы (например, «ПриКликШапки» или «ЗапретитьСортировкуКолонки»), позволяющее избирательно отключить нажатие на конкретный заголовок.
  2. Свойство таблицы формы Изменять порядок строк отвечает исключительно за интерактивное ручное перемещение записей пользователем с помощью команд «Вверх» и «Вниз» и не блокирует сортировку при нажатии на шапку.
  3. Конструкция УПОРЯДОЧИТЬ ПО в тексте произвольного запроса динамического списка может переопределяться платформой при динамическом считывании данных, если порядок не зафиксирован в настройках компоновщика.

Способ 1. Отключение пользовательских настроек порядка в динамическом списке

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

  1. Откроем управляемую форму в конфигураторе.
  2. Перейдем на вкладку Реквизиты и выделим нужный реквизит формы с типом ДинамическийСписок.
  3. В палитре свойств динамического списка найдем свойство НастройкиКомпоновкиДанных и откроем диалог настройки.
  4. Перейдем на закладку Порядок и настроим необходимую сортировку полей.
  5. В нижней части окна настроек или в свойствах элемента порядка снимем флаг Включать в пользовательские настройки.

После этого возможность интерактивного изменения порядка через заголовок и стандартное окно настроек списка будет отключена.

Способ 2. Программная установка фиксированного порядка

Рассмотрим более надежный программный метод. У динамического списка есть коллекция ФиксированныеНастройки. Настройки, установленные в этой коллекции, имеют наивысший приоритет, всегда применяются при выборке данных и принципиально недоступны для изменения пользователем через пользовательский интерфейс.

Установим жесткий порядок программно при создании формы на сервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Очистим текущий фиксированный порядок
    Список.КомпоновщикНастроек.ФиксированныеНастройки.Порядок.Элементы.Очистить();
    
    // Добавим поле для сортировки
    ЭлементПорядка = Список.КомпоновщикНастроек.ФиксированныеНастройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
    ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Дата");
    ЭлементПорядка.ВидУпорядочивания = ВидУпорядочиванияКомпоновкиДанных.Возр;
    ЭлементПорядка.Использование = Истина;
    
КонецПроцедуры

При таком подходе даже при попытке взаимодействия с таблицей заданный порядок записей останется неизменным.

Способ 3. Отключение стандартной шапки и создание декоративной

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

  1. В палитре свойств таблицы формы, отображающей динамический список, снимем флаг Шапка (или установим значение Ложь). Стандартные кликабельные заголовки таблицы скроются.
  2. Над таблицей добавим элемент Обычная группа с горизонтальной группировкой без отображения заголовка.
  3. Внутри группы разместим элементы вида Декорация — надпись с текстами названий колонок, выровняв их по ширине с соответствующими колонками таблицы.

Декоративные надписи визуально выглядят как полноценные заголовки таблицы, но не содержат функционала сортировки и не реагируют на клики мыши.

Способ 4. Отключение стандартной команды «Настроить список»

Для комплексного ограничения возможностей изменения сортировки отключим доступ к стандартному окну настройки списка через командную панель:

  1. Выберем таблицу формы и откроем свойство Состав команд.
  2. Найдем стандартную команду Настроить список... и снимем с нее флаг видимости.

Это предотвратит попытки пользователей изменить порядок колонок и строк через подменю «Еще» («Все действия»).

Способ 5. Использование таблицы значений для строго фиксированных выборок

Проанализируем альтернативный вариант: если объем выводимых данных невелик и формируется сложным запросом с критически важной последовательностью записей, имеет смысл отказаться от ДинамическийСписок в пользу реквизита формы с типом ТаблицаЗначений. В этом случае данные заполняются на сервере один раз, а разработчик получает абсолютный контроль над поведением колонок и строк таблицы формы.

← На главную