Почему не работает или долго подключается отладка фоновых заданий в 1С и как это исправить?

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

Отладка фоновых заданий в среде «1С:Предприятие 8.3» — один из самых мощных, но в то же время капризных инструментов разработчика. Довольно часто возникает классическая ситуация: параметр -debug на сервере включен, кэш очищен, строки подключения Конфигуратора и базы данных полностью совпадают, но точки останова внутри фоновых заданий упорно игнорируются платформой. Либо, что не менее критично, отладчик все-таки подключается, но с огромной задержкой (в 5–10 секунд), из-за чего разработчик успевает «поймать» выполнение кода только на самых последних строчках процедуры.

В этой статье мы подробно разберем физику этого процесса, проанализируем неочевидные сетевые механизмы платформы 1С и изучим пошаговые инструкции по устранению проблем с отладкой фоновых заданий.

1. Понимание механизма обратного вызова при TCP/IP отладке

Рассмотрим, как именно работает классический механизм отладки по умолчанию в 1С (протокол TCP/IP). Многие разработчики ошибочно полагают, что только Конфигуратор инициирует сетевое подключение к серверу. На самом деле при использовании TCP/IP схема работает по принципу обратного вызова (Callback):

  1. Конфигуратор регистрируется на сервере отладки.
  2. При старте фонового задания рабочий процесс сервера rphost инициирует новое встречное TCP-соединение к компьютеру разработчика (туда, где запущен Конфигуратор).
  3. Если этот встречный запрос блокируется, сервер совершает несколько безуспешных попыток соединения, ожидая таймаута (те самые 5–10 секунд задержки). Только после этого фоновое задание продолжает выполняться без отладчика (или отладчик подключается слишком поздно).

2. Настройка брандмауэра на компьютере разработчика

Проанализируем типичную ошибку администрирования: брандмауэр на сервере 1С настроен идеально, но локальный брандмауэр (Windows Firewall) или антивирус на рабочем компьютере программиста блокирует входящие соединения.

Выясним, как правильно настроить сеть для отладки по TCP/IP:

  1. На компьютере разработчика необходимо открыть диапазон входящих портов отладки. По умолчанию это порты 1560–1591, а также служебный порт 1550.
  2. В настройках брандмауэра Windows создадим разрешающее правило для входящих подключений по протоколу TCP для исполняемого файла тонкого/толстого клиента 1cv8.exe или конкретного диапазона портов.
  3. Временным, но надежным способом диагностики является полное отключение локального брандмауэра на ПК разработчика для проверки: если после отключения отладка пошла мгновенно, проблема однозначно в правилах фильтрации трафика на клиенте.

3. Проблема множественных сетевых интерфейсов и VPN

Если на компьютере разработчика активно более одного сетевого адаптера (например, физическое подключение, Wi-Fi, активное VPN-соединение или виртуальные сетевые карты VMware/VirtualBox), сервер 1С может запутаться:

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

4. Медленное разрешение имен (DNS) и влияние IPv6

Когда рабочий процесс сервера пытается связаться с Конфигуратором, он часто обращается к нему по сетевому имени компьютера. Если в локальной сети некорректно работает служба DNS или включен протокол IPv6, возникают задержки:

Решение: Пропишите жесткое соответствие IP-адреса и сетевого имени компьютера разработчика в файле hosts на самом сервере приложений 1С. Также рекомендуется отключить протокол IPv6 в свойствах сетевого подключения на сервере и клиентском ПК, если он не используется в вашей инфраструктуре.

5. Ограничение количества рабочих процессов rphost в кластере

В нагруженных клиент-серверных базах в рамках одного кластера может функционировать несколько рабочих процессов rphost. При этом фоновое задание может запуститься на одном процессе, а сессия Конфигуратора быть привязанной к другому. Перенаправление отладочной информации между процессами под нагрузкой может работать нестабильно.

Решение: На время активной разработки и отладки ограничьте количество рабочих процессов в свойствах локального кластера до одного. Это гарантирует, что и сессия Конфигуратора, и фоновое задание будут выполняться в рамках единого адресного пространства процесса rphost, исключая межпроцессные задержки.

6. Синхронный запуск фоновых заданий через параметры запуска (БСП)

Если конфигурация разработана с использованием Библиотеки Стандартных Подсистем (БСП), мы можем воспользоваться штатным механизмом обхода фонового режима. Разберем по шагам, как запустить отладку в рамках клиентского сеанса:

  1. В Конфигураторе откроем настройки отладки (меню Сервис — Параметры — Запуск 1С:Предприятия — Основные).
  2. В поле Параметры запуска пропишем команду: /CРежимОтладки.
  3. При запуске системы с этим параметром БСП автоматически перехватывает вызовы фоновых заданий. Вместо реального фонового процесса код выполнится синхронно непосредственно в контексте вашего клиентского приложения. Точка останова сработает мгновенно и без сетевых задержек.

Если стандартный параметр запуска по какой-то причине не поддерживается вашей версией БСП, этот механизм можно легко сымитировать непосредственно в коде конфигурации. Рассмотрим пример модификации общего модуля ДлительныеОперации:


// В самом начале функции ВыполнитьВФоне() или аналогичной процедуры БСП
// принудительно переопределим параметры запуска:
ПараметрыВыполнения.ЗапуститьВФоне = Ложь;
ПараметрыВыполнения.ЗапуститьНеВФоне = Истина;

Такой подход заставит систему выполнить алгоритм в текущем сеансе, полностью игнорируя фоновый режим. После завершения отладки не забудьте вернуть исходный код модуля в первоначальный вид. При необходимости тестирования команд без модификации типовых модулей можно использовать инструмент для отладки внешних печатных форм и обработок.

7. Переход на современный протокол HTTP-отладки

Если победить сетевые ограничения TCP/IP в вашей корпоративной сети не удается (например, строгие политики безопасности запрещают любые входящие подключения на компьютеры пользователей), лучшим решением станет переход на протокол HTTP-отладки.

HTTP-отладка работает по принципу пулинга (Polling): Конфигуратор сам постоянно опрашивает сервер отладки на предмет наличия новых событий, избавляя сервер от необходимости совершать обратные вызовы на ПК разработчика. Соответственно, проблема закрытых входящих портов на локальном компьютере отпадает полностью.

Разберем, как включить HTTP-отладку:

  1. На сервере 1С служба агента сервера должна быть запущена с ключом -http в параметрах отладки.
  2. В Конфигураторе перейдем в меню Сервис — Параметры — Отладка.
  3. Переключим способ отладки на HTTP.
  4. В поле Адрес локального сервера отладки укажем адрес публикации службы отладки (по умолчанию это порт 1550 сервера, например, http://имя_сервера:1550).

Использование HTTP-отладки позволяет полностью нивелировать проблемы с блокировкой портов брандмауэрами, VPN-маршрутизацией и медленным разрешением сетевых имен.

← На главную