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

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

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

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

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

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

Как устроен механизм регламентных заданий

Регламентное задание — это объект метаданных, который связывает расписание с методом прикладного кода. Когда наступает время выполнения, платформа создаёт фоновое задание и вызывает указанную процедуру. Само регламентное задание не содержит логики — оно лишь «будильник», запускающий ваш код.

В клиент-серверном варианте работы исполнением занимается сервер 1С:Предприятия — задания выполняются, даже если ни один пользователь не вошёл в базу. В файловом варианте фоновые задания запускаются только при наличии активного сеанса, который выполняет их в отдельном потоке. Это принципиальная разница: в файловой базе задание «каждую ночь в 3:00» никогда не сработает, если ночью никто не работает в программе.

Подготовка общего модуля и процедуры

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

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

bsl
Процедура ЗагрузитьКурсыВалют() Экспорт
	ЗаписьЖурналаРегистрации("Загрузка курсов", УровеньЖурналаРегистрации.Информация,,,"Начало загрузки");
	// ... логика загрузки ...
	ЗаписьЖурналаРегистрации("Загрузка курсов", УровеньЖурналаРегистрации.Информация,,,"Загрузка завершена");
КонецПроцедуры

Полезная практика — оборачивать тело процедуры в попытку/исключение и записывать ошибку в журнал регистрации с подробным описанием. Без этого диагностика сбоев превращается в гадание: задание «не работает», а причина нигде не зафиксирована.

Создание регламентного задания в конфигураторе

В дереве конфигурации откройте ветку «Общие» → «Регламентные задания» и добавьте новый объект. Заполните ключевые свойства: имя (латиницей, без пробелов), синоним (понятное название для администраторов), метод (путь к процедуре в формате ИмяМодуля.ИмяПроцедуры) и расписание.

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

Порядок создания задания
  1. 1
    Создайте общий серверный модуль с экспортной процедурой без параметров
  2. 2
    Добавьте объект метаданных «Регламентное задание» и укажите метод
  3. 3
    Настройте расписание: периодичность, время, повторы
  4. 4
    Обновите конфигурацию базы данных
  5. 5
    В консоли заданий включите задание и проверьте первый запуск
  6. 6
    Проверьте журнал регистрации на предмет ошибок выполнения

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

Особенности файлового и клиент-серверного режимов

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

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

Проверка выполнения и диагностика ошибок

Основные инструменты контроля — консоль заданий (в типовых конфигурациях раздел «Администрирование» → «Обслуживание» → «Регламентные и фоновые задания») и журнал регистрации. В консоли видно состояние задания, время последнего выполнения и признак ошибки. В журнале регистрации фильтруйте события по имени задания и уровню «Ошибка».

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

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

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

«Выполняется» или пусто, последнее выполнение — свежее время

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

Состояние «Ошибка» или задание долго висит в статусе «Выполняется»

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

Есть информационные записи о начале и завершении

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

Записи с уровнем «Ошибка» или полное отсутствие записей

Результат работы
Норма

Данные появились/обновились (курсы, документы, очередь обмена)

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

Данные не меняются, хотя задание «выполнено успешно»

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

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

Типичные ошибки
01
Размещение процедуры в клиентском или формовом модуле — задание падает с ошибкой «Метод не обнаружен»
02
Использование интерактивных вызовов (Предупреждение, ОткрытьФорму) — в фоновом сеансе это вызывает исключение
03
Отсутствие обработки исключений — любая ошибка обрывает задание без диагностики
04
Слишком частое расписание — накопление фоновых сеансов и рост нагрузки на сервер
05
Задание не отключено в копии базы — дублирование обменов и рассылок
06
Длинные транзакции внутри задания — блокировки таблиц и жалобы пользователей на «зависания»

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

Альтернативы и дополнительные сценарии

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

Сравнение вариантов запуска

Регламентное задание

Стандартный способ для клиент-серверных баз; работает без пользователей; ограничение — требует сервера 1С для автономности

Программный запуск фонового задания

Подходит для разовых отложенных операций из кода; не имеет расписания и требует повторного запуска вручную

Планировщик Windows + пакетный режим

Вариант для файловых баз без активных сеансов; требует хранения пароля и контроля вне 1С

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

Итог

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

Регламентное задание = серверный общий модуль + процедура без параметров + объект метаданных с расписанием. Проверяйте выполнение через консоль заданий и журнал регистрации, обрабатывайте исключения, защищайтесь от конкурентных запусков и обязательно отключайте задания в копиях продуктивной базы.

FAQ

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

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

Можно ли передать параметры в процедуру регламентного задания?

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

Как запустить регламентное задание вручную, не дожидаясь расписания?

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

Что делать, если задание зависло в состоянии «Выполняется»?

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

Опасно ли включать привилегированный режим в модуле задания?

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

Как организовать задания в базе с разделением данных (SaaS)?

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