Работа мобильного клиента 1С в условиях крупного склада или офиса часто сопряжена с проблемой «миграции» пользователя между зонами покрытия различных точек доступа Wi-Fi. В момент переключения (роуминга) операционная система устройства может кратковременно прервать сетевое соединение или сменить IP-адрес, что для классического клиент-серверного приложения 1С часто оборачивается потерей сеанса. Разберем подробно, как ведет себя мобильный клиент в таких ситуациях и какие инструменты есть в арсенале разработчика и системного администратора для решения этой проблемы.
Рассмотрим стандартную ситуацию: сотрудник перемещается по территории, и его смартфон переключается с одной точки доступа на другую. В этот момент происходит микропауза в передаче данных. Если точки доступа не настроены в режиме бесшовного роуминга, клиентское устройство разрывает текущее TCP-соединение и инициирует новое. Для сервера 1С и веб-сервера (IIS или Apache) это выглядит как внезапный обрыв связи.
Проанализируем, как на это реагирует платформа. В старых версиях мобильной платформы (до 8.3.17) такой разрыв часто приводил к немедленному завершению работы приложения с ошибкой связи. Однако, начиная с версии 8.3.17.76 и выше, механизмы реконнекта были значительно улучшены. Платформа пытается автоматически восстановить соединение, и пользователь видит лишь кратковременное окно «Попытка восстановления связи».
Выясним, как современные версии платформы (8.3.18+) помогают нам бороться с нестабильной связью. В платформе реализован функционал автоматического восстановления сеанса. Мобильный клиент при разрыве связи запоминает состояние и при появлении сети пытается передать серверу специальный идентификатор для возобновления работы именно в том контексте, где она была прервана.
Для корректной работы этого механизма нам необходимо проверить настройки на стороне сервера. В файле conf.cfg или в настройках кластера серверов 1С следует обратить внимание на параметр SessionTimeout. Он определяет, сколько времени сервер будет хранить сеанс «спящим» после потери физического контакта с клиентом. Если роуминг между точками занимает 5–10 секунд, а таймаут настроен правильно, пользователь даже не заметит переключения.
Посмотрим на проблему со стороны сетевого оборудования. Если на объекте используются обычные бытовые точки доступа (так называемые «тупые» точки), роуминг всегда будет происходить с разрывом. Рассмотрим, какие протоколы необходимы для «честного» бесшовного перехода:
Если настроить оборудование с поддержкой этих стандартов, IP-адрес клиента и его TCP-сессии будут сохраняться, а мобильный клиент 1С продолжит работу так, будто разрыва не было вовсе.
Рассмотрим более сложный, но максимально надежный вариант — автономный режим. Важно понимать разницу между «Мобильным приложением» (МП) и «Мобильным клиентом с автономным режимом» (МК с АР). В автономном режиме мобильный клиент превращается в гибрид: он работает онлайн, когда связь есть, но переключается на локальную базу данных (SQLite), когда связь пропадает.
Разберем, что это дает разработчику:
Проанализируем ситуацию: автономный режим требует от программиста описания правил синхронизации. Мы должны указать, какие метаданные будут доступны в офлайне. Это сложнее в реализации, чем обычный мобильный клиент, но гарантирует работу сотрудника даже в «мертвых зонах» Wi-Fi.
Если бюджет на бесшовный Wi-Fi ограничен, а автономный режим кажется избыточным, разберем вариант использования VPN-туннеля. Протоколы типа WireGuard или IKEv2 (с поддержкой MOBIKE) спроектированы так, чтобы сохранять целостность виртуального канала при смене физического IP-адреса устройства. Когда сотрудник переключается между точками, физический адрес меняется, но адрес внутри VPN-туннеля остается прежним. Для мобильного клиента 1С это выглядит как временная задержка (лаг) пакетов, а не как обрыв сессии.
Для того чтобы минимизировать негативный эффект от переключений, при разработке конфигурации для мобильного клиента следует придерживаться определенных правил. Рассмотрим их по шагам:
// Пример асинхронного вызова для мобильной платформы
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатНаСервере", ЭтотОбъект);
НачатьПомещениеФайлаНаСервер(ОписаниеОповещения, , , , УникальныйИдентификатор);
Выясним причину частых вылетов через анализ настроек веб-сервера. Часто проблема кроется в параметре Keep-Alive. Если на Apache или IIS этот параметр установлен в слишком низкое значение, сервер будет принудительно закрывать «молчащие» соединения. Для мобильных устройств, где задержки естественны, рекомендуется увеличивать значения таймаутов:
KeepAliveTimeout и MaxKeepAliveRequests должны быть увеличены.Connection Timeout в параметрах сайта должна учитывать возможные задержки при роуминге.Подводя итог, можно сказать, что стабильная работа мобильного клиента 1С — это комплексная задача. Оптимальным решением для современного предприятия является связка из платформы версии 8.3.18+, настроенного бесшовного Wi-Fi (802.11r) и грамотно спроектированного интерфейса, не блокирующего работу пользователя при кратковременных лагах сети.