Отладка фоновых заданий в среде 1С:Предприятие 8.3 часто превращается в непростую задачу. Основная проблема заключается в том, что выполнение кода может прерываться в системных модулях или сторонних процессах, которые не имеют отношения к вашей задаче, либо отладчик и вовсе игнорирует установленные точки останова. В этой статье мы подробно разберем, как настроить среду разработки для эффективной отладки и какие существуют хитрости для перехвата управления в нужный момент.
Когда мы включаем автоматическое подключение к фоновым заданиям, отладчик начинает реагировать на все процессы, происходящие на сервере. Это могут быть задания полнотекстового поиска, мониторинг системы или регламентные операции самой платформы. Чтобы этого избежать, проанализируем настройки подключения.
Перейдем в меню Отладка — Подключение — Настройка автоматического подключения. Если в списке выбран пункт Фоновые задания, конфигуратор будет пытаться «поймать» каждое новое задание. Рекомендуется включать эту опцию непосредственно перед запуском вашего процесса и сразу выключать её после попадания на нужную точку останова. Также убедимся, что не включена опция «Останавливаться по ошибке» в настройках отладки, так как фоновые процессы часто генерируют некритичные исключения, которые прерывают ваш сеанс.
Одним из простых, но эффективных способов заставить систему вести себя более предсказуемо при отладке сложных механизмов (например, обмена данными), является использование специального параметра запуска. Рассмотрим, как его применить:
/РежимОтладки.Этот параметр сообщает системе, что текущий сеанс требует особого внимания со стороны отладчика. В некоторых конфигурациях и версиях платформы это помогает более стабильно фиксировать точки останова в фоновых процессах, инициированных из этого сеанса.
Если ваша конфигурация построена на базе Библиотеки Стандартных Подсистем (БСП), мы можем применить «хитрость», которая на время разработки превратит фоновое задание в обычное выполнение кода «здесь и сейчас». Это самый надежный метод, так как он полностью исключает сетевые задержки и проблемы подключения отладчика к новому серверному сеансу.
Проанализируем функцию ДлительныеОперации.ВыполнитьВФоне(). Именно она отвечает за старт большинства фоновых задач в современных конфигурациях. Чтобы отладить алгоритм внутри задания, мы можем временно изменить логику её работы.
Добавим в начало процедуры или в место формирования параметров следующие строки кода:
ПараметрыВыполнения.ЗапуститьВФоне = Ложь;
ПараметрыВыполнения.ЗапуститьНеВФоне = Истина;
Что это дает? Система, видя эти флаги, не будет порождать новый поток на сервере через ФоновыеЗадания.Выполнить(), а выполнит тот же самый код в контексте вашего текущего сеанса. В этом случае точка останова сработает мгновенно, как в обычной обработке.
Важно: Не забудьте удалить или закомментировать эти строки перед помещением кода в хранилище или передачей заказчику, так как это заблокирует интерфейс пользователя на время выполнения операции в рабочей базе.
Начиная с версии платформы 8.3.14, 1С активно использует протокол HTTP для отладки. Он предоставляет гораздо более гибкие инструменты, чем старый TCP-протокол. Если мы используем HTTP-отладку, нам доступен Фильтр отладки.
Выясним, как настроить фильтр, чтобы игнорировать «мусорные» задания. В окне «Подключение» можно указать конкретного пользователя, под которым запускается фоновое задание, или даже конкретное имя информационной базы. Это позволит отсечь фоновые задания других разработчиков в многопользовательской среде и системные процессы, запускаемые от имени администратора или службы.
Часто программист сталкивается с ситуацией, когда обмен данными или обработка запускается «где-то в недрах системы», и непонятно, в каком именно модуле ставить точку останова. Рассмотрим шаги по идентификации исполняемого кода:
Имя метода. Там будет указан полный путь, например: ОбменДаннымиСервер.ВыполнитьОбменДанными.Посмотрим на технические нюансы работы сервера. Для того чтобы отладка в принципе была возможна, сервер 1С:Предприятия должен быть запущен с ключом отладки. Для протокола TCP это ключ -debug, а для протокола HTTP — ключ -http в строке запуска службы.
Если вы работаете на платформе версии 8.3.20.1674 и выше, рекомендуется по возможности переходить на HTTP-отладку, так как в ней исправлено множество ошибок, связанных с «потерей» серверных вызовов. Если же вы вынуждены использовать TCP, старайтесь не ставить точки останова в общих модулях с установленным флагом Глобальный, так как это может привести к зависанию всего процесса отладки при инициализации сеанса.
Подведем итог: наиболее эффективным методом остается временный перевод фоновой операции в синхронный режим через модификацию ПараметрыВыполнения в БСП, либо точечная настройка автоматического подключения в конфигураторе с использованием фильтров по пользователю.