Разработка и отладка фоновых заданий в 1С — это классическая задача, которая часто превращается в настоящий квест, особенно если сервер работает под управлением операционной системы Linux (например, Debian). Ситуация, когда галочка «Автоматическое подключение» установлена, режим -debug включен, но конфигуратор упорно игнорирует точки останова, знакома многим разработчикам. В этой статье мы подробно разберем, почему это происходит и какие «шаманские» и инженерные методы помогут нам заставить отладчик работать.
Как показывает практика, платформа 1С иногда «теряет» связь с серверными процессами, даже если формально они отображаются как подключенные. Рассмотрим алгоритм действий, который часто выручает в ситуациях, когда настройки верны, но магии не происходит:
Этот способ исправляет внутренний программный сбой платформы, когда конфигуратор перестает получать уведомления от рабочего процесса rphost о прохождении через точку останова.
Если фоновое задание упорно не хочет отлаживаться, давайте упростим задачу. Зачастую код, который выполняется в фоновом задании, можно вынести в отдельную процедуру серверного модуля. Выясним причину, по которой мы не можем отладить его напрямую: часто это связано с контекстом выполнения. Разберем по шагам, как перенести отладку в управляемую среду:
Пример кода вызова в обработке:
&НаСервере
Процедура ВыполнитьКодФЗНаСервере()
// Эмулируем передачу параметров, как в реальном фоновом задании
ПараметрыЗадания = Новый Структура("Организация, Период", Объект.Организация, Объект.Период);
// Вызываем процедуру из серверного модуля напрямую
МойСерверныйМодуль.ВыполнитьДлительнуюОперацию(ПараметрыЗадания);
КонецПроцедуры
Преимущество этого метода: Мы исключаем из цепочки механизм ФоновыеЗадания.Выполнить(), который создает отдельный сеанс. Отладка будет происходить в контексте вашего текущего сеанса, что гарантирует срабатывание точек останова.
Иногда автоматическое подключение не срабатывает из-за того, что фоновое задание выполняется слишком быстро или конфигуратор не успевает «подцепить» новый rphost. Проанализируем ситуацию с помощью искусственной задержки. Для этого нам понадобится объект ЖурналРегистрации и метод Приостановить.
Добавим в начало процедуры фонового задания следующий код:
НомерСеанса = НомерСеансаИнформационнойБазы();
ЗаписьЖурналаРегистрации("Отладка_ФЗ", УровеньЖурналаРегистрации.Информация, , , "Ожидание подключения. Сеанс №" + НомерСеанса);
// Даем себе 60 секунд, чтобы найти сеанс в списке подключений
Приостановить(60);
Теперь наши действия:
Если сервер работает на Linux, проблема часто кроется в сетевых настройках. Рассмотрим подробнее, на что обратить внимание:
/etc/init.d/srv1cv83 или в unit-файле systemd) параметр действительно прописан. Проверить это можно командой ps aux | grep rphost. В строке запуска должен присутствовать флаг -debug./etc/hosts на сервере. В нем должен быть прописан IP-адрес вашего рабочего ПК и его сетевое имя.Начиная с версии 8.3.7, 1С поддерживает отладку по HTTP. Это более современный и стабильный способ, особенно для распределенных сетей и Linux-серверов. Разберем, как его включить:
dbgs (сервер отладки).http://имя_сервера:1557).Использование HTTP-отладки снимает проблему «обратного соединения», когда сервер пытается сам инициировать связь с вашим компьютером. В режиме HTTP и конфигуратор, и сервер обращаются к посреднику (Debugger Storage), что делает отладку фоновых заданий гораздо более стабильной.
Если вы перепробовали всё, но точки останова так и не работают, возможно, дело в «протухшем» кэше отладочных символов. Рассмотрим процесс очистки:
/home/usr1cv8/.1cv8/1C/1cv8/).snccntxt — именно в ней хранятся данные сеансов отладки. Удалите её содержимое.Важный момент: Убедитесь, что у расширения (если код фонового задания находится в нем) не стоит галочка «Безопасный режим». В безопасном режиме отладка может блокироваться платформой автоматически.
Подводя итог, можно сказать, что отладка фоновых заданий — это всегда комбинация правильных системных настроек и понимания того, как платформа управляет сеансами. Если автоматика подводит, всегда используйте метод с внешней обработкой — это сэкономит вам часы времени и позволит сосредоточиться на логике кода, а не на борьбе с инструментарием.