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