Как отладить фоновое задание в 1С:Предприятие 8.3?

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

При разработке и доработке типовых конфигураций (таких как ЗУП 3, ERP, КА или УТ) разработчики часто сталкиваются с ситуацией: при нажатии кнопки на форме (например, «Заполнить») выполнение уходит в общий модуль ДлительныеОперации и метод ФоновыеЗадания.Выполнить(). Однако точка останова, установленная в целевой экспортной процедуре модуля менеджера или общего модуля, не срабатывает, и программа продолжает работу без остановки.

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

Почему отладчик не останавливается в фоновом задании

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

Запуск длительных операций в фоне реализован для того, чтобы не блокировать интерфейс пользователя: пока тяжелый документ рассчитывается, пользователь может продолжать работу с другими объектами системы.

Способ 1. Настройка автоматического подключения к фоновым заданиям

Штатный и наиболее удобный способ отладки фоновых процедур — включение механизма автоматического перехвата фоновых сеансов отладчиком.

Выполним следующую последовательность действий:

  1. В Конфигураторе откроем главное меню Отладка → Подключение...
  2. В открывшемся окне нажмем кнопку Автоматическое подключение...
  3. В списке типов предметов отладки установим флаг напротив пункта Фоновые задания.
  4. Нажмем ОК и закроем окно настроек подключения.
  5. Установим точку останова внутри вызываемой процедуры (например, в процедуре ПодготовитьДанныеДляЗаполнения модуля менеджера документа).
  6. Запустим операцию в пользовательском сеансе. Конфигуратор автоматически обнаружит запуск фонового сеанса, подключится к нему и остановится на заданной строке кода.

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

Способ 2. Принудительный синхронный запуск длительной операции

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

Рассмотрим, как это сделать без изменения конфигурации:

  1. Установим точку останова в общем модуле ДлительныеОперации перед строкой вызова фонового задания:
    
    Задание = ФоновыеЗадания.Выполнить("РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", ПараметрыЗадания,, НаименованиеЗадания);
    
  2. В момент остановки откроем окно Вычислить выражение (клавиши Shift+F9).
  3. В структуре параметров длительной операции изменим свойство, отвечающее за фоновый запуск (например, установим флаг выполнения без фона или зададим ожидание завершения в 0 секунд).

В этом случае БСП выполнит целевой метод напрямую в текущем серверном вызове, и отладчик гарантированно остановится на точке останова внутри процедуры.

Способ 3. Вызов процедуры через внешнюю обработку

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

Для этого создадим внешнюю обработку, на форму которой вынесем кнопку со следующим кодом:


&НаСервере
Процедура ВыполнитьМетодНаСервере()
    ПараметрыЗаполнения = Новый Структура;
    // Формируем необходимые параметры для процедуры
    Документы.НачислениеЗарплаты.ПодготовитьДанныеДляЗаполнения(ПараметрыЗаполнения);
КонецПроцедуры

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

Технические нюансы и диагностика проблем

Проанализируем типовые причины, по которым автоматическое подключение к фоновым заданиям может не срабатывать:

  1. Клиент-серверный режим и ключ -debug: в клиент-серверном варианте информационной базы служба сервера ragent обязательно должна быть запущена с параметром отладки. Если отладка на сервере выключена, фоновые задания будут выполняться сервером скрытно для Конфигуратора.
  2. Слишком быстрое выполнение метода: если объем данных мал, фоновое задание может отработать за доли секунды до того, как отладчик успеет зарегистрировать сеанс. В качестве временной меры в самое начало фонового метода можно добавить короткую паузу или длительный цикл ожидания на 3–5 секунд.
  3. Экспортность метода: метод модуля менеджера или общего модуля, передаваемый в ФоновыеЗадания.Выполнить(), обязательно должен быть объявлен с ключевым словом Экспорт. Если метод не экспортный, фоновый сеанс аварийно завершится с ошибкой до входа в тело процедуры.
  4. Файловый режим работы: начиная с версии платформы 8.3.5 фоновые задания полноценно поддерживаются в файловых базах, однако запуск фонового сеанса может происходить с небольшой задержкой планировщика платформы.
  5. Сетевые экраны и брандмауэр: при классическом протоколе отладки (TCP) фоновый процесс открывает динамические сетевые порты для связи с Конфигуратором. Локальный брандмауэр операционной системы не должен блокировать соединения между процессами 1cv8.exe, 1cv8c.exe и ragent.exe.
← На главную