К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как включить отладку фоновых заданий в 1С

Как включить отладку фоновых и регламентных заданий в 1С: настройка конфигуратора, точки останова, клиент-серверный и файловый режимы, типичные ошибки.

Фоновые задания в 1С выполняются в отдельном сеансе без участия пользователя: обмены данными, расчёт итогов, рассылка отчётов, загрузка курсов валют. Когда такое задание падает с ошибкой или выдаёт неверный результат, стандартная отладка в конфигураторе не помогает — точка останова просто не срабатывает, потому что код выполняется в другом сеансе. Чтобы увидеть, что происходит внутри фонового задания, нужно явно включить его отладку.

Механизм зависит от режима работы информационной базы. В файловом варианте фоновые задания выполняются в отдельном процессе, который можно подключить к отладчику. В клиент-серверном — задания исполняются рабочими процессами сервера 1С, и отладку нужно разрешать на уровне кластера. Ниже разобраны оба сценария, а также приём с принудительной остановкой через встроенный язык.

Все действия описаны для типовых платформ 8.3. Интерфейс в разных релизах может незначительно отличаться, но последовательность шагов сохраняется.

Как работает отладка фоновых заданий и почему она отключена по умолчанию

Отладчик 1С подключается к конкретным сеансам. По умолчанию конфигуратор отлаживает только собственный сеанс разработчика — тот, что запущен из конфигуратора через «Начать отладку». Фоновое задание создаёт отдельный сеанс, который отладчик не видит, пока ему явно не разрешено подключаться к таким сеансам.

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

Шаг 1. Настройте автоматическое подключение сеансов в конфигураторе

Это базовая настройка, обязательная в любом режиме работы. Без неё отладчик не будет подхватывать сеансы фоновых заданий.

Включение автоподключения фоновых заданий
  1. 1
    Откройте конфигуратор и перейдите в меню «Сервис» → «Параметры».
  2. 2
    Перейдите на вкладку «Отладка».
  3. 3
    В группе «Автоматическое подключение» отметьте флажок «Фоновое задание» (при необходимости — также «HTTP-сервисы» и «Web-сервисы»).
  4. 4
    Сохраните настройки кнопкой «ОК».
  5. 5
    Убедитесь, что в меню «Отладка» → «Подключение» в списке доступных предметов отладки появляются сеансы фоновых заданий после их запуска.

После этого при запуске отладки конфигуратор будет автоматически подключаться к каждому новому сеансу фонового задания. Если задание стартует и завершается очень быстро, отладчик может не успеть подключиться — в этом случае поможет точка останова в самом начале отлаживаемого метода или приём с искусственной паузой, описанный ниже.

Шаг 2. Включите отладку на сервере (клиент-серверный режим)

В клиент-серверной базе фоновые задания исполняются рабочими процессами rphost кластера. Чтобы они могли останавливаться на точках останова, сервер должен быть запущен в режиме отладки.

Способ зависит от того, как администрируется ваш сервер. Классический вариант — остановить службу агента сервера 1С и запустить её с ключом -debug. В Windows это делается через реестр (параметр ImagePath службы «Агент сервера 1С:Предприятия») или через повторную регистрацию службы утилитой ragent с нужным флагом. В Linux ключ добавляется в параметры запуска службы.

Альтернатива без перезапуска службы — включить отладку для конкретного кластера через консоль администрирования серверов 1С: откройте свойства кластера и установите признак разрешения отладки, при необходимости указав протокол (TCP или HTTP). Этот способ удобнее, когда нет доступа к самой службе, но права администратора кластера всё равно потребуются.

Шаг 3. Отладка в файловом режиме

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

Для ручной проверки удобнее всего запустить фоновое задание программно из пользовательского сеанса через метод ФоновыеЗадания.Выполнить, указав имя нужной процедуры общего модуля. Сразу после старта отладчик подключится к новому сеансу и остановится на точке останова.

1c
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(Параметр1);
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ОтлаживаемаяПроцедура", ПараметрыЗадания, , "Отладка задания");

Учтите ограничение: процедура, вызываемая фоновым заданием, должна располагаться в общем модуле с признаком «Сервер» и не должна быть клиентской. Если метод находится в модуле объекта или форме, задание завершится с ошибкой ещё до входа в код.

Шаг 4. Поставьте точки останова и проверьте срабатывание

