При проектировании мобильных решений на платформе 1С для выездных сотрудников (торговых представителей, курьеров, сервисных инженеров) одной из ключевых задач становится непрерывный контроль их перемещений. Запись GPS-трека в течение рабочей смены позволяет оптимизировать логистику, контролировать посещение торговых точек и оперативно распределять задачи. Однако разработчики неизбежно сталкиваются с проблемой: операционная система Android стремится завершить любые фоновые процессы в целях экономии заряда батареи.
В этой статье мы подробно рассмотрим, возможно ли превратить мобильное приложение 1С в полноценный неубиваемый сервис для снятия геокоординат, какие ограничения накладывают современные версии Android и какие технические решения существуют на практике.
Прежде чем переходить к коду, давайте выясним причину, по которой фоновый сбор координат превратился в сложнейшую техническую задачу. Начиная с Android 8.0 и особенно жестко в Android 10, 11, 12 и более новых версиях, Google внедрил агрессивные механизмы энергосбережения:
ACCESS_BACKGROUND_LOCATION). Без этого разрешения, как только приложение сворачивается, доступ к GPS блокируется.Рассмотрим по шагам, какими способами разработчики 1С могут обойти эти ограничения.
Для начала проанализируем базовый функционал, предоставляемый мобильной платформой 1С. Начиная с версии 8.3.17, фирма «1С» адаптировала платформу под требования Android 10+, добавив поддержку фонового геопозиционирования. Для этого в свойствах мобильного приложения в конфигураторе необходимо обязательно установить флаг использования фонового определения местоположения.
Давайте посмотрим на практический пример программного включения трекинга с использованием глобального контекста СредстваГеопозиционирования. Данный код позволяет настроить периодический опрос GPS-приемника:
Процедура Вкл_Трекинг(Команда)
#Если МобильноеПриложениеКлиент Тогда
Попытка
// Принудительное включение приемника GPS на устройстве через системное намерение Android
Запуск = Новый ЗапускПриложенияМобильногоУстройства;
Запуск.Действие = "android.location.GPS_ENABLED_CHANGEPICK";
Запуск.Данные = "enabled:true";
Запуск.Запустить(Истина);
Исключение
Сообщить("Не удалось принудительно активировать приемник GPS: " + ОписаниеОшибки);
КонецПопытки;
Попытка
// Подключение обработчика, который будет срабатывать при изменении координат
// Параметры: ИмяПроцедурыОбработчика, Источник ("gps"), ИнтервалОпроса (в секундах), Погрешность
СредстваГеопозиционирования.ПодключитьОбработчикИзмененияМестоположения(
"ЗаписьвИсториюМестоположений",
"gps",
10,
10
);
Сообщить("GPS-трекинг успешно активирован!");
Исключение
Сообщить("Не удалось подключить обработчик GPS-трекинга: " + ОписаниеОшибки);
КонецПопытки;
#КонецЕсли
КонецПроцедуры
В процедуре-обработчике ЗаписьвИсториюМестоположений разработчик должен описать логику сохранения полученной координаты во внутреннюю базу данных (например, записывать данные в регистр сведений для последующей отправки на центральный сервер 1С).
Важное ограничение: Несмотря на то, что этот код отлично работает на старых версиях операционной системы, на современных смартфонах с Android 10 и выше штатные фоновые задания 1С (запущенные через ФоновыеЗадания.Выполнить) будут мгновенно уничтожены операционной системой, как только приложение 1С полностью выгрузится из оперативной памяти.
Если полностью победить алгоритмы Android программным кодом внутри 1С не удается, разработчики часто прибегают к административно-техническим мерам контроля над действиями пользователей.
Выясним причину частых сбоев в работе мобильных сотрудников: очень часто они сами отключают GPS или переводят приложение в режим экономии энергии, чтобы снизить расход батареи. Чтобы исключить человеческий фактор, мы можем применить следующую стратегию:
Такой подход позволяет гарантировать, что во время рабочей смены на телефоне будут выставлены правильные параметры энергосбережения.
Разберем еще один проверенный временем архитектурный паттерн, который успешно применяют крупные ритейлеры (включая компанию «Магнит»). Поскольку мобильная платформа 1С является достаточно тяжеловесной средой, заставлять ее непрерывно висеть в фоне ради редких опросов GPS не всегда рационально.
Вместо этого на смартфоны сотрудников устанавливается легкое, специализированное нативное приложение-трекер (например, GPS Logger или аналогичное опенсорсное решение). Данная схема работает по следующему алгоритму:
Эта схема крайне надежна, так как нативное приложение практически невозможно случайно закрыть, а платформа 1С запускается только тогда, когда это действительно необходимо пользователю.
Для тех, кто хочет получить бесшовное решение внутри одного приложения 1С, идеальным вариантом является использование механизма внешних компонент (Native API).
По правилам Android, единственным гарантированным способом защитить фоновый процесс от уничтожения является создание службы переднего плана (Foreground Service). Такая служба обязана показывать постоянное, неудаляемое уведомление в строке состояния (шторке уведомлений). Это сигнализирует операционной системе, что приложение выполняет важную работу (например, как музыкальный плеер или навигатор), и закрывать его нельзя.
Разработчики пишут внешнюю компоненту на Java/Kotlin для Android, которая упаковывается в ZIP и подключается к конфигурации 1С. Компонента запускает фоновую службу, собирает координаты автономно от 1С и передает их обратно в платформу через механизм внешних событий (ОбработкаВнешнегоСобытия). Это позволяет добиться стопроцентной стабильности трекинга непосредственно средствами экосистемы 1С.
В заключение рассмотрим обязательные шаги по ручной настройке мобильных устройств сотрудников, без которых ни одно приложение не сможет работать стабильно в фоновом режиме:
Сочетание программных методов платформы 1С, грамотной настройки операционной системы Android и использования специализированных сервисов позволяет полностью решить задачу фонового мониторинга выездного персонала.