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

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

Работа с мобильным клиентом «1С:Предприятие» вносит свои коррективы в привычный процесс разработки и отладки. Часто программисты сталкиваются с ситуацией, когда точки останова в Модуле управляемого приложения игнорируются системой, а код, который должен определять среду запуска, не отрабатывает. Давайте вместе разберем внутреннюю логику запуска мобильного клиента, определим последовательность вызова модулей и выясним, как заставить отладчик «ловить» события в самом начале сеанса.

Порядок вызова модулей при запуске мобильного клиента

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

  1. Модуль сеанса (На сервере): Первой всегда срабатывает процедура УстановкаПараметровСеанса. Это критически важный момент, так как здесь мы можем инициализировать параметры, которые в дальнейшем понадобятся для логики приложения.
  2. Загрузка конфигурации и метаданных (На клиенте): Платформа передает необходимый контекст на мобильное устройство. В этот момент выполнение кода 1С на стороне клиента еще не началось.
  3. Модуль управляемого приложения (На клиенте): Вот здесь и начинаются сложности. Вызываются события ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы. Именно эти точки часто «пролетают» мимо отладчика.
  4. Модули начальной страницы и общих форм (На клиенте): Если в конфигурации настроена начальная страница (рабочий стол), управление передается в модули соответствующих форм.

Почему отладка «проскакивает» модуль управляемого приложения?

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

Чтобы решить эту проблему, рассмотрим технические требования к настройке отладки:

<debug enable="true" url="http://имя_вашего_компьютера" protocol="http" />

Тонкости использования директив препроцессора

Одной из причин «неработающего» кода может быть неверное использование директив препроцессора. В 1С существует два похожих, но разных понятия. Выясним разницу:

  1. МобильноеПриложениеКлиент — это код, который исполняется в автономном мобильном приложении (с собственной базой данных на устройстве).
  2. МобильныйКлиент — это код для тонкого клиента, запущенного на мобильном устройстве и работающего с центральной базой.

Если вы разрабатываете решение для мобильного клиента (например, на базе УТ 11), используйте проверку #Если МобильныйКлиент. Рассмотрим пример правильной инициализации параметра сеанса, который поможет серверному коду понять, откуда пришел пользователь:


// В Модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
    #Если МобильныйКлиент Тогда
        УстановитьПараметрСеансаМобильныйКлиент(Истина);
    #Иначе
        УстановитьПараметрСеансаМобильныйКлиент(Ложь);
    #КонецЕсли
КонецПроцедуры

Поскольку ПараметрыСеанса нельзя устанавливать напрямую на клиенте, мы вызываем серверную процедуру (например, из общего модуля с признаком «Вызов сервера»), которая выполнит установку:


// В общем модуле на сервере
Процедура УстановитьПараметрСеансаМобильныйКлиент(Значение) Экспорт
    ПараметрыСеанса.ЭтоМобильныйКлиент = Значение;
КонецПроцедуры

Влияние БСП и асинхронность

Проанализируем ситуацию на примере типовых конфигураций (УТ 11, ERP, КА). В них Модуль управляемого приложения часто почти пуст, так как управление сразу передается библиотеке стандартных подсистем (БСП). Если точка останова в модуле приложения не срабатывает, попробуйте найти процедуру ПриЗавершенииЗагрузкиПараметровРаботыКлиента в общем модуле СтандартныеПодсистемыКлиент.

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

Практические советы по диагностике

Если отладка всё равно не идет, воспользуемся проверенным методом «сообщений». Попробуйте вставить в ПередНачаломРаботыСистемы следующий код:

Сообщить("Проверка запуска: " + ТекущаяДата());

Если сообщение появилось на экране мобильного устройства при запуске, значит, модуль выполняется, и проблему нужно искать исключительно в настройках сетевого соединения отладчика (брандмауэр, настройки публикации, доступность порта отладочного сервера). Если же сообщения нет — проверяйте условия #Если, которые могут отсекать выполнение кода для данного типа клиента.

В качестве альтернативы «первым клиентским модулем» можно считать Модуль формы начальной страницы. Установите точку останова в событии ПриОткрытии основной формы. Если остановка произойдет там, значит, инфраструктура отладки настроена верно, а проблема с модулем управляемого приложения связана именно с моментом установки соединения на раннем этапе запуска.

← На главную