Откройте общий модуль с кодом задания и установите точку останова на первой исполняемой строке. Затем запустите отладку (F5) и инициируйте выполнение задания — вручную через код, через консоль заданий или дождавшись срабатывания расписания регламентного задания.

Если точка останова сработала, дальше всё как в обычной отладке: пошаговое выполнение, просмотр переменных, табло, стек вызовов. Учтите, что фоновое задание не имеет пользовательского интерфейса — попытка открыть форму или вызвать модальный диалог приведёт к ошибке, и это само по себе частая причина падения заданий.

Контрольные точки

Как проверить, что отладка работает

Список подключённых предметов отладки («Отладка» → «Подключение»)
Норма

В списке виден сеанс с типом «Фоновое задание»

Тревожный признак

Сеанс задания отсутствует — не включено автоподключение

Срабатывание точки останова
Норма

Выполнение останавливается в общем модуле

Тревожный признак

Задание завершается, точка не срабатывает — сервер не в режиме отладки

Состояние задания в консоли заданий
Норма

Задание активно во время остановки на точке

Тревожный признак

Задание завершилось с ошибкой до входа в отлаживаемый код

Альтернатива: принудительная остановка через код

Когда настроить серверную отладку нельзя (нет прав администратора, продуктивный контур), используйте приём с искусственным циклом ожидания. В начало отлаживаемой процедуры временно вставляется цикл, который крутится, пока отладчик не подключится к сеансу вручную через «Отладка» → «Подключение» и не изменит значение переменной.

1c
Ожидание = Истина;
Пока Ожидание Цикл
КонецЦикла;
// Подключитесь к сеансу через Отладка → Подключение,
// затем в табло установите Ожидание = Ложь

Этот способ работает и в файловом, и в клиент-серверном режиме, но требует временного изменения кода. После завершения отладки вставку обязательно удалите — бесконечный цикл в рабочем коде заблокирует выполнение задания.

Типичные ошибки и ограничения

Типичные ошибки
01
Точка останова в клиентском модуле — фоновое задание выполняется на сервере, клиентский код в нём не исполняется.
02
Забыт флаг -debug на сервере — в клиент-серверном режиме без него отладка заданий невозможна, даже если конфигуратор настроен верно.
03
Отладка на продуктивном сервере без возврата настроек — снижение производительности и риск подключения к чужим сеансам.
04
Попытка открыть форму или вызвать Предупреждение() в фоновом задании — задание падает, так как у него нет интерфейса.
05
Короткое задание без точки останова в начале — отладчик не успевает подключиться, задание завершается до остановки.

Ещё одно ограничение касается прав: подключение к сеансу фонового задания требует права «Отладка» у текущего пользователя, а в клиент-серверном режиме — иногда и административных прав на кластер, если сеанс запущен под другим пользователем.

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

Итог

Что важно запомнить

Отладка фоновых заданий включается в два этапа: автоподключение сеансов «Фоновое задание» в параметрах конфигуратора и разрешение отладки на сервере для клиент-серверного режима. Точки останова ставятся в серверных общих модулях. Работайте в тестовом контуре и возвращайте настройки после завершения.

Частые вопросы

Почему точка останова в фоновом задании не срабатывает?

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

Можно ли отладить регламентное задание, не дожидаясь расписания?

Да. Вызовите метод обработчика регламентного задания вручную через ФоновыеЗадания.Выполнить из внешней обработки или консоли кода. В файловом режиме также можно принудительно запустить выполнение регламентных заданий из пользовательского сеанса.

Нужно ли перезапускать сервер 1С для включения отладки?

При добавлении ключа -debug к службе агента — да, службу придётся перезапустить, что разорвёт все сеансы. Альтернатива — включить отладку в свойствах кластера через консоль администрирования, для этого перезапуск не требуется, но нужны права администратора кластера.

Как отладить задание, если нет доступа к настройкам сервера?

Используйте приём с циклом ожидания в начале процедуры: подключитесь к сеансу задания вручную через «Отладка» → «Подключение» и снимите флаг ожидания через табло. Либо воспроизведите логику в файловой копии базы, где серверная настройка не нужна.

Почему фоновое задание падает именно при отладке?

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

Влияет ли режим отладки на производительность сервера?

Да, работа сервера с разрешённой отладкой замедляет выполнение кода и увеличивает нагрузку. Поэтому на продуктивных контурах режим отладки включают только на время диагностики и обязательно отключают после.