Почему падает отладка мобильного приложения 1С при вычислении выражения или открытии табло?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и отладке мобильных приложений на платформе 1С разработчики могут столкнуться с неприятной и трудно диагностируемой проблемой: сеанс отладки внезапно прерывается. Давайте подробно разберем ситуацию, когда отладчик на компьютере завершает работу, а на экране мобильного устройства появляется сообщение об ошибке, особенно в момент интерактивных действий в конфигураторе.

Типичный сценарий выглядит так: вы запускаете отладку мобильного приложения, исполнение кода корректно останавливается в установленной точке останова. Вы можете успешно перемещаться по коду с помощью клавиш F10 (Шагнуть через) или F11 (Шагнуть в). Однако, как только вы пытаетесь выполнить более сложное действие — например, кликнуть мышью в окне модуля, выделить переменную и нажать Shift+F9 для вычисления ее значения, или открыть окно «Табло» — отладка аварийно завершается.

Анализируем ситуацию: в чем причина сбоя?

Первым делом важно локализовать проблему. В описанном случае было выяснено, что ошибка воспроизводится даже на совершенно новом, пустом мобильном приложении с одной кнопкой. Это указывает на то, что проблема кроется не в коде конкретной конфигурации, а глубже — на уровне взаимодействия платформы 1С, мобильного клиента и инструментов отладки.

Проанализируем ключевые моменты, которые помогают понять корень проблемы:

  1. Зависимость от действий разработчика: Сбой происходит не случайным образом, а именно при попытке получить контекст исполнения с мобильного устройства (вычислить выражение, посмотреть переменные в табло). Простое пошаговое выполнение кода работает стабильно.
  2. Зависимость от версии платформы: Опытным путем было установлено, что данная проблема характерна для определенных релизов платформы, в частности для версий 8.3.18 и 8.3.19.
  3. Техническая подоплека: Когда вы запрашиваете значение переменной, среда разработки на компьютере отправляет на мобильное устройство специальный запрос по протоколу HTTP. Мобильный клиент должен обработать этот запрос, собрать данные о текущем состоянии переменных (контексте) и отправить ответ. Ошибка в реализации этого протокола обмена на определенных версиях платформы (это может быть утечка памяти, состояние гонки или другая внутренняя ошибка) приводит к сбою и аварийному завершению процесса как на мобильном устройстве, так и на ПК.

Таким образом, мы имеем дело с платформенной ошибкой, а не с ошибкой в прикладном коде.

Решение 1: Откат на стабильную версию платформы

Самый надежный и проверенный способ решить данную проблему — использовать для разработки и отладки более раннюю, стабильную версию платформы 1С:Предприятие. В ходе обсуждения было установлено, что платформа версии 8.3.16 лишена этой ошибки.

Пошаговый план действий:

  1. Полностью удалите с компьютера проблемные версии платформы 1С (например, 8.3.18.хххх и 8.3.19.хххх).
  2. Установите технологическую платформу 1С:Предприятие одной из версий линейки 8.3.16 (например, 8.3.16.1973).
  3. Убедитесь, что вы используете соответствующую версию мобильной платформы. Хотя строгой зависимости нет, для стабильности лучше использовать версии, выпущенные примерно в одно время.
  4. Переопубликуйте мобильное приложение на веб-сервере.
  5. Полностью удалите приложение с мобильного устройства.
  6. Соберите и установите APK-файл заново.

После перехода на версию 8.3.16 отладка должна заработать в штатном режиме, включая вычисление выражений, работу с табло и другие интерактивные возможности. Как отметил автор темы, после этих действий отладка «работает как по маслу».

Важный совет: для разработки и отладки удобно использовать стабильную версию 8.3.16, а для финальной сборки и публикации приложения в магазины (когда интерактивная отладка уже не так важна) можно переключаться на более свежие версии, например, 8.3.18 или новее, если они требуются для использования новых возможностей платформы.

Решение 2: Обновление платформы до исправленной версии (с оговорками)

Компания «1С» признала наличие данной ошибки и выпустила исправление. Согласно официальному ответу службы технической поддержки, проблема была устранена в мобильной платформе версии 8.3.19.56.

Однако, как показывает практика и отзывы других разработчиков, установка этой «исправленной» версии не всегда гарантирует 100% решение проблемы. В некоторых случаях падения отладчика при просмотре значений переменных продолжаются. Это может быть связано с конкретной комбинацией версии ОС Android, аппаратного обеспечения устройства или другими факторами.

Поэтому, если вы столкнулись с этой ошибкой, рекомендуется сначала попробовать обновиться до последней версии платформы 8.3.19 или более новой. Если проблема останется, тогда уже прибегать к откату на 8.3.16 как к гарантированному решению.

Дополнительные рекомендации по стабилизации отладки

Помимо проблем с версиями платформы, на стабильность отладки мобильных приложений могут влиять и другие факторы. Рассмотрим, что еще можно предпринять для минимизации сбоев.

  1. Проверьте сетевое соединение. Отладка по HTTP очень чувствительна к качеству сети. Если компьютер и смартфон подключены к Wi-Fi, возможны задержки и потери пакетов, которые приводят к разрыву сессии. Для максимальной стабильности попробуйте подключить телефон к компьютеру по USB и использовать режим USB-модема, чтобы создать прямое и надежное сетевое соединение.
  2. Настройте Android. Современные оболочки Android (особенно MIUI от Xiaomi, EMUI от Huawei и др.) имеют агрессивные системы энергосбережения. Они могут принудительно «убивать» фоновые процессы, к которым система может отнести и процесс отладки вашего приложения. Зайдите в настройки батареи на смартфоне, найдите ваше приложение и отключите для него все режимы экономии энергии и оптимизации. Также предоставьте ему все разрешения на работу в фоновом режиме.
  3. Используйте альтернативу — логирование. Когда интерактивная отладка нестабильна, но вам нужно отследить значения переменных или ход выполнения кода, самым надежным инструментом становится логирование. Вместо точек останова вы можете добавлять в код запись сообщений в журнал регистрации.

Посмотрим на пример. Вместо того чтобы пытаться поймать значение переменной МоиДанные в отладчике, вы можете записать его в журнал:


Процедура ПриНажатииНаКнопку()

    // ... какой-то код ...
    МоиДанные = ПолучитьКакиеТоДанные();
    
    // Вместо точки останова используем логирование
    ЗаписьЖурналаРегистрации("МояОтладка.Кнопка",
                             УровеньЖурналаРегистрации.Информация,
                             ,
                             "Значение переменной 'МоиДанные': " + МоиДанные);

    // ... продолжение кода ...

КонецПроцедуры

Просмотреть эти записи потом можно будет в журнале регистрации. Этот метод не вызывает сбоев и позволяет анализировать выполнение кода постфактум, что незаменимо при поиске «плавающих» ошибок.

Подводя итог, можно сказать, что сбой отладчика при работе с мобильными приложениями на версиях 8.3.18 и 8.3.19 — это известная платформенная ошибка. Наиболее эффективным решением является использование версии 8.3.16 для этапа активной разработки, а также применение дополнительных мер по стабилизации соединения и настроек ОС Android.

← На главную