Работа с интерфейсом мобильного приложения существенно отличается от разработки для настольных ПК. Основным инструментом взаимодействия пользователя с устройством являются жесты, и свайп (сдвиг пальцем по экрану) занимает среди них центральное место. Разработчики часто сталкиваются с тем, что стандартное поведение платформы 1С не всегда соответствует бизнес-задачам: системное меню может мешать навигации, а таблицы могут «перехватывать» жесты, предназначенные для перелистывания страниц. В этой статье мы подробно разберем, как приручить свайпы в мобильной платформе 1С.
Рассмотрим стандартную ситуацию: на форме создана группа с видом Страницы, внутри которой находятся несколько обычных групп (каждая группа — это отдельная страница). По умолчанию пользователь ожидает, что сможет переключаться между ними простым горизонтальным свайпом. Однако часто этого не происходит. Проанализируем причину.
Для того чтобы жест перелистывания заработал, необходимо обратить внимание на свойство группы Страницы — ОтображениеСтраниц. Если установить это значение в Закладки, платформа выведет стандартные корешки страниц сверху, но свайп при этом может блокироваться в зависимости от версии платформы. Выясним секрет: наиболее стабильно жест перелистывания работает, когда ОтображениеСтраниц установлено в значение Нет. В этом случае пользователь не видит закладок, и навигация целиком ложится на плечи жестов.
Важное ограничение: выясним, почему свайп может внезапно перестать работать. Если внутри страницы расположен элемент, который сам использует горизонтальные жесты, платформа отдаст приоритет ему. К таким элементам относятся:
Часто возникает задача отключить вызов системного меню (которое выезжает слева направо), чтобы оно не конфликтовало с логикой работы самой формы. Рассмотрим, как это можно реализовать без использования модальных окон.
Основным инструментом здесь выступает свойство формы РежимОткрытияОкна. Проанализируем доступные варианты:
Блокировать весь интерфейс, мобильная платформа скрывает доступ к системному командному интерфейсу. Свайп слева направо перестает вызывать боковую панель, так как форма становится монопольной в контексте приложения.РежимОткрытияОкна является более надежным для конкретных интерфейсных решений.Начиная с версии платформы 8.3.15, у разработчиков появилась штатная возможность настраивать действия при свайпе в таблицах. Это позволяет реализовать сценарии типа «свайпнул влево — удалил», «свайпнул вправо — утвердил».
Разберем по шагам, как это настроить:
Таблица.В результате при сдвиге строки таблицы пользователь увидит кнопки, при нажатии на которые сработает ваш программный код. Это наиболее близкий аналог функции «ПриСвайпе», реализованный в рамках штатных механизмов 1С.
Если штатных средств недостаточно (например, нужно отловить свайп вверх/вниз или диагональные жесты), мы можем прибегнуть к использованию Поля 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-документа, позволяет реализовать практически любой современный мобильный интерфейс.