При разработке и доработке современных типовых конфигураций, таких как Зарплата и Управление Персоналом 3.1, программисты часто сталкиваются с ситуацией, когда точка останова в серверном модуле не срабатывает. Это критическая проблема, так как большая часть бизнес-логики в управляемом приложении выполняется именно на стороне сервера. В этой статье мы подробно разберем, почему конфигуратор «пролетает» мимо точек останова и как правильно настроить окружение для полноценной отладки.
Первым делом проанализируем настройки самой службы 1C:Enterprise 8.3 Server Agent. По умолчанию сервер 1С запускается без возможности отладки из соображений производительности. Если флаг не установлен, отладчик просто не сможет «увидеть» серверные вызовы.
Для включения режима отладки в Windows выполним следующие действия:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название ветки может незначительно отличаться в зависимости от версии платформы).ImagePath.-debug.Важный нюанс: флаг должен располагаться в правильном месте. Рассмотрим пример правильной строки запуска:
"C:\Program Files\1cv8\8.3.22.1709\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Если мы работаем на операционной системе Linux, то редактировать нужно файл настроек скрипта запуска (обычно это /etc/sysconfig/srv1cv83). Найдем там переменную и установим значение:
SRV1CV8_DEBUG=1
После изменения реестра или конфигурационного файла обязательно нужно перезапустить службу сервера 1С через консоль services.msc. Без перезапуска изменения не вступят в силу.
Даже если сервер запущен с нужным флагом, Конфигуратор должен знать, к каким типам соединений ему следует подключаться автоматически. Выясним причину, почему это важно для ЗУП 3.1. В этой программе многие операции (особенно формирование отчетов и длительные операции) выполняются во внешних или фоновых соединениях.
Рассмотрим порядок настройки в Конфигураторе:
Проанализируем ситуацию: если мы отлаживаем обработку, которая запускает длительную операцию на сервере, точка останова не сработает, пока не включен флаг Фоновые задания. Это связано с тем, что 1С порождает новый сеанс для выполнения кода, и отладчик должен «поймать» его в момент создания.
Начиная с версии платформы 8.3.7, появилось два способа взаимодействия отладчика и сервера. Если настройки протокола в Конфигураторе и на сервере не совпадают, отладка работать не будет. Разберем подробнее каждый вариант.
TCP-отладка: Это классический вариант. Для его работы сервер должен иметь возможность «достучаться» до компьютера разработчика по сети. Если между ними стоит брандмауэр, необходимо открыть диапазон портов (по умолчанию с 1560 по 1591).
HTTP-отладка: Более современный способ, использующий специальный сервис dbgs. Для его включения на сервере вместо простого флага -debug используются дополнительные параметры, указывающие адрес сервера отладки.
Выясним, какой протокол выбран у нас. Зайдем в Сервис — Параметры — вкладка Отладка. Посмотрим, какой переключатель установлен в поле «Протокол отладки». Если вы находитесь в одной локальной сети с сервером, проще всего использовать TCP/IP.
Типовые отчеты в ЗУП 3.1 часто работают в фоновом режиме через механизм длительных операций. Посмотрим на пример кода, который часто встречается в модулях менеджера отчетов:
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Результат = ДлительныеОперации.ВыполнитьВФоне("Отчеты.МойОтчет.Сформировать", ПараметрыОтчета, ПараметрыВыполнения);
Чтобы попасть внутрь процедуры Сформировать, нужно убедиться, что в настройках автоматического подключения (шаг 2) активен пункт Фоновые задания. Если это не помогает, в некоторых случаях (только для целей разработки!) можно временно отключить фоновое выполнение в настройках самой программы или через константы, чтобы код выполнился в текущем клиентском сеансе.
Иногда настройки верны, но отладка все равно не попадает в серверные модули. Проанализируем дополнительные факторы:
%LOCALAPPDATA%\1C\1cv8 на компьютере разработчика.1C:Enterprise Server запущена от имени пользователя, имеющего права на сетевую активность. Часто использование LocalSystem решает проблемы с доступом, хотя это и менее безопасно.Подведем итог: для успешной отладки в ЗУП 3.1 нам необходимо триединство настроек: включенный флаг -debug в реестре сервера, перезапущенная служба и правильно расставленные галочки в окне Автоподключение конфигуратора. Проверив эти три точки, вы в 99% случаев решите проблему с «невидимостью» серверного кода.