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