Как проверить доступность ролей и настроить полноэкранный режим в процедуре ПередНачаломРаботыСистемы?

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

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

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

Решение 1: Вызов серверной функции для проверки роли

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

Проанализируем алгоритм действий:

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

Посмотрим на пример кода серверной функции:


Функция ПроверитьДоступностьРоли(ИмяРоли) Экспорт
    Возврат РольДоступна(ИмяРоли); 
КонецФункции

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


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    // Проверяем наличие роли "ОператорСклада" через серверный модуль
    Если РаботаСИнтерфейсомСервер.ПроверитьДоступностьРоли("ОператорСклада") Тогда
        // Если роль доступна, устанавливаем полноэкранный режим
        ГлавноеОкно.РежимВывода = ВариантРежимаВывода.Полноэкранный;
    КонецЕсли;

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

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

Решение 2: Использование параметров сеанса

Рассмотрим более продвинутый и производительный способ. В системе 1С существует строгая последовательность событий. Перед тем как управление попадет в процедуру ПередНачаломРаботыСистемы на клиенте, на сервере всегда отрабатывает событие УстановкаПараметровСеанса. Мы можем использовать это, чтобы заранее подготовить информацию о правах пользователя.

Разберем этот метод:

  1. В конфигураторе создадим параметр сеанса ЭтоОператорСклада (тип Булево).
  2. В модуле сеанса, в процедуре УстановкаПараметровСеанса, пропишем логику инициализации этого параметра.

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    ПараметрыСеанса.ЭтоОператорСклада = РольДоступна("ОператорСклада");
КонецПроцедуры

Теперь в клиентской процедуре ПередНачаломРаботыСистемы нам не нужно делать лишний вызов сервера через общий модуль. Мы можем напрямую обратиться к параметру сеанса. Это работает быстрее, так как параметры сеанса к этому моменту уже кэшированы на клиенте.


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    Если ПараметрыСеанса.ЭтоОператорСклада Тогда
        ГлавноеОкно.РежимВывода = ВариантРежимаВывода.Полноэкранный;
    КонецЕсли;

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

Альтернативный вариант: Параметры запуска

Иногда задача стоит шире: нужно запускать полноэкранный режим не просто для роли, а для конкретного рабочего места (терминала). В этом случае проанализируем использование параметров запуска. При запуске 1С через ярлык или командную строку можно передать параметр /C "FullScreen".

Проверить этот параметр в коде можно с помощью глобального свойства ПараметрыЗапуска:


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    Если Найти(ПараметрыЗапуска, "FullScreen") > 0 Тогда
        ГлавноеОкно.РежимВывода = ВариантРежимаВывода.Полноэкранный;
    КонецЕсли;

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

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

Важные ограничения и нюансы

Проанализируем несколько критических моментов, которые могут повлиять на работу вашего кода:

  1. Веб-клиент: Программный переход в полноэкранный режим в браузере часто блокируется политиками безопасности. Браузеры требуют интерактивного действия (клика), чтобы разрешить сайту занять весь экран. Поэтому в веб-клиенте данный код может не сработать.
  2. Модальность: В процедуре ПередНачаломРаботыСистемы запрещено использование модальных окон (например, Предупреждение или Вопрос), если в настройках конфигурации стоит режим "Не использовать модальность". Используйте только немодальные методы оповещения.
  3. Библиотека стандартных подсистем (БСП): Если вы работаете в типовой конфигурации (УТ 11, ERP, КА 2), лучше использовать встроенные механизмы проверки прав, такие как Пользователи.РольДоступна(), но помните, что сама БСП инициализируется чуть позже, поэтому прямая проверка роли через серверный модуль, как было показано в Решении 1, остается самым надежным низкоуровневым способом.

Таким образом, мы выяснили, что для решения задачи достаточно вынести проверку роли на сторону сервера или воспользоваться параметрами сеанса. Это гарантирует, что к моменту настройки ГлавноеОкно у вас будут все необходимые данные о правах пользователя.

← На главную