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