При работе с мобильным клиентом 1С одной из самых раздражающих проблем для пользователя является внезапное появление системного окна «Ошибка при отправке запроса на сервер». Это происходит в моменты кратковременной потери интернет-соединения или при нестабильном сигнале Wi-Fi/4G. Стандартное окно выглядит чужеродно, часто пугает пользователей техническими подробностями и прерывает рабочий процесс. Рассмотрим подробнее, как мы можем программно «добраться» до этого окна, изменить его или вовсе заменить своим дружелюбным оповещением.
Для начала разберем природу этого сообщения. Данная ошибка относится к категории низкоуровневых сетевых ошибок (Transport Level Error). Она возникает в тот момент, когда мобильный клиент пытается выполнить HTTP-запрос к серверу приложений (например, при нажатии кнопки, требующей серверного вызова, или при срабатывании обработчика ожидания), но не получает ответа в течение установленного таймаута.
Важно понимать, что это окно генерируется native-слоем мобильной платформы. Это означает, что напрямую изменить его дизайн — шрифт, цвета или расположение кнопок — невозможно. Однако, начиная с современных релизов платформы, у разработчиков появились инструменты для того, чтобы перехватить момент возникновения этой ошибки и подавить стандартный вывод.
Начиная с версии платформы 8.3.17, в 1С реализованы механизмы глобального перехвата ошибок. Проанализируем, как это работает. В модуле управляемого приложения существуют специальные события, которые позволяют нам вмешаться в процесс вывода сообщений об ошибках.
Основным инструментом для нас является процедура ПередВыводомСообщенияОбОшибке. Проанализируем алгоритм работы с этим обработчиком:
Посмотрим на пример реализации кода в модуле управляемого приложения:
Процедура ПередВыводомСообщенияОбОшибке(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры)
ТекстОшибки = ИнформацияОбОшибке.Описание;
// Проверяем, содержит ли описание признаки сетевой ошибки
Если Найти(ТекстОшибки, "Ошибка при отправке запроса") > 0
Или Найти(ТекстОшибки, "HTTP") > 0 Тогда
СтандартнаяОбработка = Ложь; // Отключаем системное окно
// Выводим свое красивое и понятное сообщение
ПоказатьПредупреждение(, "Проблемы со связью. Пожалуйста, проверьте интернет-соединение и попробуйте еще раз.", 10);
КонецЕсли;
КонецПроцедуры
Используя свойство СтандартнаяОбработка = Ложь, мы полностью блокируем появление системного окна. Вместо него пользователь увидит стандартное оповещение 1С, которое выглядит гораздо привычнее и не содержит пугающих технических подробностей.
Разберем ситуацию, когда мы хотим, чтобы платформа сама пыталась восстановить соединение, не беспокоя пользователя сразу. В версиях платформы 8.3.20 и выше внедрены механизмы автоматического переподключения. Это настраивается на стороне сервера в файле публикации default.vrd.
Если настроить параметры восстановления сессии, то вместо резкой ошибки «Запрос не отправлен», мобильный клиент при потере связи покажет более мягкое системное сообщение «Соединение восстанавливается» и попробует повторить запрос в фоновом режиме. Это значительно повышает лояльность пользователей в условиях «плохого» интернета.
В файле default.vrd за это отвечают параметры в секции resilience. Мы можем указать количество попыток переподключения и таймауты между ними. Это позволяет сгладить микро-разрывы связи, которые чаще всего и становятся причиной жалоб.
Если специфика вашего бизнеса предполагает работу в местах, где интернет отсутствует длительное время (склады с плохим покрытием, выезды в поля), то никакие обработчики ошибок не спасут от недовольства пользователей. В этом случае рассмотрим самый надежный, но и самый трудоемкий вариант — Мобильный клиент с автономным режимом.
В этом режиме приложение работает следующим образом:
Для реализации этого режима потребуется создать в конфигурации Автономную конфигурацию, определить состав данных для синхронизации и логику работы в оффлайне. Это полностью исключает появление окна «Ошибка при отправке запроса на сервер», так как приложение всегда имеет доступ к данным (либо серверным, либо локальным).
Необходимо упомянуть, что существуют ситуации, когда даже процедура ПередВыводомСообщенияОбОшибке может не сработать. Это касается критических фатальных ошибок, возникающих на этапе самой первой авторизации или при полном падении рабочего процесса сервера 1С. В эти моменты код конфигурации (1С-код) еще или уже не исполняется, и управление находится целиком на стороне ядра мобильной платформы. В таких редких случаях системное окно всё равно будет показано, но для 95% повседневных ситуаций с потерей интернета вышеописанные методы эффективно решают задачу.
Подведем итог: чтобы привести работу мобильного приложения в нормальный вид, нам следует использовать комбинацию глобальных обработчиков исключений для фильтрации текста ошибок и настройку параметров отказоустойчивости в файле публикации веб-сервера. Это позволит сделать интерфейс профессиональным и дружелюбным к конечному пользователю.