Как запретить изменение видимости колонок в динамическом списке управляемой формы?

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

При переводе конфигураций с обычных форм на управляемые разработчики часто сталкиваются с ситуацией, когда привычные свойства элементов интерфейса отсутствуют. В обычных формах для запрета скрытия или отображения конкретной колонки через стандартные диалоги настройки использовалось свойство КолонкаТаблицы.ИзменятьВидимость = Ложь. Разберем, как устроен этот механизм в управляемых формах 1С:Предприятия 8.3 и какие варианты решения задачи существуют.

Особенности работы с видимостью элементов в управляемом интерфейсе

Проанализируем архитектурные ограничения платформы. В управляемых формах прямого аналога свойства ИзменятьВидимость для отдельного элемента формы или колонки таблицы не предусмотрено. Свойство ПользовательскаяВидимость, доступное в конфигураторе, задает только первоначальную видимость для различных ролей, но не запрещает пользователю переключить видимость флажком через меню «Еще» — «Изменить форму...».

Тем не менее, в зависимости от бизнес-требований (необходимо ли полностью заблокировать доступ к колонке или, наоборот, гарантировать ее обязательное постоянное присутствие на экране), мы можем применить несколько надежных подходов.

Вариант 1. Полный запрет настройки формы для пользователей

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

Рассмотрим, как это реализовать:

  1. В палитре свойств самой формы в конфигураторе снимем флаг «Разрешить изменять форму».
  2. Если ограничение требуется установить выборочно (например, только для определенных ролей или условий), выполним программную настройку в модуле формы в обработчике ПриСозданииНаСервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Запрещаем пользователю вызывать диалог настройки формы
    ЭтаФорма.РазрешитьИзменениеФормы = Ложь;
КонецПроцедуры

В результате команда «Изменить форму...» пропадет из системного подменю «Еще», и пользователь не сможет скрыть или отобразить ни одну колонку списка.

Вариант 2. Запрет отображения колонки (если пользователю нельзя ее видеть)

Если нам необходимо гарантировать, что пользователь ни при каких обстоятельствах не включит скрытую колонку через пользовательские настройки, простого изменения свойства Видимость = Ложь недостаточно, так как элемент останется доступен в дереве формы. Разберем безопасные способы исключения элемента:

  1. Удаление элемента на сервере: При создании формы полностью удалим элемент из коллекции элементов интерфейса. Если элемента нет в составе формы на стороне сервера, он не передается на клиент и физически отсутствует в окне «Изменить форму».

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Проверяем условия (например, проверку прав или роли)
    Если Не РольДоступна("ПолныеПрава") Тогда
        ЭлементДляУдаления = Элементы.Найти("ИмяКолонкиТаблицы");
        Если ЭлементДляУдаления <> Неопределено Тогда
            Элементы.Удалить(ЭлементДляУдаления);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
  1. Использование функциональных опций: Привяжем реквизит или элемент формы к функциональной опции. Если опция выключена, элемент исключается из состава формы платформой автоматически.
  2. Ограничение на уровне прав доступа: Если данные колонки являются конфиденциальными, настроим ограничение прав чтения реквизита на уровне ролей. Недоступные по правам поля не попадают в список доступных настроек.

Вариант 3. Гарантированное отображение обязательной колонки

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

Рассмотрим программный сброс или принудительное переопределение настроек отображения:


&НаСервере
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки)
    // Принудительно возвращаем видимость обязательной колонке
    Элементы.ОбязательнаяКолонка.Видимость = Истина;
КонецПроцедуры

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

← На главную