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

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

При разработке и адаптации логики конфигураций под различные типы клиентских приложений часто возникает необходимость определить, какой интерфейс активен у конкретного пользователя. В вопросе часто смешиваются два разных понятия платформы 1С:Предприятие: вариант визуального стиля (интерфейс «Такси» или интерфейс «Версия 8.2») и способ отображения окон (режим «В закладках» или «В отдельных окнах»).

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

Способ 1. Определение варианта интерфейса на клиенте через методы платформы

Если проверка выполняется в клиентском контексте текущего запущенного сеанса, платформа предоставляет прямой метод для получения установленного интерфейса. Рассмотрим его использование:


Вариант = КлиентскоеПриложение.ТекущийВариантИнтерфейса();

Если Вариант = ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
    // Пользователь работает в интерфейсе "Такси"
    Сообщить("Используется интерфейс Такси");
ИначеЕсли Вариант = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
    // Пользователь работает в интерфейсе "Версия 8.2"
    Сообщить("Используется интерфейс 8.2 (Закладки / Отдельные окна)");
КонецЕсли;

Метод КлиентскоеПриложение.ТекущийВариантИнтерфейса() возвращает системное перечисление ВариантИнтерфейсаКлиентскогоПриложения и работает быстро без необходимости чтения таблиц базы данных.

Способ 2. Определение интерфейса для произвольного пользователя на сервере

Когда требуется узнать интерфейс конкретного пользователя на стороне сервера (например, в фоновом задании, административном отчете или модуле сеанса), прямого обращения к КлиентскоеПриложение нет. В таком случае мы должны проанализировать настройки пользователя и режим совместимости конфигурации.

Разберем по шагам логику работы с объектом ХранилищеСистемныхНастроек:

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

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


Функция ВариантИнтерфейсаКлиентскогоПриложенияВерсии8_2(ИмяПользователя) Экспорт 

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

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

Способ 3. Определение режима открытия окон («В закладках» / «В отдельных окнах»)

Режим открытия окон управляется свойством РежимОткрытияФормПриложения объекта НастройкиКлиентскогоПриложения. Проанализируем, как получить и интерпретировать это значение:


Настройки = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", "",, ИмяПользователя);

Если Настройки <> Неопределено Тогда
    РежимОкон = Настройки.РежимОткрытияФормПриложения;
    
    Если РежимОкон = РежимОткрытияФормПриложения.Закладки Тогда
        // Включен режим открытия в закладках
    ИначеЕсли РежимОкон = РежимОткрытияФормПриложения.ОтдельныеОкна Тогда
        // Включен режим отдельных окон
    ИначеЕсли РежимОкон = РежимОткрытияФормПриложения.Авто Тогда
        // Режим по умолчанию
    КонецЕсли;
КонецЕсли;

Если значение установлено в РежимОткрытияФормПриложения.Авто, поведение интерфейса зависит от базового варианта: для «Версии 8.2» по умолчанию используется отображение в отдельных окнах, а в интерфейсе «Такси» управление открытыми формами осуществляется через элемент ПанельОткрытых.

Ограничения и параметры командной строки

Необходимо учитывать следующие особенности платформы при работе с интерфейсами:

  1. Режим совместимости конфигурации: если в свойствах конфигурации жестко задан режим Такси или Версия 8.2 (без флага «Разрешить...»), сеанс принудительно запустится в указанном интерфейсе, а персональные настройки пользователя будут проигнорированы.
  2. Ключи запуска: вариант интерфейса можно переопределить через параметры запуска ярлыка — ключи /iTaxi или /i82 принудительно задают интерфейс для конкретного сеанса.
  3. Применение настроек: программная запись новых параметров в ХранилищеСистемныхНастроек не меняет отображение в уже открытом сеансе мгновенно — пользователю потребуется перезапустить клиентское приложение.
← На главную