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