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