При разработке и адаптации логики конфигураций под различные типы клиентских приложений часто возникает необходимость определить, какой интерфейс активен у конкретного пользователя. В вопросе часто смешиваются два разных понятия платформы 1С:Предприятие: вариант визуального стиля (интерфейс «Такси» или интерфейс «Версия 8.2») и способ отображения окон (режим «В закладках» или «В отдельных окнах»).
Разберем подробно все способы программного определения интерфейса и оконного режима: от прямого вызова платформенных методов до чтения сохраненных пользовательских настроек на стороне сервера.
Если проверка выполняется в клиентском контексте текущего запущенного сеанса, платформа предоставляет прямой метод для получения установленного интерфейса. Рассмотрим его использование:
Вариант = КлиентскоеПриложение.ТекущийВариантИнтерфейса();
Если Вариант = ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
// Пользователь работает в интерфейсе "Такси"
Сообщить("Используется интерфейс Такси");
ИначеЕсли Вариант = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
// Пользователь работает в интерфейсе "Версия 8.2"
Сообщить("Используется интерфейс 8.2 (Закладки / Отдельные окна)");
КонецЕсли;
Метод КлиентскоеПриложение.ТекущийВариантИнтерфейса() возвращает системное перечисление ВариантИнтерфейсаКлиентскогоПриложения и работает быстро без необходимости чтения таблиц базы данных.
Когда требуется узнать интерфейс конкретного пользователя на стороне сервера (например, в фоновом задании, административном отчете или модуле сеанса), прямого обращения к КлиентскоеПриложение нет. В таком случае мы должны проанализировать настройки пользователя и режим совместимости конфигурации.
Разберем по шагам логику работы с объектом ХранилищеСистемныхНастроек:
"Общее/НастройкиКлиентскогоПриложения" для нужного пользователя, передавая строковое имя учетной записи (логин).Неопределено), определяем поведение по свойству конфигурации Метаданные.РежимСовместимостиИнтерфейса.ВариантИнтерфейсаКлиентскогоПриложения.Посмотрим на пример реализации серверной функции:
Функция ВариантИнтерфейсаКлиентскогоПриложенияВерсии8_2(ИмяПользователя) Экспорт
Перем ИнтерфейсВерсии82;
// Загружаем настройки для указанного логина пользователя
Настройки = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", "",, ИмяПользователя);
Если Настройки = Неопределено Тогда
// Если пользователь не переопределял интерфейс, проверяем режим совместимости конфигурации
ИнтерфейсВерсии82 = Не (Метаданные.РежимСовместимостиИнтерфейса = Метаданные.СвойстваОбъектов.РежимСовместимостиИнтерфейса.Такси
Или Метаданные.РежимСовместимостиИнтерфейса = Метаданные.СвойстваОбъектов.РежимСовместимостиИнтерфейса.ТаксиРазрешитьВерсия8_2);
Иначе
// Проверяем сохраненное значение настройки
ИнтерфейсВерсии82 = (Настройки.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2);
КонецЕсли;
Возврат ИнтерфейсВерсии82;
КонецФункции
Важный нюанс: в параметр ИмяПользователя необходимо передавать точную строку с именем входа (логином) пользователя из справочника или списка пользователей информационной базы.
Режим открытия окон управляется свойством РежимОткрытияФормПриложения объекта НастройкиКлиентскогоПриложения. Проанализируем, как получить и интерпретировать это значение:
Настройки = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", "",, ИмяПользователя);
Если Настройки <> Неопределено Тогда
РежимОкон = Настройки.РежимОткрытияФормПриложения;
Если РежимОкон = РежимОткрытияФормПриложения.Закладки Тогда
// Включен режим открытия в закладках
ИначеЕсли РежимОкон = РежимОткрытияФормПриложения.ОтдельныеОкна Тогда
// Включен режим отдельных окон
ИначеЕсли РежимОкон = РежимОткрытияФормПриложения.Авто Тогда
// Режим по умолчанию
КонецЕсли;
КонецЕсли;
Если значение установлено в РежимОткрытияФормПриложения.Авто, поведение интерфейса зависит от базового варианта: для «Версии 8.2» по умолчанию используется отображение в отдельных окнах, а в интерфейсе «Такси» управление открытыми формами осуществляется через элемент ПанельОткрытых.
Необходимо учитывать следующие особенности платформы при работе с интерфейсами:
Такси или Версия 8.2 (без флага «Разрешить...»), сеанс принудительно запустится в указанном интерфейсе, а персональные настройки пользователя будут проигнорированы./iTaxi или /i82 принудительно задают интерфейс для конкретного сеанса.ХранилищеСистемныхНастроек не меняет отображение в уже открытом сеансе мгновенно — пользователю потребуется перезапустить клиентское приложение.