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