Как программно настроить режим основного окна для разных пользователей в 1С:Предприятие?

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

Введение: зачем нужен режим основного окна

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

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

Разбор ошибок: почему код автора не работал

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

Здесь допущены сразу две критические ошибки:

  1. Неверное событие модуля управляемого приложения. Попытка вызова происходила в обработчике ПриНачалеРаботыСистемы(). На этом этапе платформа уже спроектировала и отобразила основное окно приложения, поэтому изменить его режим «на лету» технически невозможно.
  2. Отсутствие контекста вызова. Метод УстановитьРежимОсновногоОкна() не является глобальным методом платформы. Он входит в состав свойств глобального контекста КлиентскоеПриложение.

Чтобы исправить эти ошибки, нам необходимо перенести логику в событие ПередНачаломРаботыСистемы() и обратиться к правильному объекту метаданных.

Иерархия приоритетов настройки режима окна

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

  1. Свойство конфигурации в Конфигураторе. Задается в палитре свойств корневого элемента конфигурации. Имеет самый низкий приоритет и служит значением по умолчанию для всех пользователей.
  2. Параметр командной строки. При запуске системы через ярлык или командную строку можно передать ключ /MainWindowMode <Режим> (например, Kiosk или Workplace). Этот параметр переопределяет настройку из Конфигуратора.
  3. Программный метод встроенного языка. Вызов КлиентскоеПриложение.УстановитьРежимОсновногоОкна() обладает наивысшим приоритетом. Он переопределяет как настройки конфигурации, так и ключи командной строки запуска.

Подробный обзор всех режимов основного окна

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

Пошаговая инструкция по реализации динамической смены режима

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

Шаг 1. Создание серверной функции для проверки роли на клиенте.

Поскольку событие ПередНачаломРаботыСистемы() выполняется на клиенте, мы не можем напрямую обратиться к ролям пользователей. Нам потребуется вспомогательный серверный вызов. Создадим общий модуль (например, ОбщегоНазначенияКлиентСервер) с флагами «Сервер» и «Вызов сервера»:


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

Шаг 2. Реализация логики в модуле управляемого приложения.

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


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

Дополнительные права доступа и безопасность (для версий 8.3.16 и выше)

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

Если у пользователя в его ролях отсутствует право на запуск конкретного режима (например, права на «Киоск»), то вызов метода УстановитьРежимОсновногоОкна() завершится без ошибок, но система принудительно откроет приложение в максимально доступном для этого пользователя режиме.

Подводные камни и специфика работы

При внедрении данного функционала необходимо учитывать следующие особенности платформы:

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

← На главную