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

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

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

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

Метод 1. Использование функциональных опций и параметров сеанса

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

Разберем реализацию этого метода по шагам:

  1. Создание параметра сеанса. Создадим параметр сеанса, например, ИспользоватьПолныйИнтерфейс с типом Булево.
  2. Создание функциональной опции. Создадим новую Функциональную опцию (ФО), назовем ее ОтображатьРазделыПанели. В качестве источника данных укажем созданный нами параметр сеанса ИспользоватьПолныйИнтерфейс.
  3. Привязка объектов. В составе функциональной опции отметим те подсистемы, которые должны скрываться в мобильном клиенте. Если параметр сеанса примет значение Ложь, эти разделы исчезнут из интерфейса.
  4. Установка значения в Модуле сеанса. Проанализируем ситуацию в обработчике УстановкаПараметровСеанса.

Посмотрим на пример кода, который необходимо разместить в Модуле сеанса:


Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    
    Если ТребуемыеПараметры = Неопределено Или ТребуемыеПараметры.Найти("ИспользоватьПолныйИнтерфейс") <> Неопределено Тогда
        
        // Определяем тип клиента
        #Если МобильныйКлиент Тогда
            ПараметрыСеанса.ИспользоватьПолныйИнтерфейс = Ложь;
        #Иначе
            ПараметрыСеанса.ИспользоватьПолныйИнтерфейс = Истина;
        #КонецЕсли
        
    КонецЕсли;

КонецПроцедуры

Этот подход позволяет гибко управлять видимостью разделов. Важно понимать, что функциональные опции влияют не только на визуальное отображение, но и на доступность команд в других частях системы. Если вам нужно скрыть разделы максимально «чисто», этот метод — лучший выбор.

Метод 2. Программное обновление интерфейса при запуске

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

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


// Сначала сбрасываем кэш
ОбновитьПовторноИспользуемыеЗначения();

// Затем принудительно обновляем командный интерфейс
ОбновитьИнтерфейс();

Эти команды доступны на клиенте и позволяют системе мгновенно «перерисовать» панель разделов в соответствии с новыми условиями.

Метод 3. Работа с Хранилищем системных настроек

Для более тонкой настройки, когда нужно не просто скрыть подсистему целиком, а изменить порядок разделов или их видимость индивидуально для пользователя программным путем, можно обратиться к Хранилищу системных настроек. Настройки командного интерфейса хранятся по пути Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса.

Хотя платформа не предоставляет простого объектного API для редактирования этих настроек «в коде», мы можем использовать следующий прием: 1. Настроить интерфейс один раз вручную в режиме «1С:Предприятие» так, как он должен выглядеть для мобильного клиента. 2. Программно прочитать эту настройку из хранилища и сохранить ее (например, в макет или в справочник). 3. При входе пользователя с мобильного устройства программно записывать эту «эталонную» настройку обратно в хранилище для текущего пользователя.

Пример получения настроек для анализа (выполняется на сервере):


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

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

Метод 4. Оптимизация через свойства конфигурации (для Мобильного клиента)

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

В частности, обратите внимание на свойство «Использовать основные разделы в мобильном клиенте». Если его отключить, мобильный клиент не будет пытаться отобразить все подсистемы в нижней панели или в главном меню так, как он делает это по умолчанию. Это позволяет оставить пользователю только «Рабочий стол» (Основной раздел) с необходимыми формами, что критически важно для экранов с малым разрешением.

Итоги и рекомендации

Для реализации качественного программного управления панелью разделов мы рекомендуем комбинированный подход:

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

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

← На главную