Как настроить разный состав начальной страницы для обычного и мобильного клиента 1С?

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

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

Способ 1. Программное изменение настроек начальной страницы

Этот метод основан на использовании специализированных объектов платформы НастройкаНачальнойСтраницы и СоставФормНачальнойСтраницы. Основная сложность здесь заключается в том, что эти объекты доступны только на стороне сервера, а решение о смене интерфейса часто принимается в момент запуска клиентского приложения. Проанализируем правильную последовательность действий.

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

Сначала создадим серверную процедуру в общем модуле (например, ОбщегоНазначенияСервер), которая будет отвечать за установку настроек:


Процедура УстановитьНастройкуРабочегоСтолаДляМобильногоКлиента() Экспорт
    
    Настройки = Новый НастройкаНачальнойСтраницы;
    НовыйСостав = Новый СоставФормНачальнойСтраницы;
    
    // Добавляем форму, предназначенную специально для мобильного устройства
    // Путь к форме указывается как "ИмяОбъекта.ИмяФормы"
    НовыйСостав.ЛеваяКолонка.Добавить("ОбщаяФорма.РабочийСтолМобильный");
    
    Настройки.УстановитьСоставФорм(НовыйСостав);
    
    // Сохраняем настройки в системное хранилище для текущего пользователя
    ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиНачальнойСтраницы", , Настройки);
    
КонецПроцедуры

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


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

Важный нюанс: Мобильный клиент 1С игнорирует многоколоночную структуру. Даже если вы добавите формы в правую колонку, платформа выстроит их вертикально в одну ленту. Поэтому для мобильного клиента лучше всегда использовать только одну основную форму.

Способ 2. Использование функциональных опций (наиболее стабильный вариант)

Если мы хотим избежать "костылей" с постоянной перезаписью настроек в хранилище (что может замедлять запуск системы), рассмотрим использование функциональных опций. Этот механизм позволяет управлять видимостью элементов интерфейса на уровне метаданных.

Выполним следующие шаги:

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

Этот способ хорош тем, что платформа сама берет на себя задачу скрытия или отображения нужных форм в зависимости от текущего контекста работы пользователя. Нам не нужно вручную манипулировать объектом НастройкаНачальнойСтраницы.

Способ 3. Метод "Формы-диспетчера"

Рассмотрим ситуацию, когда нам нужно максимально гибко управлять содержимым без привязки к ролям или настройкам системы. Мы можем создать одну "пустую" форму, которая будет назначена начальной страницей по умолчанию. Назовем её ФормаДиспетчерРабочегоСтола.

Проанализируем алгоритм работы такой формы. В обработчике ПриСозданииНаСервере мы анализируем условия запуска и динамически меняем состав элементов формы.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    СистемнаяИнфо = Новый СистемнаяИнформация;
    Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.МобильныйКлиент Тогда
        // Скрываем группы элементов для десктопа и показываем мобильные
        Элементы.ГруппаРабочийСтолПК.Видимость = Ложь;
        Элементы.ГруппаРабочийСтолМобильный.Видимость = Истина;
    Иначе
        Элементы.ГруппаРабочийСтолПК.Видимость = Истина;
        Элементы.ГруппаРабочийСтолМобильный.Видимость = Ложь;
    КонецЕсли;
    
КонецПроцедуры

Внутри этой формы-контейнера можно разместить подчиненные формы или использовать механизм ДобавитьЭлемент для программного создания интерфейса "на лету". Это самый надежный способ для работы в мобильном приложении (standalone), так как в нем работа с пользователями и сложными настройками рабочего стола сильно ограничена по сравнению с мобильным клиентом.

Способ 4. Управление видимостью через роли

Как отмечалось в обсуждении, если бизнес-логика позволяет, можно использовать стандартный механизм прав доступа. Рассмотрим этот вариант подробнее. Мы создаем отдельную роль, например, РаботаСМобильногоКлиента. В настройках начальной страницы в конфигураторе для каждой формы настраивается видимость в разрезе ролей.

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

Особенности работы с мобильным приложением

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

Подведем итог: для реализации динамической смены начальной страницы в мобильном клиенте лучше всего использовать сочетание проверки ТипПлатформы.МобильныйКлиент и программного вызова ОбновитьИнтерфейс() после записи настроек в хранилище. Для более "чистой" архитектуры рекомендуется использовать функциональные опции, которые позволяют декларативно управлять составом интерфейса без лишнего программного кода в модулях запуска.

← На главную