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