Как запретить пользователю самостоятельно изменять состав и настройки формы в 1С

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

В современных конфигурациях 1С на платформе 8.3 (Управляемые формы) пользователю предоставлена широкая свобода действий по настройке интерфейса «под себя». Через меню «Ещё — Изменить форму» любой сотрудник может скрыть важные поля, добавить новые, изменить порядок кнопок или сгруппировать элементы. Однако в некоторых случаях такая свобода вредит: пользователи могут случайно скрыть критически важные кнопки или поля, что приводит к ошибкам в работе и лишним обращениям в службу поддержки. Разберем подробно, какими инструментами располагает разработчик для решения этой задачи.

Метод 1. Свойство формы «Изменение состава форм»

Это самый простой и эффективный способ, предусмотренный платформой на уровне метаданных. Рассмотрим, как он работает. У каждой управляемой формы в конфигураторе существует свойство ИзменениеСоставаФорм (в англоязычной версии ChangeFormComposition). Оно определяет, будет ли доступен пользователю диалог настройки формы.

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

Если нам нужно установить этот запрет не для всех сразу, а программно, мы можем сделать это в обработчике ПриСозданииНаСервере. Посмотрим на пример кода:


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

КонецПроцедуры

Этот метод хорош тем, что он «железобетонно» убирает саму техническую возможность вызова окна настроек.

Метод 2. Управление «Пользовательской видимостью» в Конфигураторе

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

В редакторе формы выберем нужный элемент и перейдем к свойству ПользовательскаяВидимость. Нажав на ссылку «Открыть», мы увидим список ролей. Здесь можно снять флажки видимости для определенных ролей. Важный нюанс: если видимость элемента отключена для роли пользователя именно здесь, он не сможет вернуть её обратно через «Изменить форму», так как платформа посчитает, что у него нет прав на просмотр данного элемента.

Метод 3. Программный запрет через расширения

Если мы работаем с типовой конфигурацией и не хотим снимать её с поддержки, воспользуемся механизмом расширений. Мы можем перехватить создание формы и принудительно скрыть элементы или запретить их изменение. Рассмотрим пример, в котором мы делаем кнопку недоступной для определенной группы доступа:


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

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

Метод 4. Ограничение права на сохранение настроек

Выясним причину, по которой пользователи «портят» формы. Часто это происходит из-за случайных нажатий, которые сохраняются автоматически. Мы можем запретить пользователю сохранять эти изменения.

В объекте «Роль» существует специальное право СохранениеДанныхНастроек. Если у пользователя (например, нашего условного «Феди») отобрать это право, произойдет следующее: в рамках одного сеанса он сможет что-то подвинуть или скрыть, но при закрытии и повторном открытии формы все настройки вернутся к эталонным, заданным администратором.

Метод 5. Функциональные опции как инструмент контроля

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

Метод 6. Использование режима «Только просмотр»

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

Рекомендации по внедрению

Подводя итог, выберем оптимальную стратегию работы с «опасными» пользователями:

  1. Если нужно запретить любые изменения состава формы — используем ЭтаФорма.ИзменениеСоставаФорм = ИзменениеСоставаФорм.Запретить.
  2. Если нужно скрыть конкретные команды по правам доступа — настраиваем Пользовательскую видимость в свойствах элемента в конфигураторе.
  3. Если требуется динамический контроль (например, в зависимости от состояния документа) — управляем свойством Элементы.ИмяЭлемента.Видимость в коде модуля формы.
  4. Если мы хотим, чтобы пользователь мог «играться» с формой, но не ломал её навсегда — ограничиваем право Сохранение данных настроек в его роли.

Помните, что избыточные запреты могут снижать эффективность работы опытных сотрудников, поэтому старайтесь применять эти методы адресно, используя проверку ролей или настройки в специализированных регистрах сведений (например, «Настройки пользователей»).

← На главную