При разработке мобильных решений на платформе 1С:Предприятие часто возникает задача адаптации интерфейса. На экране смартфона панель разделов, привычная для стационарного компьютера, занимает слишком много места и перегружает пользователя лишними функциями. Однако стандартные механизмы настройки прав (ролей) не всегда подходят, так как один и тот же пользователь может работать как с полноценного ПК в Тонком клиенте, так и со смартфона через Мобильный клиент. В этой ситуации нам требуется способ программно изменять состав панели разделов «на лету» в зависимости от того, с какого устройства зашел человек.
Рассмотрим подробнее основные способы решения этой задачи, проанализируем их плюсы и минусы, а также разберем по шагам реализацию наиболее надежного метода.
Этот способ является наиболее правильным и «штатным» с точки зрения архитектуры 1С. Основная идея заключается в том, чтобы привязать видимость подсистем (разделов) к Функциональной опции, значение которой определяется Параметром сеанса. Поскольку параметры сеанса инициализируются при запуске приложения, мы можем программно проверить тип клиента и установить нужное значение.
Разберем реализацию этого метода по шагам:
ИспользоватьПолныйИнтерфейс с типом Булево.ОтображатьРазделыПанели. В качестве источника данных укажем созданный нами параметр сеанса ИспользоватьПолныйИнтерфейс.Ложь, эти разделы исчезнут из интерфейса.УстановкаПараметровСеанса.Посмотрим на пример кода, который необходимо разместить в Модуле сеанса:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
Если ТребуемыеПараметры = Неопределено Или ТребуемыеПараметры.Найти("ИспользоватьПолныйИнтерфейс") <> Неопределено Тогда
// Определяем тип клиента
#Если МобильныйКлиент Тогда
ПараметрыСеанса.ИспользоватьПолныйИнтерфейс = Ложь;
#Иначе
ПараметрыСеанса.ИспользоватьПолныйИнтерфейс = Истина;
#КонецЕсли
КонецЕсли;
КонецПроцедуры
Этот подход позволяет гибко управлять видимостью разделов. Важно понимать, что функциональные опции влияют не только на визуальное отображение, но и на доступность команд в других частях системы. Если вам нужно скрыть разделы максимально «чисто», этот метод — лучший выбор.
Иногда требуется принудительно обновить интерфейс, если логика переключения видимости срабатывает уже после начала работы системы (например, при смене настроек пользователем в самой обработке). В этом случае нам помогут методы ОбновитьИнтерфейс() и ОбновитьПовторноИспользуемыеЗначения().
Выясним причину, почему одного ОбновитьИнтерфейс() может быть недостаточно. Платформа 1С кэширует значения функциональных опций для повышения производительности. Если вы изменили параметр сеанса, влияющий на ФО, программно в процессе работы, система может продолжать использовать старое (кэшированное) значение видимости разделов. Поэтому рекомендуется использовать следующую связку команд:
// Сначала сбрасываем кэш
ОбновитьПовторноИспользуемыеЗначения();
// Затем принудительно обновляем командный интерфейс
ОбновитьИнтерфейс();
Эти команды доступны на клиенте и позволяют системе мгновенно «перерисовать» панель разделов в соответствии с новыми условиями.
Для более тонкой настройки, когда нужно не просто скрыть подсистему целиком, а изменить порядок разделов или их видимость индивидуально для пользователя программным путем, можно обратиться к Хранилищу системных настроек. Настройки командного интерфейса хранятся по пути Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса.
Хотя платформа не предоставляет простого объектного API для редактирования этих настроек «в коде», мы можем использовать следующий прием: 1. Настроить интерфейс один раз вручную в режиме «1С:Предприятие» так, как он должен выглядеть для мобильного клиента. 2. Программно прочитать эту настройку из хранилища и сохранить ее (например, в макет или в справочник). 3. При входе пользователя с мобильного устройства программно записывать эту «эталонную» настройку обратно в хранилище для текущего пользователя.
Пример получения настроек для анализа (выполняется на сервере):
Настройки = ХранилищеСистемныхНастроек.Загрузить("Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса", , , ИмяПользователя);
Важный нюанс: данный метод является более трудоемким и требует осторожности при обновлении конфигурации, так как структура подсистем может измениться, и старые настройки из хранилища могут привести к непредсказуемому поведению интерфейса.
Если ваша основная цель — упростить интерфейс именно для мобильного клиента версии 8.3.15 и выше, проанализируем возможности самой платформы. В свойствах конфигурации или конкретных подсистем есть параметры, специфичные для мобильной платформы.
В частности, обратите внимание на свойство «Использовать основные разделы в мобильном клиенте». Если его отключить, мобильный клиент не будет пытаться отобразить все подсистемы в нижней панели или в главном меню так, как он делает это по умолчанию. Это позволяет оставить пользователю только «Рабочий стол» (Основной раздел) с необходимыми формами, что критически важно для экранов с малым разрешением.
Для реализации качественного программного управления панелью разделов мы рекомендуем комбинированный подход:
ТипКлиентскогоПриложения(), чтобы разделение интерфейса происходило автоматически при входе.ОбновитьИнтерфейс(), если состав разделов должен измениться динамически без перезапуска сеанса.Таким образом, комбинируя программную установку параметров сеанса и возможности платформы по работе с мобильным клиентом, мы создаем удобное и адаптивное рабочее пространство для пользователей на любых устройствах.