При проектировании интерфейсов на платформе 1С:Предприятие 8 часто возникает необходимость адаптировать рабочее пространство под конкретные бизнес-роли. Например, для администраторов и бухгалтеров необходим полноценный доступ ко всем функциям системы, панелям разделов и навигации. В то же время для кассиров, продавцов или операторов терминалов самообслуживания лишние элементы управления могут стать источником ошибок. Специально для решения таких задач разработчики платформы добавили свойство Режим основного окна клиентского приложения.
Многие разработчики сталкиваются с трудностью: в Конфигураторе данное свойство задается для всей конфигурации в целом. Как же быть, если база данных одна, а роли пользователей требуют кардинально разных интерфейсов? В этой статье мы подробно разберем, как динамически управлять отображением главного окна при старте системы, исправим частые синтаксические ошибки и рассмотрим все доступные режимы работы.
Проанализируем ситуацию, описанную в теме форума. Разработчик попытался изменить режим работы окна в коде, но столкнулся с ошибкой компиляции: Процедура или функция с указанным именем не определена (УстановитьРежимОсновногоОкна). Выясним, почему это произошло.
Здесь допущены сразу две критические ошибки:
ПриНачалеРаботыСистемы(). На этом этапе платформа уже спроектировала и отобразила основное окно приложения, поэтому изменить его режим «на лету» технически невозможно.УстановитьРежимОсновногоОкна() не является глобальным методом платформы. Он входит в состав свойств глобального контекста КлиентскоеПриложение.Чтобы исправить эти ошибки, нам необходимо перенести логику в событие ПередНачаломРаботыСистемы() и обратиться к правильному объекту метаданных.
Для гибкого управления отображением платформой предусмотрено три уровня настройки. Проанализируем их приоритетность от низшего к высшему:
/MainWindowMode <Режим> (например, Kiosk или Workplace). Этот параметр переопределяет настройку из Конфигуратора.КлиентскоеПриложение.УстановитьРежимОсновногоОкна() обладает наивысшим приоритетом. Он переопределяет как настройки конфигурации, так и ключи командной строки запуска.Рассмотрим подробнее каждый из пяти доступных режимов основного окна клиентского приложения, чтобы понимать, какой из них лучше применить в вашей задаче:
<iframe>. Полностью убирает рамки управления. При запуске в тонком или толстом клиенте этот режим игнорируется, и окно открывается как обычное.Разберем по шагам, как правильно реализовать смену режима для кассиров и обычных пользователей при старте системы.
Шаг 1. Создание серверной функции для проверки роли на клиенте.
Поскольку событие ПередНачаломРаботыСистемы() выполняется на клиенте, мы не можем напрямую обратиться к ролям пользователей. Нам потребуется вспомогательный серверный вызов. Создадим общий модуль (например, ОбщегоНазначенияКлиентСервер) с флагами «Сервер» и «Вызов сервера»:
Функция ТекущийПользовательВРоли(ИмяРоли) Экспорт
Возврат РолиДоступны(ИмяРоли);
КонецФункции
Шаг 2. Реализация логики в модуле управляемого приложения.
Откроем модуль управляемого приложения и найдем (или создадим) предопределенную процедуру ПередНачаломРаботыСистемы. Напишем код с обращением к контексту клиентского приложения:
Процедура ПередНачаломРаботыСистемы(Отказ)
// Проверяем, является ли пользователь продавцом/кассиром
Если ОбщегоНазначенияКлиентСервер.ТекущийПользовательВРоли("ПродавецКассир") Тогда
// Устанавливаем полноэкранный режим без лишних панелей
РежимОкна = РежимОсновногоОкнаКлиентскогоПриложения.ПолноэкранноеРабочееМесто;
КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОкна);
КонецЕсли;
КонецПроцедуры
При использовании программной настройки важно учитывать права безопасности. Начиная с версии платформы 8.3.16, в метаданные ролей добавлены специальные системные права, регулирующие запуск приложения в различных режимах:
РежимОсновногоОкнаОбычныйРежимОсновногоОкнаРабочееМестоРежимОсновногоОкнаПолноэкранноеРабочееМестоРежимОсновногоОкнаКиоскЕсли у пользователя в его ролях отсутствует право на запуск конкретного режима (например, права на «Киоск»), то вызов метода УстановитьРежимОсновногоОкна() завершится без ошибок, но система принудительно откроет приложение в максимально доступном для этого пользователя режиме.
При внедрении данного функционала необходимо учитывать следующие особенности платформы:
УстановитьРежимОсновногоОкна() доступен только в базах, где режим совместимости установлен не ниже 8.3.10. Если ваша конфигурация использует старый режим совместимости, вызов функции приведет к ошибке выполнения.Таким образом, сочетая возможности предопределенного события ПередНачаломРаботыСистемы(), серверных проверок ролей и правильного обращения к объекту КлиентскоеПриложение, мы можем гибко управлять поведением интерфейса 1С для любых групп пользователей.