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