Разработка и Конфигурация · 11 мин
Как отладить фоновое задание в 1С
Как отладить фоновое задание в 1С: настройка отладки фоновых процессов, подключение к сеансу, типичные ошибки и способы проверки результата выполнения.
Фоновое задание в 1С выполняется в отдельном сеансе на сервере, поэтому обычная точка останова в конфигураторе на него не срабатывает. Разработчик ставит точку останова в общем модуле, запускает отладку — а код фонового задания проходит мимо. Это стандартная ситуация: по умолчанию отладчик подключён только к интерактивному сеансу, и фоновые процессы нужно подключать к отладке отдельно.
Существует несколько рабочих способов: включить автоматическое подключение фоновых заданий в настройках отладки, принудительно запустить задание из консоли кода с отладкой, подключиться к уже работающему фоновому сеансу через список активных сеансов или временно заменить фоновое выполнение синхронным вызовом. Выбор зависит от режима работы базы (файловая или клиент-серверная) и от того, запускаете вы задание сами или оно стартует по расписанию.
Почему точка останова не срабатывает в фоновом задании
Когда вы запускаете отладку в конфигураторе, отладчик подключается к конкретному сеансу — тому, в котором работаете вы. Фоновое задание создаёт новый сеанс на сервере (или в отдельном потоке для файловой базы), и этот сеанс не связан с вашим отладочным. Платформа просто не знает, что его нужно останавливать.
Дополнительная сложность — код фонового задания исполняется на сервере. Если в свойствах информационной базы или в параметрах запуска отключена серверная отладка, то даже подключение к фоновому сеансу ничего не даст: серверный код будет выполняться без остановок. Поэтому перед отладкой стоит проверить два условия: разрешена ли отладка на сервере и подключён ли нужный тип сеансов.
Настройки автоматического подключения в конфигураторе
Флаг «Разрешить отладку» в свойствах базы и параметр -debug у сервера
Журнал регистрации: события фонового задания с состоянием «Ошибка»
Подготовка: включение серверной отладки
Для клиент-серверной базы сервер 1С должен быть запущен в режиме отладки. Это параметр -debug в строке запуска агента сервера (для Windows — в параметрах службы «Агент сервера 1С:Предприятия», для Linux — в скрипте запуска srv1cv8). Без этого флага сервер не принимает подключения отладчика вовсе, и никакие настройки конфигуратора не помогут.
В файловой базе всё проще: достаточно запустить конфигуратор с отладкой, оба «сеанса» живут в одном процессе. Но и здесь фоновое задание по умолчанию не подключается — настройку автоматического подключения делать всё равно нужно.
Проверьте также свойства информационной базы: в конфигураторе откройте «Администрирование → Параметры информационной базы» и убедитесь, что отладка не запрещена. В некоторых промышленных базах отладку отключают осознанно — тогда отлаживать придётся на копии.
Способ 1: автоматическое подключение фоновых заданий
Основной способ — настроить конфигуратор так, чтобы он сам подхватывал фоновые сеансы. Откройте меню «Отладка → Автоматическое подключение» и установите флажки напротив «Фоновые задания» (и при необходимости — «HTTP-сервисы», «Веб-сервисы»). После этого любой фоновый процесс, запущенный после включения настройки, попадёт под отладчик.
Теперь поставьте точку останова в общем модуле, который вызывает задание, и запустите его — из интерфейса предприятия, из консоли кода или дождитесь срабатывания регламентного расписания. Как только задание стартует, отладчик остановится на вашей точке.
- 1Убедитесь, что сервер запущен с параметром -debug (для клиент-серверной базы)
- 2В конфигураторе откройте Отладка → Автоматическое подключение и отметьте «Фоновые задания»
- 3Запустите отладку (F5) и поставьте точку останова в коде общего модуля
- 4Запустите фоновое задание из режима предприятия
- 5Дождитесь остановки на точке и пройдите код по шагам (F10/F11)
- 6Проверьте результат: состояние задания и данные, которые оно должно было изменить
Способ 2: подключение к уже работающему фоновому сеансу
Если задание выполняется долго и уже запущено, перезапускать его не обязательно. Откройте «Отладка → Подключение» — конфигуратор покажет список доступных предметов отладки. Найдите среди них сеанс с типом «Фоновое задание» (можно сориентироваться по имени задания и времени начала) и подключитесь кнопкой «Подключить».
Если список пуст, хотя задание точно работает, проверьте кнопку «Настройка» в том же окне — там задаётся фильтр по типам сеансов и по информационной базе. Частая причина «пустого списка» — отладка ищет сеансы не той базы или фоновые задания исключены фильтром.
Учтите ограничение: подключиться можно только к коду, который ещё не выполнен. Если проблемное место уже пройдено, придётся дождаться следующей итерации цикла или перезапустить задание.
Способ 3: замена фонового вызова на синхронный
Для файловой базы или тестовой копии часто быстрее всего временно обойтись без фонового задания. Вместо ФоновыеЗадания.Выполнить("МойМодуль.МояПроцедура", Параметры) вызовите процедуру напрямую: МойМодуль.МояПроцедура(Параметр1). Код выполнится в вашем сеансе, и обычная точка останова сработает сразу.
Удобно оформить это через консоль кода (внешнюю обработку) или через команду «Выполнить» во встроенной обработке. Так вы контролируете параметры вызова и видите результат сразу, без ожидания расписания.
// Вместо фонового запуска временно вызываем напрямую для отладки:
// ФоновыеЗадания.Выполнить("ОбменДанными.ВыполнитьЗагрузку", Параметры);
ОбменДанными.ВыполнитьЗагрузку(Параметры[0]);Способ не подходит, если ошибка связана именно с контекстом фонового сеанса: правами пользователя фонового задания, разделением данных, привилегированным режимом. В таких случаях возвращайтесь к автоматическому подключению.
Сравнение способов отладки
Универсальный вариант, сохраняет реальный контекст фонового сеанса; требует включённой серверной отладки
Подходит для долгих уже запущенных заданий; нельзя отладить код, который уже выполнился
Самый быстрый для разработки на копии; не воспроизводит особенности фонового контекста
Отладка регламентных заданий по расписанию
Регламентное задание — это фоновое задание, которое платформа запускает сама по расписанию. Отлаживается оно так же, через автоматическое подключение, но возникает проблема ожидания: ждать срабатывания расписания неудобно. Решение — в консоли заданий (типовая обработка или раздел «Администрирование → Регламентные и фоновые задания») запустить задание принудительно кнопкой «Выполнить сейчас».
В файловой базе регламентные задания выполняются только при запущенном сеансе, выполняющем обработку заданий (параметр запуска /ExecuteScheduledJobs или отдельно запущенное предприятие). Если задание в файловой базе «не стартует» — сначала проверьте, есть ли процесс, который его обслуживает.
Диагностика через журнал регистрации и состояние задания
Не всегда нужна пошаговая отладка: часто достаточно посмотреть, с чем завершилось задание. Откройте список фоновых заданий («Администрирование → Регламентные и фоновые задания») — там видно состояние («Выполняется», «Завершено», «Ошибка») и текст ошибки. Детали ищите в журнале регистрации, отфильтровав события по фоновому заданию.
Полезный приём — добавить в отлаживаемый код запись в журнал регистрации через ЗаписьЖурналаРегистрации() на ключевых этапах: вход в процедуру, значения параметров, результат запроса. Это особенно ценно, когда ошибка плавающая и воспроизводится только под нагрузкой на рабочем сервере, где отладчик включать нельзя.
Как проверить результат
«Завершено» без текста ошибки
«Ошибка» с описанием исключения
События начала и успешного завершения задания
Записи об ошибках с тем же ключом задания
Документы/регистры изменены как ожидалось
Данные не изменились или изменились частично
Типичные ошибки при отладке фоновых заданий
Чаще всего разработчик забывает включить автоматическое подключение и ждёт остановки, которая никогда не произойдёт. Вторая по частоте причина — сервер без флага -debug: в этом случае не работает ни автоматическое подключение, ни ручное. Третья — точка останова стоит в клиентском коде, а проблемный код выполняется в серверной процедуре общего модуля.
Отдельно выделю ошибку, которая портит данные: отладка на рабочей базе с изменением значений в табло или при пошаговом прохождении транзакции. Фоновое задание часто работает с реальными документами — одно нажатие F10 в неправильном месте может провести документ, который не должен был проводиться. Отлаживайте на копии.
Что важно запомнить
Фоновое задание отлаживается через автоматическое подключение в конфигураторе или подключение к активному сеансу; сервер должен работать в режиме -debug. Для быстрой проверки логики на копии базы удобно заменить фоновый вызов прямым. Всегда проверяйте результат по состоянию задания и журналу регистрации.
Частые вопросы
Почему в списке подключения нет моего фонового задания?
Проверьте три вещи: запущен ли сервер с параметром -debug, не отфильтрованы ли фоновые задания в настройках окна подключения, и то же ли это кластер/база, к которой подключён конфигуратор. Также задание могло уже завершиться — подключаться нужно, пока оно в состоянии «Выполняется».
Можно ли отладить фоновое задание в файловой базе?
Да. В файловой базе фоновое задание выполняется в том же процессе, что и клиентский сеанс, поэтому серверная отладка не нужна. Достаточно включить автоматическое подключение фоновых заданий или временно вызвать процедуру напрямую.
Точка останова стоит, но выполнение проходит мимо. Что делать?
Убедитесь, что код действительно выполняется: добавьте запись в журнал регистрации в начало процедуры. Если записи нет — задание не вызывает этот код (неверное имя метода или параметры). Если запись есть, а остановки нет — проблема в подключении отладчика к фоновому сеансу.
Как отладить задание, которое падает сразу при старте?
Сначала посмотрите текст ошибки в списке фоновых заданий и журнале регистрации — чаще всего там уже есть причина (ошибка в параметрах, права, компиляция модуля). Если причины не видно, поставьте точку останова на первой строке процедуры и запустите задание с включённым автоматическим подключением.
Опасно ли отлаживать фоновые задания на рабочем сервере?
Да. Остановка на точке останова приостанавливает рабочий процесс сервера, что влияет на других пользователей, а изменение данных в отладчике может привести к некорректным проведениям. Используйте копию базы или выделенный тестовый сервер.
Чем отличается отладка регламентного задания от обычного фонового?
Технически — ничем, регламентное задание это тоже фоновое. Разница только в запуске: оно стартует по расписанию платформой, поэтому для отладки его удобно запускать принудительно через список регламентных заданий, не дожидаясь расписания.