При разработке управляемых форм часто возникает задача отобразить данные динамического списка в строго определенном порядке, сформированном запросом. Однако пользователи могут случайно кликнуть по заголовку колонки (шапке таблицы), что приводит к сбросу необходимого порядка и вызывает путаницу. Рассмотрим особенности поведения платформы 1С:Предприятие 8.3 и разберем практические способы решения этой проблемы.
Проанализируем сначала, почему стандартными свойствами элементов формы нельзя просто заблокировать клик по заголовку:
УПОРЯДОЧИТЬ ПО в тексте произвольного запроса динамического списка может переопределяться платформой при динамическом считывании данных, если порядок не зафиксирован в настройках компоновщика.Разберем самый простой и быстрый способ, упомянутый в решении. Чтобы запретить пользователям менять порядок строк как через шапку, так и через форму настройки, отключим возможность пользовательской настройки порядка:
ДинамическийСписок.После этого возможность интерактивного изменения порядка через заголовок и стандартное окно настроек списка будет отключена.
Рассмотрим более надежный программный метод. У динамического списка есть коллекция ФиксированныеНастройки. Настройки, установленные в этой коллекции, имеют наивысший приоритет, всегда применяются при выборке данных и принципиально недоступны для изменения пользователем через пользовательский интерфейс.
Установим жесткий порядок программно при создании формы на сервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Очистим текущий фиксированный порядок
Список.КомпоновщикНастроек.ФиксированныеНастройки.Порядок.Элементы.Очистить();
// Добавим поле для сортировки
ЭлементПорядка = Список.КомпоновщикНастроек.ФиксированныеНастройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Дата");
ЭлементПорядка.ВидУпорядочивания = ВидУпорядочиванияКомпоновкиДанных.Возр;
ЭлементПорядка.Использование = Истина;
КонецПроцедуры
При таком подходе даже при попытке взаимодействия с таблицей заданный порядок записей останется неизменным.
Если требуется полностью исключить саму визуальную реакцию таблицы на клик в области заголовков, применим прием с подменой шапки:
Ложь). Стандартные кликабельные заголовки таблицы скроются.Декоративные надписи визуально выглядят как полноценные заголовки таблицы, но не содержат функционала сортировки и не реагируют на клики мыши.
Для комплексного ограничения возможностей изменения сортировки отключим доступ к стандартному окну настройки списка через командную панель:
Это предотвратит попытки пользователей изменить порядок колонок и строк через подменю «Еще» («Все действия»).
Проанализируем альтернативный вариант: если объем выводимых данных невелик и формируется сложным запросом с критически важной последовательностью записей, имеет смысл отказаться от ДинамическийСписок в пользу реквизита формы с типом ТаблицаЗначений. В этом случае данные заполняются на сервере один раз, а разработчик получает абсолютный контроль над поведением колонок и строк таблицы формы.