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