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

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

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

Определение точки входа и запускаемого кода

Перед тем как отлаживать код, выясним, какая именно процедура и с какими параметрами передается на выполнение в фоновый поток. На платформенном уровне запуск фонового задания всегда инициируется методом ФоновыеЗадания.Выполнить(). Первым параметром в этот метод передается имя экспортируемой серверной процедуры в виде строки.

Рассмотрим, как найти место запуска:

  1. Выполним глобальный поиск по конфигурации строки ФоновыеЗадания.Выполнить. Это покажет все прямые вызовы фоновых потоков.
  2. Если конфигурация разработана на базе Библиотеки стандартных подсистем (БСП), длительные процессы обычно вызываются через общий модуль ДлительныеОперации (функции ВыполнитьВФоне или ЗапуститьВыполнениеВФоне). Найдем вызовы этих функций в интересующем нас модуле.
  3. Установим точку останова непосредственно перед вызовом функции запуска фонового задания. В окне «Табло» мы сможем увидеть строковое имя целевой процедуры, имя модуля и структуру передаваемых параметров.
  4. Для мониторинга уже запущенных процессов проанализируем Журнал регистрации с отбором по событиям фоновых заданий либо воспользуемся обработкой «Консоль заданий», где отображаются имя метода, идентификатор сеанса и состояние выполнения.

Отключение фонового режима с помощью параметра РежимОтладки

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

Разберем, как включить этот режим:

  1. В настройках запуска информационной базы в окне запуска 1С (кнопка «Изменить» > «Дополнительные параметры запуска») укажем параметр /C РежимОтладки.
  2. При наличии этого ключа подсистема длительных операций определяет необходимость синхронного выполнения и запускает целевой код напрямую в сеансе пользователя.
  3. Поставим стандартную точку останова в целевой процедуре модуля. Выполнение остановится сразу при входе в алгоритм без необходимости подключения к отдельным процессам.

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


// Временный прямой вызов для пошаговой отладки
ИмяПроцедуры = "МойМодульСервер.ВыполнитьПечатьВФоне";
МойМодульСервер.ВыполнитьПечатьВФоне(ПараметрыПечати, АдресХранилища);

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

Если алгоритм необходимо проверить строго в многопоточном фоновом режиме, настроим конфигуратор для перехвата новых серверных потоков. Начиная с платформы 8.3, рекомендуется использовать протокол отладки по HTTP вместо устаревшего TCP, так как HTTP-отладка стабильнее работает через маршрутизаторы и брандмауэры.

Разберем порядок настройки конфигуратора:

  1. Убедимся, что служба сервера «1С:Предприятия» запущена с флагом отладки (ключ -debug или -http в параметрах службы).
  2. В конфигураторе откроем меню «Отладка» > «Подключение...».
  3. Нажмем кнопку «Настройка автоматического подключения».
  4. Установим флаг «Фоновые задания».
  5. Обратим внимание на поле «Имя пользователя». Если фоновые задания запускаются от системной учетной записи или регламентного пользователя, очистим фильтр по имени пользователя, чтобы отладчик не игнорировал посторонние фоновые сеансы.

Решение проблемы быстро завершающихся заданий

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

Проанализируем практический прием для обхода этой проблемы:

  1. В первой строке запускаемой экспортной процедуры фонового задания временно добавим искусственную паузу с помощью метода Приостановить().
  2. Передадим задержку в 10–15 секунд:

Процедура ВыполнитьПечатьВФоне(ПараметрыПечати, АдресХранилища) Экспорт
    #Если Сервер И Не ВнешнееСоединение Тогда
        Приостановить(15); // Даем отладчику время подключиться к сеансу
    #КонецЕсли
    
    // Основной алгоритм обработки данных
    СформироватьТабличныйДокумент(ПараметрыПечати);
КонецПроцедуры

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

← На главную