← Назад к вопросам

Как работают регламентные задания и чем они отличаются от фоновых задач?

2.2 Middle🔥 201 комментариев
#Стандарты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Общее определение

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

Регламентные задания

Назначение

Выполнение операций по расписанию:

  • Закрытие месяца в конце месяца
  • Синхронизация с внешней системой каждый час
  • Очистка архивных данных ночью
  • Расчёт аналитических показателей раз в день

Структура метаданных

// Регламентное задание определяется в конфигурации
// Параметры:
// - Имя: "ЗакрытиеМесяца"
// - Процедура: "МодульПриложение.ЗакрытиеМесяцаПроцедура"
// - Расписание: "0 0 * * 28 *" (в 00:00 28-го числа)
// - Использовать внешнее соединение: Нет/Да
// - Безопасный режим: Да/Нет

Пример регламентного задания

Процедура ЗакрытиеМесяцаПроцедура() Экспорт
    
    Попытка
        ТекДата = ТекущаяДата();
        ДатаЗакрытия = КонецДня(ДатаДобавитьМесяцев(ТекДата, -1));
        
        // Логика закрытия месяца
        ЛогикаЗакрытияМесяца(ДатаЗакрытия);
        ЗаписатьВЖурнал("РегламентныеЗадания", "ЗакрытиеМесяца выполнено");
        
    Исключение
        ЗаписатьВЖурнал("РегламентныеЗадания", ИнформацияОбОшибке().Описание);
    КонецПопытки;
    
КонецПроцедуры

Расписание (CRON)

┌───────── Минута (0-59)
│ ┌───────── Час (0-23)
│ │ ┌───────── День месяца (1-31)
│ │ │ ┌───────── Месяц (1-12)
│ │ │ │ ┌───────── День недели (0-6)
│ │ │ │ │
0 2 * * * – Каждый день в 02:00
0 */6 * * * – Каждые 6 часов
0 0 1 * * – 1-го числа в 00:00
30 10 * * 1-5 – Понедельник-пятница в 10:30

Фоновые задачи

Назначение

Выполнение операций асинхронно:

  • Отправка писем в фоне
  • Генерация больших отчётов
  • Синхронизация данных
  • Обработка очереди задач

Создание и выполнение

// 1. Создаём параметры
ПараметрыЗадачи = Новый Структура;
ПараметрыЗадачи.Вставить("Контрагент", КонтрагентСсылка);
ПараметрыЗадачи.Вставить("Счёт", СчётОсновной);

// 2. Ставим задачу в очередь (не ждём)
ИдентификаторЗадачи = ФоновыеЗадачи.Выполнить(
    "МодульОбработки.ОтправитьСчётПочтой",
    ПараметрыЗадачи,
    "Отправка счёта №" + Номер
);

// 3. Сразу возвращаемся пользователю
Сообщить("Отправка счёта запланирована");

Процедура фоновой задачи

Процедура ОтправитьСчётПочтой(Контрагент, Счёт) Экспорт
    
    // Вызывается в отдельном сеансе асинхронно
    СчётОбъект = Счёт.ПолучитьОбъект();
    ПотребительФиз = Контрагент.ЭлектроннаяПочта;
    
    // Генерируем PDF
    Отчёт = Отчёты.СчётФактура.ПолучитьМакет("Макет1");
    ДанныеОтчёта = Отчёт.Выполнить(СчётОбъект);
    
    // Отправляем почту
    СообщениеПочты = Новый ИнтернетПочтаСообщение;
    СообщениеПочты.Тема = "Счёт на оплату";
    СообщениеПочты.Получатели.Добавить(ПотребительФиз);
    
КонецПроцедуры

Отслеживание результата

// Проверить статус
ЗадачаСведения = ФоновыеЗадачи.ПолучитьСведения(ИдентификаторЗадачи);

Если ЗадачаСведения.Состояние = СостояниеФоновойЗадачи.Выполнена Тогда
    Результат = ЗадачаСведения.ПолучитьРезультат();
    
ИначеЕсли ЗадачаСведения.Состояние = СостояниеФоновойЗадачи.Ошибка Тогда
    Сообщить("Ошибка: " + ЗадачаСведения.ОписаниеОшибки);
КонецЕсли;

Сравнительная таблица

ПараметрРегламентныеФоновые
ЗапускПо расписаниюНемедленно, асинхронно
БлокировкаНетНет
РезультатЛогируетсяМожно получить
ПериодичностьПовторяющиесяОдноразовые
Агент 1СТребуетсяНе требуется
ПримерЕженочное закрытиеОтправка письма

Когда что использовать?

Регламентные задания:

  • Операции по расписанию
  • Перестройка БД
  • Гарантия выполнения

Фоновые задачи:

  • Быстрые операции
  • Асинхронная обработка
  • Нужен результат
  • Очередь обработки

Практический пример: комбинация

// Регламентное задание (раз в день)
Процедура ЕжеДневнаяОбработка() Экспорт
    
    // Находим недосланные счёта
    Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.Счёт ГДЕ Статус = &Чернв");
    Результат = Запрос.Выполнить().Выгрузить();
    
    // Для каждого счёта запускаем фоновую задачу
    Для Каждого Строка Из Результат Цикл
        Параметры = Новый Структура("Счёт", Строка.Ссылка);
        ФоновыеЗадачи.Выполнить(
            "МодульОбработки.ОтправитьСчётАсинхронно",
            Параметры
        );
    КонецЦикла;
    
КонецПроцедуры

Правильное использование обоих механизмов обеспечивает эффективное выполнение длительных операций без блокировки интерфейса.

Как работают регламентные задания и чем они отличаются от фоновых задач? | PrepBro