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