Как программно включить режим киоска при запуске 1С на основе настроек пользователя

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

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

Выбор правильного события для инициализации

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

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

Проблема доступа к серверным данным с клиента

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

Если вы создаете свою процедуру на сервере, важно помнить: недостаточно просто написать &НаСервере и Экспорт. Для того чтобы клиент увидел этот метод, общий модуль должен иметь установленный флаг «Вызов сервера» (Server Call) в свойствах метаданных. Без этого флага попытка вызова функции приведет к ошибке компиляции «Процедура или функция не определена».

Способ 1: Получение настроек через типовые функции (БСП)

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

Посмотрим на пример кода, который можно разместить в модуле управляемого приложения:


&После("ПередНачаломРаботыСистемы")
Процедура Моб_ПередНачаломРаботыСистемы(ОповещениеЗавершения, НепрерывноеВыполнение)
    
    // Используем типовой программный интерфейс для чтения реквизита пользователя
    ТекущийПользователь = ПользователиКлиент.АвторизованныйПользователь();
    НужноЗапускатьКиоск = ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(ТекущийПользователь, "Моб_МобильныйКлиент");
    
    Если НужноЗапускатьКиоск Тогда
        // Устанавливаем режим киоска для всего приложения
        КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.Киоск);
        
        // Открываем специализированную форму интерфейса
        ОткрытьФорму("Обработка.Моб_Интерфейс.Форма");
    КонецЕсли;

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

Способ 2: Использование параметров сеанса и параметров клиента

Рассмотрим более продвинутый и производительный метод. Постоянные вызовы ЗначениеРеквизитаОбъекта создают лишнюю нагрузку (round-trip) между клиентом и сервером. Проанализируем ситуацию: настройки пользователя не меняются в процессе работы. Значит, мы можем вычислить их один раз при старте сервера и передать на клиент в готовом виде.

Для этого в Модуле сеанса в процедуре УстановкаПараметровСеанса мы можем инициализировать параметры, а затем в модуле управляемого приложения использовать их. Однако напрямую параметры сеанса на клиенте недоступны. Правильным подходом в БСП является заполнение структуры ПараметрыКлиента.

Разберем алгоритм:

  1. На сервере (в модуле сеанса или общем модуле) определяем, должен ли данный пользователь работать в режиме киоска.
  2. Передаем это значение в структуру параметров, которая возвращается клиенту при запуске.
  3. На клиенте просто обращаемся к свойству ПараметрыКлиента.

Режим киоска для конкретной формы vs Режим основного окна

Важно различать два технических подхода, которые часто путают. Посмотрим на них подробнее:

1. УстановитьРежимОсновногоОкна — это глобальная настройка. Она скрывает все лишнее: панель разделов, заголовок приложения, системное меню 1С. Это идеальный вариант создать свой интерфейс для мобильных клиентов и ТСД, где каждый пиксель экрана на счету.

2. Режим отображения окна (Киоск) — это свойство конкретной формы. Рассмотрим пример: если у вас открыто обычное приложение, но вы вызываете форму РМК с установленным свойством РежимОтображенияОкна.Киоск, эта форма развернется поверх всего, даже поверх панели задач Windows. Это удобно для стационарных терминалов самообслуживания.

Посмотрим, как программно настроить отображение конкретной формы (здесь также может быть полезен модификатор управляемых форм):


ПараметрыФормы = Новый Структура;
ФормаИнтерфейса = ПолучитьФорму("Обработка.Моб_Интерфейс.Форма", ПараметрыФормы);
ФормаИнтерфейса.РежимОтображенияОкна = РежимОтображенияОкнаУправляемойФормы.Киоск;
ФормаИнтерфейса.Открыть();

Особенности работы в мобильном клиенте

Проанализируем специфику мобильной платформы. Режим киоска здесь работает наиболее эффективно. Он не только убирает интерфейсные панели 1С, но и во многих случаях блокирует системные жесты (например, «свайп» от края экрана), что предотвращает случайное закрытие приложения сотрудником склада — для этого подойдёт мобильное приложение для автоматизации склада на ТСД.

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

Резюме и практические советы

Завершая наш разбор, выделим ключевые моменты для успешной реализации задачи:

Основные выводы:

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

← На главную