При разработке мобильных интерфейсов на платформе 1С часто возникает задача реализации привычного пользователям жеста pull-to-refresh — обновления данных при потягивании списка вниз. Несмотря на наличие штатных механизмов, разработчики часто сталкиваются с тем, что стандартные события не срабатывают или точка останова в конфигураторе игнорируется. В рамках данной статьи мы подробно разберем, как заставить этот механизм работать, проанализируем возможные ошибки и рассмотрим альтернативные способы реализации динамического обновления.
Для начала проанализируем ситуацию, когда обработчик ОбработкаЗапросаОбновления (RequestUpdateProcessing) не попадает в точку останова. Выясним основные причины, по которым это происходит. Прежде всего, важно понимать, что данный функционал имеет жесткие системные требования. Рассмотрим их по порядку:
ОбработкаЗапросаОбновления не является универсальным для всей формы. Оно жестко привязано к Динамическим спискам и Таблицам, которые связаны с наборами данных.Обновление при листании. В большинстве случаев его следует установить в режим Авто или принудительно разрешить обновление.Выясним причину, по которой точка останова может «пролетать». Отладка мобильных приложений имеет свои нюансы: интерфейсные жесты в мобильных ОС (Android/iOS) имеют жесткие тайм-ауты. Если поток интерфейса замирает на точке останова, операционная система может сбросить состояние жеста, посчитав приложение зависшим. Рассмотрим, как проверить работу кода без использования классической отладки:
Вместо точки останова используем запись в журнал регистрации или вывод сообщения. Проанализируем следующий пример кода:
&НаКлиенте
Процедура ОбработкаЗапросаОбновления(Отказ, СтандартнаяОбработка)
// Записываем событие для проверки без отладки
ЗаписьЖурналаРегистрации("МобильноеПриложение.Обновление", УровеньЖурналаРегистрации.Информация, , , "Жест обновления сработал");
// Обновляем данные динамического списка
Элементы.Список.Обновить();
// Если нужно программно отменить стандартное поведение
// СтандартнаяОбработка = Ложь;
КонецПроцедуры
При вызове этого события на мобильном устройстве автоматически появляется стандартный индикатор загрузки (spinner). Как только выполнение кода в этом обработчике завершается, индикатор исчезает. Если ваш код выполняется слишком быстро, пользователь может просто не заметить анимации. Разберем важный момент: жест работает только тогда, когда список находится в самой верхней позиции. Если список прокручен хотя бы на один пиксель вниз, система воспримет касание как обычный скролл.
Как отмечают опытные разработчики, иногда штатные средства 1С кажутся недостаточно гибкими. В таких случаях рассмотрим альтернативный подход с использованием ПолеHTMLДокумента. Этот метод позволяет создать полностью кастомный интерфейс с использованием HTML, CSS и JavaScript. Проанализируем, как связать мобильную платформу и JS-скрипт:
Для реализации pull-to-refresh внутри HTML-поля нам потребуется библиотека (например, PullToRefresh.js) или написание собственного обработчика событий касания (touch events). Посмотрим на логику взаимодействия:
window.location или ПриНажатии.Этот способ считается наиболее функциональным, но требует знаний веб-технологий. Разберем пример перехвата события в 1С при использовании HTML:
&НаКлиенте
Процедура ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
Если ДанныеСобытия.Свойство("id") И ДанныеСобытия.id = "refresh_trigger" Тогда
СтандартнаяОбработка = Ложь;
ОбновитьДанныеНаФорме();
КонецЕсли;
КонецПроцедуры
Проанализируем ситуацию, упомянутую в обсуждении: использование ТСД. Стоит учитывать, что на промышленных устройствах с кастомными оболочками Android стандартные жесты прокрутки 1С могут конфликтовать с системными настройками. Выясним, почему это происходит:
Многие ТСД имеют встроенные механизмы перехвата жестов для работы сканера или защищенные оболочки (Kiosk mode). Если стандартный жест pull-to-refresh не срабатывает, рекомендуется использовать альтернативные методы интерфейса. Разберем рекомендации гайдлайнов 1С:
Обновить в шапку формы. В мобильном интерфейсе 1С 8.3 кнопки автоматически группируются в удобное меню.ПериодАвтообновления. Установив разумный интервал (например, 60 секунд), мы избавим пользователя от необходимости обновлять список вручную.ПодключитьОбработчикОжидания для периодической проверки новых данных в фоновом режиме.Подводя итог, можно сказать, что реализация обновления по скроллу в 1С вполне возможна при соблюдении технических требований платформы. Мы рекомендуем сначала убедиться в правильности настройки свойств динамического списка и версии платформы, и только при невозможности использования штатного механизма переходить к реализации через HTML-поля или кнопки управления. Для реализации адаптивного интерфейса на базе HTML можно использовать пример динамического подбора товаров в мобильном приложении.