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

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

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

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

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

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

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

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

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

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

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

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

Ключевые свойства объекта:

  • Метод — имя экспортной процедуры в общем модуле в формате ИмяМодуля.ИмяПроцедуры;
  • Использование — включено ли задание; выключенное задание не запускается;
  • Предопределённое — задание поставляется с конфигурацией и существует всегда; непредопределённые создаются программно;
  • Количество повторов при аварийном завершении и интервал повтора — поведение при ошибке;
  • Интервал перезапуска — защита от зависаний.

Для типовых конфигураций на БСП часть заданий уже существует и настраивается через раздел «Администрирование → Регламентные и фоновые задания». Свои задания лучше добавлять через расширение, чтобы не снимать конфигурацию с поддержки.

Написание процедуры-обработчика

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

Пример минимального обработчика:

// Общий модуль РассылкаОтчетовСервер

Процедура ОтправитьЕжедневныйОтчет() Экспорт

ЗаписьЖурналаРегистрации("Рассылка отчетов",

УровеньЖурналаРегистрации.Информация, , ,

"Начало выполнения регламентного задания");

Попытка

// Основная логика: формирование и отправка отчёта

СформироватьИОтправитьОтчет();

Исключение

ЗаписьЖурналаРегистрации("Рассылка отчетов",

УровеньЖурналаРегистрации.Ошибка, , ,

ОписаниеОшибки());

ВызватьИсключение;

КонецПопытки;

КонецПроцедуры

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

bsl
// Программный запуск вне очереди (для теста)
ФоновыеЗадания.Выполнить("РассылкаОтчетовСервер.ОтправитьЕжедневныйОтчет");

Настройка расписания

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

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

Для программного управления расписанием используется объект РасписаниеРегламентногоЗадания — его можно заполнить кодом и сохранить методом Записать() у объекта задания.

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

Отладка и проверка выполнения

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

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

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

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

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

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

Последнее фоновое задание завершено без ошибки

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

Состояние «Завершено аварийно» или задание «висит» в выполнении

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

Записи о начале и успешном окончании

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

Записи с уровнем «Ошибка» и описанием исключения

Прикладной результат
Норма

Письма отправлены, данные загружены, записи обработаны

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

Задание отработало, но целевых изменений в данных нет

Типичные ошибки и ограничения

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

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

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

Типичные ошибки
01
Обработчик в клиентском модуле — задание падает сразу при вызове метода
02
Интерактивные вызовы (Предупреждение, ОткрытьФорму) в коде — аварийное завершение фонового сеанса
03
Слишком частое расписание — пересечение запусков, блокировки и дубли данных
04
Нет записи в журнал регистрации — при сбое невозможно понять причину
05
Тяжёлое задание в рабочие часы — замедление работы всех пользователей

Права, безопасность и мониторинг

Фоновое задание выполняется от имени пользователя, указанного в свойстве «Имя пользователя» задания, либо с полными правами, если пользователь не задан. Задавайте отдельного служебного пользователя с минимально необходимыми правами — это снижает риск при ошибке в коде и упрощает аудит.

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

FAQ

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

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

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

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

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

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

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

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

Задание зависло в состоянии «Выполняется» — что делать?

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

Итог

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

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