Отладка фоновых заданий в среде «1С:Предприятие 8.3» — один из самых мощных, но в то же время капризных инструментов разработчика. Довольно часто возникает классическая ситуация: параметр -debug на сервере включен, кэш очищен, строки подключения Конфигуратора и базы данных полностью совпадают, но точки останова внутри фоновых заданий упорно игнорируются платформой. Либо, что не менее критично, отладчик все-таки подключается, но с огромной задержкой (в 5–10 секунд), из-за чего разработчик успевает «поймать» выполнение кода только на самых последних строчках процедуры.
В этой статье мы подробно разберем физику этого процесса, проанализируем неочевидные сетевые механизмы платформы 1С и изучим пошаговые инструкции по устранению проблем с отладкой фоновых заданий.
Рассмотрим, как именно работает классический механизм отладки по умолчанию в 1С (протокол TCP/IP). Многие разработчики ошибочно полагают, что только Конфигуратор инициирует сетевое подключение к серверу. На самом деле при использовании TCP/IP схема работает по принципу обратного вызова (Callback):
rphost инициирует новое встречное TCP-соединение к компьютеру разработчика (туда, где запущен Конфигуратор).Проанализируем типичную ошибку администрирования: брандмауэр на сервере 1С настроен идеально, но локальный брандмауэр (Windows Firewall) или антивирус на рабочем компьютере программиста блокирует входящие соединения.
Выясним, как правильно настроить сеть для отладки по TCP/IP:
1560–1591, а также служебный порт 1550.1cv8.exe или конкретного диапазона портов.Если на компьютере разработчика активно более одного сетевого адаптера (например, физическое подключение, Wi-Fi, активное VPN-соединение или виртуальные сетевые карты VMware/VirtualBox), сервер 1С может запутаться:
Решение: На время отладки отключите все неиспользуемые сетевые адаптеры в сетевых подключениях Windows, завершите сессии VPN, не требующиеся для работы, оставив активным только один сетевой интерфейс, связывающий вас с сервером 1С.
Когда рабочий процесс сервера пытается связаться с Конфигуратором, он часто обращается к нему по сетевому имени компьютера. Если в локальной сети некорректно работает служба DNS или включен протокол IPv6, возникают задержки:
::1 или локальный IPv6-адрес).Решение: Пропишите жесткое соответствие IP-адреса и сетевого имени компьютера разработчика в файле hosts на самом сервере приложений 1С. Также рекомендуется отключить протокол IPv6 в свойствах сетевого подключения на сервере и клиентском ПК, если он не используется в вашей инфраструктуре.
В нагруженных клиент-серверных базах в рамках одного кластера может функционировать несколько рабочих процессов rphost. При этом фоновое задание может запуститься на одном процессе, а сессия Конфигуратора быть привязанной к другому. Перенаправление отладочной информации между процессами под нагрузкой может работать нестабильно.
Решение: На время активной разработки и отладки ограничьте количество рабочих процессов в свойствах локального кластера до одного. Это гарантирует, что и сессия Конфигуратора, и фоновое задание будут выполняться в рамках единого адресного пространства процесса rphost, исключая межпроцессные задержки.
Если конфигурация разработана с использованием Библиотеки Стандартных Подсистем (БСП), мы можем воспользоваться штатным механизмом обхода фонового режима. Разберем по шагам, как запустить отладку в рамках клиентского сеанса:
/CРежимОтладки.Если стандартный параметр запуска по какой-то причине не поддерживается вашей версией БСП, этот механизм можно легко сымитировать непосредственно в коде конфигурации. Рассмотрим пример модификации общего модуля ДлительныеОперации:
// В самом начале функции ВыполнитьВФоне() или аналогичной процедуры БСП
// принудительно переопределим параметры запуска:
ПараметрыВыполнения.ЗапуститьВФоне = Ложь;
ПараметрыВыполнения.ЗапуститьНеВФоне = Истина;
Такой подход заставит систему выполнить алгоритм в текущем сеансе, полностью игнорируя фоновый режим. После завершения отладки не забудьте вернуть исходный код модуля в первоначальный вид. При необходимости тестирования команд без модификации типовых модулей можно использовать инструмент для отладки внешних печатных форм и обработок.
Если победить сетевые ограничения TCP/IP в вашей корпоративной сети не удается (например, строгие политики безопасности запрещают любые входящие подключения на компьютеры пользователей), лучшим решением станет переход на протокол HTTP-отладки.
HTTP-отладка работает по принципу пулинга (Polling): Конфигуратор сам постоянно опрашивает сервер отладки на предмет наличия новых событий, избавляя сервер от необходимости совершать обратные вызовы на ПК разработчика. Соответственно, проблема закрытых входящих портов на локальном компьютере отпадает полностью.
Разберем, как включить HTTP-отладку:
-http в параметрах отладки.1550 сервера, например, http://имя_сервера:1550).Использование HTTP-отладки позволяет полностью нивелировать проблемы с блокировкой портов брандмауэрами, VPN-маршрутизацией и медленным разрешением сетевых имен.