Разработка и отладка фоновых заданий в клиент-серверном варианте работы 1С:Предприятие — это классическая задача, которая часто превращается в настоящий квест для программиста. Ситуация, когда конфигуратор упорно игнорирует точку останова в серверном модуле, знакома многим. Мы проанализируем основные причины этой проблемы, начиная от простых настроек и заканчивая специфическими багами конкретных версий платформы, таких как 8.3.20.1674.
Прежде чем приступать к глубокому анализу, давайте убедимся, что сервер 1С вообще запущен в режиме отладки. Рассмотрим, как это проверить. В Windows это делается через реестр. Нам необходимо найти ветку службы 1C:Enterprise 8.3 Server Agent. Обычно путь выглядит так: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent.
Проанализируем параметр ImagePath. В строке запуска обязательно должен присутствовать ключ -debug. Если его нет, отладка на сервере работать не будет в принципе. Важный момент: ключ должен находиться вне кавычек, если путь к исполняемому файлу взят в кавычки. После внесения изменений службу 1С необходимо перезапустить.
Выясним, правильно ли настроен сам Конфигуратор. Для того чтобы отладчик «подхватывал» фоновые задания, недостаточно просто поставить точку останова. Разберем шаги настройки:
Без этой настройки Конфигуратор будет игнорировать новые сеансы, которые создаются сервером для выполнения фоновых задач. Если сеанс фонового задания появляется и исчезает слишком быстро, мы просто не успеем подключиться к нему вручную.
Бывают ситуации, когда все настройки верны, но отладка все равно не работает. Посмотрим на опыт коллег: версия платформы 8.3.20.1674 официально признана проблемной в части механизмов отладки. В этой и некоторых соседних версиях наблюдались сбои, когда флаг -debug игнорировался или соединение между отладчиком и сервером обрывалось без видимых причин.
Проанализируем решение: в данном случае единственным надежным вариантом является обновление платформы до более стабильных релизов (например, ветки 8.3.21 или выше). Если вы столкнулись с тем, что отладка «проскакивает» процедуры, хотя все условия соблюдены, обязательно проверьте номер сборки вашей платформы.
Рассмотрим ситуацию, когда отладка блокируется сетевым экраном (брандмауэром). Отладка в 1С по протоколу TCP использует определенный динамический диапазон портов. Стандартно это порты 1560–1591. Однако, как показывает практика, для фоновых заданий сервер может задействовать и другие порты.
Разберем рекомендации системных администраторов: иногда помогает полное открытие диапазона портов, на которых работает служба ragent, или добавление процесса rphost в исключения брандмауэра. Если вы видите, что сеанс в списке подключений появляется, но точка останова не активна (пустой кружок вместо красного), это явный признак того, что сетевой поток отладки заблокирован.
Фоновое задание может выполняться за доли секунды. Конфигуратор просто не успевает инициализировать соединение с новым сеансом. Чтобы решить эту проблему, мы можем применить небольшую хитрость — добавить программную паузу в начало процедуры фонового задания.
Посмотрим на пример кода, который позволит нам «затормозить» выполнение:
Процедура ВыполнитьРасчетНаСервере(Параметры) Экспорт
// Временный код для отладки
НачалоПаузы = ТекущаяДата();
Пока ТекущаяДата() < НачалоПаузы + 10 Цикл
// Ждем 10 секунд, пока отладчик подключится
КонецЦикла;
// Далее идет основной код
ПроводитьРасчеты();
КонецПроцедуры
Этого времени обычно достаточно, чтобы автоматическое подключение сработало, и вы смогли начать пошаговое выполнение кода.
В современных версиях платформы (начиная с 8.3.20) 1С предлагает новый режим отладки по протоколу HTTP. Он работает стабильнее в сложных сетевых инфраструктурах. Рассмотрим, как его включить. Вместо ключа -debug используется настройка службы с указанием адреса сервера отладки (Debugger Daemon — dbgs).
Если ваша база опубликована на веб-сервере, проверьте файл default.vrd. В нем должен быть блок:
<debug enable="true" url="http://ваш-сервер:порт" />
Использование HTTP-отладки часто снимает проблемы с «пропадающими» точками останова, так как этот протокол более лоялен к настройкам прокси-серверов и брандмауэров.
Напоследок проанализируем еще два важных фактора: кэш и права доступа. Иногда настройки отладки «залипают» в локальных файлах пользователя. Мы рекомендуем выполнить полную очистку кэша на стороне разработчика (удаление папок из %LOCALAPPDATA%\1C\1Cv8).
Также важно выяснить, от чьего имени запущена служба 1С. Если это LocalSystem, у нее могут быть специфические ограничения при взаимодействии с портами. Рекомендуется использовать выделенную доменную учетную запись с правами «Вход в качестве службы».
Подведем итог: отладка фоновых заданий требует согласованной настройки сервера (флаг -debug), конфигуратора (автоматическое подключение) и сети (открытые порты). Если все это не помогает — проверяйте релиз платформы на наличие известных ошибок.