Как настроить работу со свайпами в мобильном приложении на платформе 1С:Предприятие

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

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

Настройка перелистывания страниц свайпом

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

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

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

Управление системным меню (Drawer)

Часто возникает задача отключить вызов системного меню (которое выезжает слева направо), чтобы оно не конфликтовало с логикой работы самой формы. Рассмотрим, как это можно реализовать без использования модальных окон.

Основным инструментом здесь выступает свойство формы РежимОткрытияОкна. Проанализируем доступные варианты:

  1. Если установить значение Блокировать весь интерфейс, мобильная платформа скрывает доступ к системному командному интерфейсу. Свайп слева направо перестает вызывать боковую панель, так как форма становится монопольной в контексте приложения.
  2. Также можно управлять доступностью командной панели через настройки самого мобильного клиента, но программный метод через РежимОткрытияОкна является более надежным для конкретных интерфейсных решений.

Реализация кастомных действий в таблицах (Swipe-to-Action)

Начиная с версии платформы 8.3.15, у разработчиков появилась штатная возможность настраивать действия при свайпе в таблицах. Это позволяет реализовать сценарии типа «свайпнул влево — удалил», «свайпнул вправо — утвердил».

Разберем по шагам, как это настроить:

  1. Перейдем в свойства элемента формы Таблица.
  2. Найдем коллекции Состав команд при свайпе влево и Состав команд при свайпе вправо.
  3. Добавим в эти коллекции команды, которые уже созданы на форме.

В результате при сдвиге строки таблицы пользователь увидит кнопки, при нажатии на которые сработает ваш программный код. Это наиболее близкий аналог функции «ПриСвайпе», реализованный в рамках штатных механизмов 1С.

Использование Поля HTML-документа для перехвата любых жестов

Если штатных средств недостаточно (например, нужно отловить свайп вверх/вниз или диагональные жесты), мы можем прибегнуть к использованию Поля HTML-документа. Это самый гибкий, хотя и трудоемкий способ.

Идея заключается в том, чтобы внедрить на форму невидимое или полноэкранное поле HTML с JavaScript-кодом, который будет слушать события касания. Рассмотрим пример логики на стороне JavaScript:


let touchstartX = 0;
let touchendX = 0;

document.addEventListener('touchstart', e => {
    touchstartX = e.changedTouches[0].screenX;
});

document.addEventListener('touchend', e => {
    touchendX = e.changedTouches[0].screenX;
    handleGesture();
});

function handleGesture() {
    if (touchendX < touchstartX) {
        // Свайп влево - передаем событие в 1С
        location.href = "v8ui://custom-swipe-left";
    }
}

В коде 1С мы перехватываем это событие в процедуре ПриНажатии для поля HTML-документа. Проанализируем пример обработки на языке 1С:


&НаКлиенте
Процедура ПолеHTMLДокументаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    // Проверяем URL или данные события
    Если Найти(ДанныеСобытия.Href, "custom-swipe-left") > 0 Тогда
        СтандартнаяОбработка = Ложь;
        // Выполняем нашу функцию, например, переход на следующую страницу
        ТекущаяСтраница = ГруппыСтраницы.ТекущаяСтраница;
        // Логика смены страницы...
    КонецЕсли;
КонецПроцедуры

Продвинутая разработка: Внешние компоненты

Для мобильных приложений, требующих максимальной производительности и глубокой интеграции с ОС, существует путь написания внешней компоненты. Это позволяет «подписаться» на низкоуровневые события жестов Android или iOS. Компонента может генерировать ВнешнееСобытие, которое 1С поймает в одноименном обработчике формы. Это единственный способ реализовать «честный» глобальный перехват жестов без использования HTML-прослоек, но он требует навыков программирования на Java или Swift.

Подводя итог, можно сказать, что хотя 1С и ограничивает разработчика в «свободном» перехвате жестов, сочетание правильной настройки свойств ОтображениеСтраниц, использования Swipe-to-Action в таблицах и, в крайнем случае, Поля HTML-документа, позволяет реализовать практически любой современный мобильный интерфейс.

← На главную