Работа с мобильным клиентом «1С:Предприятие» вносит свои коррективы в привычный процесс разработки и отладки. Часто программисты сталкиваются с ситуацией, когда точки останова в Модуле управляемого приложения игнорируются системой, а код, который должен определять среду запуска, не отрабатывает. Давайте вместе разберем внутреннюю логику запуска мобильного клиента, определим последовательность вызова модулей и выясним, как заставить отладчик «ловить» события в самом начале сеанса.
Важно понимать, что в мобильном клиенте выполнение кода распределено между клиентским устройством и сервером. В отличие от обычного тонкого клиента, инициализация здесь проходит через несколько этапов, где сервер и клиент активно обмениваются данными. Проанализируем стандартную цепочку вызовов:
УстановкаПараметровСеанса. Это критически важный момент, так как здесь мы можем инициализировать параметры, которые в дальнейшем понадобятся для логики приложения.ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы. Именно эти точки часто «пролетают» мимо отладчика.Разберем причину, по которой отладчик не останавливается в начале работы. Основная проблема заключается в скорости инициализации. К тому моменту, когда мобильное устройство начинает выполнять код ПриНачалеРаботыСистемы, связь между отладочным сервером и мобильным клиентом может быть еще не установлена или не стабилизирована. Система просто не успевает получить информацию о точках останова.
Чтобы решить эту проблему, рассмотрим технические требования к настройке отладки:
default.vrd. В нем должен быть явно разрешен режим отладки:
<debug enable="true" url="http://имя_вашего_компьютера" protocol="http" />
Одной из причин «неработающего» кода может быть неверное использование директив препроцессора. В 1С существует два похожих, но разных понятия. Выясним разницу:
МобильноеПриложениеКлиент — это код, который исполняется в автономном мобильном приложении (с собственной базой данных на устройстве).МобильныйКлиент — это код для тонкого клиента, запущенного на мобильном устройстве и работающего с центральной базой.Если вы разрабатываете решение для мобильного клиента (например, на базе УТ 11), используйте проверку #Если МобильныйКлиент. Рассмотрим пример правильной инициализации параметра сеанса, который поможет серверному коду понять, откуда пришел пользователь:
// В Модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
#Если МобильныйКлиент Тогда
УстановитьПараметрСеансаМобильныйКлиент(Истина);
#Иначе
УстановитьПараметрСеансаМобильныйКлиент(Ложь);
#КонецЕсли
КонецПроцедуры
Поскольку ПараметрыСеанса нельзя устанавливать напрямую на клиенте, мы вызываем серверную процедуру (например, из общего модуля с признаком «Вызов сервера»), которая выполнит установку:
// В общем модуле на сервере
Процедура УстановитьПараметрСеансаМобильныйКлиент(Значение) Экспорт
ПараметрыСеанса.ЭтоМобильныйКлиент = Значение;
КонецПроцедуры
Проанализируем ситуацию на примере типовых конфигураций (УТ 11, ERP, КА). В них Модуль управляемого приложения часто почти пуст, так как управление сразу передается библиотеке стандартных подсистем (БСП). Если точка останова в модуле приложения не срабатывает, попробуйте найти процедуру ПриЗавершенииЗагрузкиПараметровРаботыКлиента в общем модуле СтандартныеПодсистемыКлиент.
В мобильном клиенте инициализация параметров БСП может происходить асинхронно, и отладчик с большей вероятностью «зацепится» за выполнение кода именно в этом месте, когда основные клиент-серверные вызовы по запуску сеанса уже завершены.
Если отладка всё равно не идет, воспользуемся проверенным методом «сообщений». Попробуйте вставить в ПередНачаломРаботыСистемы следующий код:
Сообщить("Проверка запуска: " + ТекущаяДата());
Если сообщение появилось на экране мобильного устройства при запуске, значит, модуль выполняется, и проблему нужно искать исключительно в настройках сетевого соединения отладчика (брандмауэр, настройки публикации, доступность порта отладочного сервера). Если же сообщения нет — проверяйте условия #Если, которые могут отсекать выполнение кода для данного типа клиента.
В качестве альтернативы «первым клиентским модулем» можно считать Модуль формы начальной страницы. Установите точку останова в событии ПриОткрытии основной формы. Если остановка произойдет там, значит, инфраструктура отладки настроена верно, а проблема с модулем управляемого приложения связана именно с моментом установки соединения на раннем этапе запуска.