Почему не работают точки останова в общем модуле 1С и как настроить серверную отладку

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

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

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

Выясняем причину: почему отладчик не останавливается

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

Если в окне «Подключенные предметы отладки» вы видите только строку с типом «Клиент», то любые серверные вызовы будут недоступны для отладки. Даже замер производительности в этом случае покажет недостоверную картину: он просто «не увидит» серверную часть кода, и вам может показаться, что модуль вообще не вызывался.

Шаг 1. Включение режима отладки на сервере 1С

Для того чтобы сервер стал доступен для отладчика, необходимо запустить службу 1C:Enterprise Server Agent с ключом -debug. Разберем по шагам, как это сделать через реестр Windows:

  1. Запустите редактор реестра: нажмите Win + R, введите regedit и нажмите Enter.
  2. Перейдите в ветку реестра, соответствующую вашей версии платформы. Для 8.2 это обычно:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.2 Server Agent
    Для версии 8.3 путь будет аналогичным, но с указанием 8.3 в названии службы.
  3. Найдите параметр ImagePath. Это строка запуска исполняемого файла ragent.exe.
  4. Отредактируйте этот параметр, добавив -debug в список ключей. Посмотрим на пример изменения:

Было:


"C:\Program Files\1cv82\8.2.19.130\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv82\srvinfo"

Стало:


"C:\Program Files\1cv82\8.2.19.130\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv82\srvinfo"

Важно: После внесения изменений в реестр необходимо обязательно перезапустить службу сервера 1С через консоль services.msc, иначе изменения не вступят в силу.

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

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

  1. В режиме Конфигуратора откройте меню Отладка -> Подключение...
  2. В открывшемся окне нажмите кнопку Автоматическое подключение.
  3. Установите флажки напротив пунктов Сервер и Фоновые задания.

Теперь при выполнении серверного кода точка останова должна сработать. Проверьте список «Доступные предметы отладки» в том же окне: там должны появиться строки с типом «Сервер» для вашей сессии.

Особенности отладки фоновых заданий

Часто в УПП формирование тяжелых отчетов или некоторых документов выносится в фоновые задания. Рассмотрим ситуацию: вы запускаете процесс, он выполняется где-то «в фоне», и отладчик не реагирует. Без включенной галочки Фоновые задания в настройках автоматического подключения поймать такой процесс практически невозможно.

Также стоит помнить, что отладка фоновых заданий требует включенного режима -debug на сервере в обязательном порядке. Если сервер не в режиме отладки, клиентская часть отладчика никогда не узнает о том, что происходит внутри BackgroundJob.

Почему отладка могла «сломаться» сама по себе?

Проанализируем распространенную ситуацию: «Раньше работало, а теперь нет». Этому может быть несколько причин:

Использование замера производительности для диагностики

Если вы все еще сомневаетесь, вызывается ли ваш код, воспользуйтесь замером производительности. Но помните: чтобы увидеть серверные вызовы, замер должен быть запущен после того, как в предметах отладки появился сервер. В результатах замера вы увидите не только время выполнения, но и количество вызовов каждой строки. Если модуль УчетНДС или УниверсальныйПередаточныйДокумент отсутствуют в списке — значит, либо серверная отладка все еще не активна, либо вызов идет через ExternalConnection (внешнее соединение), которое также требует отдельной настройки подключения.

Таким образом, для стабильной работы отладчика в сложных конфигурациях всегда держите серверный режим -debug включенным на тестовых и рабочих базах (если нагрузка позволяет), и не забывайте проверять настройки Автоматического подключения в Конфигураторе.

← На главную