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

Администрирование · 11 мин

Как отладить регламентное задание в 1С

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

Регламентное задание в 1С выполняется в фоновом сеансе, поэтому поставить точку останова в конфигураторе и дождаться срабатывания «само по себе» не получится: отладчик по умолчанию подключается только к клиентским сеансам. Из-за этого типичная ситуация выглядит так — код обработчика написан, задание по расписанию стартует, но результат отсутствует или появляется ошибка, которую видно только в журнале регистрации.

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

Ниже разобраны все три способа с конкретными настройками, признаками успешной отладки и типичными ошибками, из-за которых точка останова «не ловится».

Почему регламентное задание не останавливается на точке останова

Обработчик регламентного задания исполняется не в сеансе пользователя, а в отдельном фоновом сеансе, который платформа создаёт на сервере (или в файловой базе — в отдельном процессе). Отладчик конфигуратора по умолчанию подключается только к тем типам сеансов, которые отмечены в настройках подключения, и фоновые задания в этот список часто не входят.

Вторая причина — отладка на сервере может быть выключена. В клиент-серверном варианте сервер 1С должен быть запущен с ключом -debug (для Windows-службы агента это параметр в реестре в строке запуска службы, для Linux — параметр скрипта запуска). Если сервер стартовал без этого ключа, ни одна точка останова на серверном коде не сработает, а обработчик регламентного задания выполняется именно на сервере.

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

Точка останова не срабатываетФоновый сеанс не подключён к отладке

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

Задание не появляется в списке фоновыхЗадание выключено или расписание не наступило

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

Сеанс есть, но ошибка сразуИсключение до точки останова

Журнал регистрации по событию фонового задания

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

Откройте конфигуратор, перейдите в меню Отладка → Подключение. В окне подключения нажмите кнопку настройки автоматического подключения и отметьте типы сеансов «Фоновые задания» (в файловом варианте) и «Фоновые задания на сервере» (в клиент-серверном). После этого каждый новый фоновый сеанс будет автоматически подхватываться отладчиком.

Дополнительно проверьте Отладка → Настройка: для клиент-серверной базы должен быть выбран режим отладки «На сервере 1С:Предприятия» (или «На сервере и в клиентском приложении»). Если выбрано «В клиентском приложении», серверный код обработчика останется вне досягаемости.

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

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

Ждать срабатывания по расписанию неудобно: интервал может быть большим, а окно отладки — ограниченным. Удобнее запустить задание вручную. Для этого используют консоль заданий — типовую обработку с диска ИТС или встроенные инструменты некоторых конфигураций (например, раздел администрирования в БСП-конфигурациях содержит «Регламентные и фоновые задания»).

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

Если консоли заданий нет, можно временно изменить расписание на «каждую минуту» либо запустить фоновое задание программно из внешней обработки:

bsl
ФоновыеЗадания.Выполнить("ИмяРегламентногоЗадания", Новый Массив, Новый УникальныйИдентификатор, "Отладка");

Метод ФоновыеЗадания.Выполнить создаёт разовое фоновое задание с указанным методом — оно тоже подхватывается отладчиком при включённом автоподключении.

Порядок действий
  1. 1
    В конфигураторе: Отладка → Подключение → включить автоподключение фоновых заданий
  2. 2
    Убедиться, что сервер запущен с ключом -debug (для клиент-серверной базы)
  3. 3
    Поставить точку останова в первой строке обработчика регламентного задания
  4. 4
    Запустить задание принудительно через консоль заданий или ФоновыеЗадания.Выполнить
  5. 5
    Дождаться остановки в отладчике и пройти код по шагам
  6. 6
    Проверить результат в журнале регистрации и по данным базы

Отладка без сервера: вынос логики во внешнюю обработку

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

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

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

Сравнение вариантов

Отладка фонового сеанса

Точное воспроизведение условий выполнения. Требует сервер с ключом -debug и прав на отладку

Вызов из внешней обработки

Быстро и без настройки сервера. Не ловит ошибки, специфичные для фонового контекста

Логирование в журнал регистрации

Работает всегда, подходит для анализа ошибок на рабочей базе. Не заменяет пошаговую отладку

Диагностика через журнал регистрации

Когда поймать момент отладки не удаётся, основной источник информации — журнал регистрации (в конфигураторе: Администрирование → Журнал регистрации; в режиме предприятия типовых конфигураций — одноимённый пункт в разделе администрирования).

Отфильтруйте журнал по событию фонового задания и по уровню «Ошибка». Для каждого запуска видны время начала и окончания, состояние (выполняется, завершено, аварийно завершено) и текст исключения, если выполнение упало. Текст ошибки с номером строки модуля часто позволяет найти проблему без отладчика вовсе.

Для долгих или периодических проблем добавьте в обработчик собственное логирование через ЗаписьЖурналаРегистрации: фиксируйте входные параметры, ключевые этапы и результат. Это единственный способ диагностики на рабочей базе, где отладку включать нельзя.

bsl
ЗаписьЖурналаРегистрации("ОбменДанными.Запуск", УровеньЖурналаРегистрации.Информация, , , "Начало выполнения, параметр: " + Строка(Параметр));

Типичные ошибки при отладке регламентных заданий

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

Вторая группа ошибок связана с контекстом: обработчик пытается открыть форму, вызвать Вопрос() или обратиться к данным, недоступным служебному пользователю фонового сеанса. Такой код в интерактивной отладке через внешнюю обработку работает нормально, а в фоне падает — это классический признак того, что нужна именно отладка фонового сеанса.

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

Типичные ошибки
01
Не включено автоподключение фоновых заданий — точка останова игнорируется
02
Сервер запущен без ключа -debug — серверный код недоступен отладчику
03
Вызов модальных окон и форм в обработчике — падение только в фоновом режиме
04
Отладка на рабочей базе в рабочее время — остановленный сеанс блокирует регламентные процессы
05
Заблокированное после сбоя задание не разблокировано — повторные запуски не выполняются

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

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

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

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

Как проверить результат

Состояние фонового задания
Норма

Завершено без ошибок

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

Аварийно завершено или зависло в состоянии «Выполняется»

Журнал регистрации
Норма

Нет новых записей уровня «Ошибка» по заданию

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

Исключения с текстом ошибки в момент запуска

Данные базы
Норма

Ожидаемые объекты созданы или изменены

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

Данные не изменились при «успешном» завершении

Итог

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

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

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

Можно ли отладить регламентное задание в файловой базе?

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

Почему задание выполняется, но отладчик не останавливается?

Проверьте три вещи: включено ли автоподключение фоновых заданий в окне «Отладка → Подключение», запущен ли сервер с ключом -debug (для клиент-серверной базы) и стоит ли точка останова в том коде, который реально выполняется, — например, обработчик может завершаться раньше из-за условия в начале процедуры.

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

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

Задание аварийно завершилось и больше не запускается. Что делать?

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

Можно ли отлаживать на рабочей базе без риска?

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

Чем отличаются регламентное и фоновое задание?

Регламентное задание — это объект метаданных с расписанием и обработчиком; оно описывает, что и когда должно выполняться. Фоновое задание — конкретный экземпляр выполнения: платформа создаёт его при каждом срабатывании расписания или при программном вызове ФоновыеЗадания.Выполнить. Отлаживается именно фоновый сеанс.