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