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