Почему точка останова срабатывает на клиенте, но не работает на сервере в 1С

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

В процессе разработки разработчики часто сталкиваются с ситуацией, когда точка останова в процедуре с директивой &НаКлиенте отрабатывает корректно, но при переходе к вызову серверной процедуры с директивой &НаСервере отладчик просто проскакивает её без остановки.

Рассмотрим пример кода, в котором возникает подобная проблема:


&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
    
    ПроцедураНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура ПроцедураНаСервере()
    
    ААА = 1;
    
КонецПроцедуры

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

Причина 1. Отладка на сервере отключена по умолчанию

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

Разберем, как включить отладку на сервере 1С:

  1. В операционной системе Windows:

    Откроем реестр Windows (команда regedit) и перейдем в ветку службы агента сервера 1С (например, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...). В параметре ImagePath необходимо добавить ключ -debug к исполняемому файлу ragent.exe. После редактирования параметров реестра обязательно перезапустим службу сервера 1С.

  2. В операционной системе Linux:

    Откроем конфигурационный файл службы (например, /etc/sysconfig/srv1cv83 или /etc/init.d/srv1cv83), найдем и раскомментируем строку с параметром SRV1CV8_DEBUG=1. После этого перезапустим службу srv1cv83.

Причина 2. Особенности строки подключения и кластера серверов

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

Решение: выявим незадействованные или отключенные серверы в строке подключения к информационной базе и удалим их, оставив только актуальный адрес сервера 1С, на котором активен ключ -debug.

Причина 3. Настройки автоматического подключения в Конфигураторе

Даже при включенном ключе отладки на сервере, Конфигуратор может не подключаться к серверным предметам отладки автоматически.

Проверим настройки подключения в Конфигураторе:

  1. Перейдем в главном меню Конфигуратора: Отладка → Подключение....
  2. Нажмем кнопку Настройка автоматического подключения.
  3. Установим флаги для серверных вызовов: Серверные вызовы и Фоновые задания. Это позволит отладчику автоматически цепляться к исполняемому серверному контексту.

Причина 4. Сетевые блокировки и брандмауэр

Посмотрим на сетевую составляющую. При использовании стандартного TCP-протокола отладки рабочий процесс сервера 1С (rphost) пытается установить обратное сетевое соединение с компьютером разработчика (где запущен 1cv8.exe). Если на ПК разработчика включен брандмауэр Windows или закрыты входящие порты, клиентский код остановится, а серверный обратный вызов будет заблокирован.

Для решения сетевых проблем рекомендуется использовать протокол **HTTP** для отладки (запуск службы `dbgs` с параметром `-http`), либо добавить исключения в брандмауэр для процесса Конфигуратора.

← На главную