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