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

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

В процессе разработки и администрирования систем на платформе 1С:Предприятие 8.3 часто возникает задача максимально упростить интерфейс для определенных категорий пользователей. Например, когда сотруднику для работы необходим всего один документ (например, Доверенность), а все остальные разделы программы (продажи, закупки, склад, администрирование) только отвлекают его или создают угрозу безопасности данных. Особенно остро эта проблема стоит в облачных решениях, таких как 1С:Fresh, где мы жестко ограничены в возможностях изменения основной конфигурации и вынуждены использовать исключительно расширения.

В этой статье мы подробно разберем, как решить данную задачу комплексным путем: через создание специализированной роли в расширении, программное управление элементами интерфейса и отключение стандартного рабочего стола (начальной страницы).

Понимание ролевой модели 1С: почему нельзя просто «запретить»?

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

Отсюда следует вывод: чтобы убрать лишние разделы и документы, мы должны полностью исключить у пользователя типовые роли, дающие доступ к этим объектам, и заменить их своей собственной минималистичной ролью, созданной в расширении. Для определения ролей и профилей, дающих доступ к конкретным объектам, можно использовать обработку для проверки прав доступа к объектам метаданных.

Шаг 1. Борьба с ошибками доступа и реквизитами связанных типов

При попытке создать «чистую» роль с нуля разработчики часто совершают типичную ошибку: они дают права только на сам документ (например, Документ.Доверенность) на чтение, просмотр и создание, но забывают про связанные объекты метаданных.

В результате при попытке открыть форму документа пользователь сталкивается с системными ошибками:

Давайте проанализируем, почему это происходит. Документ не существует в вакууме. На его форме расположены реквизиты ссылочного типа: Организация (ссылка на справочник организаций), Контрагент, ДоговорКонтрагента, ФизическоеЛицо и другие. Когда платформа пытается построить форму или динамический список документа, она обязана получить строковое представление этих ссылок для отображения на экране.

Если у роли пользователя нет прав на Чтение и Просмотр этих связанных справочников, платформа блокирует доступ ко всей форме или «вырезает» эти поля из структуры объекта. Код формы, который пытается обратиться к свойству Объект.ДоговорКонтрагента (например, при инициализации в процедуре ПриСозданииНаСервере), падает с ошибкой, так как для платформы этого поля в данном сеансе физически не существует.

Правильное решение настройки прав в расширении:

  1. Добавим документ Доверенность в расширение и создадим там свою уникальную роль.
  2. Включим в эту роль права на Чтение (Read) и Просмотр (View) для всех справочников, которые используются в качестве типов реквизитов нашего документа (Организации, Контрагенты, Договоры контрагентов, Банковские счета, Физические лица). Права на изменение или добавление этих справочников давать не нужно, чтобы пользователь «не наворотил лишнего».
  3. Обязательно назначим пользователю базовую роль БСП, обеспечивающую технический запуск системы (например, Запуск тонкого клиента или Базовые права). Без этого сеанс просто не сможет инициализировать стандартные параметры, константы и системные регистры сведений.

Шаг 2. Программное скрытие панелей интерфейса

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

Для этого в модуле управляемого приложения расширения (или через обработчик подписки на событие начала работы системы) мы можем использовать объект платформы НастройкиИнтерфейсаКлиентскогоПриложения. Рассмотрим пример кода, который решает эту задачу:


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

Этот код полностью убирает громоздкое главное меню программы, оставляя пользователю только рабочую область. Но здесь нас подстерегает следующая проблема — стандартная начальная страница (рабочий стол).

Шаг 3. Как очистить и скрыть стандартный «Рабочий стол»

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

Мы можем программно очистить состав форм на начальной странице. Для этого воспользуемся возможностями объекта НастройкиНачальнойСтраницы. Разберем следующий код:


Процедура ОчиститьНачальнуюСтраницу() Экспорт
    
    НастройкиСтраницы = Новый НастройкиНачальнойСтраницы;
    
    // Очищаем обе колонки рабочего стола от стандартных форм конфигурации
    НастройкиСтраницы.ЛеваяКолонка.Очистить();
    НастройкиСтраницы.ПраваяКолонка.Очистить();
    
    // Записываем пустые настройки в системное хранилище
    ХранилищеСистемныхНастроек.Сохранить(
        "Общее/НастройкиНачальнойСтраницы", 
        "", 
        НастройкиСтраницы
    );
    
КонецПроцедуры

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


// Использование встроенных механизмов БСП для отключения рабочего стола
СтандартныеПодсистемыКлиент.СкрытьРабочийСтолПриНачалеРаботыСистемы(Истина);

После очистки начальной страницы мы можем принудительно открыть для пользователя форму нашей обработки со списком документов Доверенность во весь экран с помощью метода ОткрытьФорму().

Шаг 4. Альтернативный метод настройки без расширений (Лайфхак для файловых баз)

В ситуациях, когда вы работаете в локальной базе (например, в ЗУП или Бухгалтерии) и не хотите связываться с программированием в расширениях, можно использовать административный лайфхак настройки через интерфейс программы:

  1. Создаем в конфигураторе или режиме предприятия роль/профиль, содержащий только доступ к нужным документам.
  2. Временно добавляем пользователю типовую роль Сохранение данных пользователя.
  3. Заходим под учетной записью этого пользователя в программу. Пользуясь механизмом настройки панелей интерфейса вручную, скрываем все лишние панели и разделы, настраивая экран «под себя». Если подобные действия требуется выполнять массово, можно применить платформу для создания программных роботов, которая воспроизводит настроенную последовательность кликов в интерфейсе.
  4. Выходим из программы, заходим под администратором и забираем у пользователя роль Сохранение данных пользователя.

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

Важное предупреждение: визуальное скрытие vs Безопасность (RLS)

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

Если у пользователя физически остаются права на чтение справочников (даже если они скрыты из всех меню), любой мало-мальски грамотный сотрудник сможет получить к ним доступ следующими способами:

Поэтому, проектируя подобные интерфейсы (особенно в облаке 1С:Fresh), всегда сочетайте визуальное скрытие панелей с реальным ограничением прав на уровне СУБД (используя роли и механизмы RLS — ограничения доступа на уровне записей). Для комплексного анализа взаимосвязей ролей, профилей и ограничений доступа подойдёт инструмент для управления правами и RLS.

← На главную