Работа в клиент-серверном варианте 1С:Предприятие вносит свои коррективы в привычный процесс разработки. Часто возникает ситуация, когда код, написанный в модуле с директивой &НаКлиенте, успешно останавливается на точках останова, а серверный код (в модулях с директивами &НаСервере или в общих модулях) просто игнорируется отладчиком. Давайте разберем по шагам, почему это происходит и как заставить конфигуратор "видеть" серверные вызовы, особенно когда вы работаете удаленно и не используете RDP-подключение к серверу.
Для начала проанализируем, как устроена связь между отладчиком (вашим конфигуратором) и предметом отладки (сессией пользователя). В 1С существует два основных протокола передачи отладочной информации: TCP/IP и HTTP. Выбор протокола определяет, какие настройки сети нам потребуются. Рассмотрим ситуацию, когда сервер 1С находится в одной сети или доступен по VPN, а вы запускаете конфигуратор со своего рабочего места.
Основная причина, по которой сервер игнорирует точки останова, заключается в том, что служба 1C:Enterprise 8.3 Server Agent по умолчанию запускается без разрешения на отладку. Даже если вы включили отладку в настройках самого конфигуратора, сервер "не знает", что ему нужно передавать управление отладчику.
Этот способ является стандартным, но требует внимательности при настройке прав доступа и брандмауэра. Разберем процесс включения режима -debug на стороне сервера 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"
Пример строки после изменения:
"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
1C:Enterprise 8.3 Server Agent. Учтите, что это прервет работу всех пользователей в этой базе.Важный нюанс TCP-режима: При использовании этого протокола сервер сам пытается "достучаться" до вашего компьютера. Это означает, что на вашем локальном ПК в брандмауэре Windows должны быть открыты входящие порты для приложения 1cv8.exe. Если ваш компьютер находится за NAT или в другой подсети без прямой маршрутизации от сервера к вам, TCP-отладка на сервере работать не будет.
Проанализируем преимущества HTTP-отладки. В отличие от TCP, здесь используется централизованный сервер отладки (процесс dbgs). Все участники процесса (сервер 1С и конфигуратор) сами подключаются к нему. Это снимает проблему "обратного соединения" и необходимости открывать порты на компьютере разработчика.
Чтобы перевести сервер в режим HTTP-отладки, выполним следующие действия:
-debug, заменим этот ключ на -http.dbgs, который обычно слушает порт 1562.http://192.168.1.10:1562).Рассмотрим ситуацию, когда отладка все равно не работает. Проверьте файл conf.cfg в папке bin\conf на сервере. Иногда там может быть жестко прописан параметр debugServerAddr, который перекрывает настройки реестра.
Часто программисты сталкиваются с тем, что обычный серверный код отлаживается, а регламентные задания — нет. Выясним причину: фоновые задания запускаются в отдельных сеансах, которые конфигуратор "не видит" по умолчанию. Посмотрим, как их подключить.
Разберем алгоритм действий в Конфигураторе:
ФоновыеЗадания.Выполнить) отладчик автоматически подцепит этот поток, и точка останова сработает.Проанализируем ситуацию, если фоновое задание выполняется слишком быстро и вы не успеваете его "поймать". В таких случаях рекомендуется временно добавить в начало серверного кода небольшую паузу или использовать метод Сигнал(), чтобы успеть убедиться в подключении сеанса.
Чтобы окончательно убедиться, что сервер готов к работе, воспользуемся окном "Подключение". Если вы все настроили правильно, в списке "Доступные предметы отладки" вы должны увидеть строки, где в колонке "Тип" указано Сервер. Если там присутствует только Клиент, значит, флаг -debug или -http не активен, либо порт 1560-1591 (для TCP) или 1562 (для HTTP) заблокирован сетевым экраном на стороне сервера.
Выясним, как проверить доступность порта без специальных инструментов. Можно воспользоваться командой в терминале (PowerShell):
Test-NetConnection -ComputerName ИмяВашегоСервера -Port 1562
Если результат TcpTestSucceeded : True, значит, путь для отладочного трафика открыт. Если же вы видите ошибку, необходимо обратиться к системному администратору для настройки правил Firewall.
Таким образом, настройка отладки на сервере сводится к трем ключевым шагам: включение ключа запуска в реестре, выбор подходящего протокола (рекомендуем HTTP для удаленной работы) и настройка автоматического подключения фоновых заданий. Соблюдение этой последовательности позволит вам эффективно анализировать серверный код в любой конфигурации 1С.