Фоновые задания 1С — создание и настройка
Как использовать фоновые и регламентные задания для автоматизации задач в 1С 8.3.
📋 Типы заданий
- Регламентное задание — выполняется по расписанию
- Фоновое задание — разовый запуск асинхронно
Когда использовать:
- Обмен данными по расписанию
- Рассылка email/SMS
- Расчёт итогов и агрегатов
- Синхронизация с внешними системами
- Длительные операции без блокировки интерфейса
Создание регламентного задания
Шаг 1. Добавление в конфигурацию
- Конфигуратор → Общие → Регламентные задания
- ПКМ → Добавить
- Укажите имя:
ОбменСВнешнейСистемой - Выберите метод (общий модуль + процедура)
- Настройте расписание
Шаг 2. Создание процедуры
// Общий модуль, серверный, с повторным использованием = нет
Процедура ВыполнитьОбменСВнешнейСистемой() Экспорт
Попытка
// Ваша логика
ВыгрузитьДанные();
ЗагрузитьДанные();
ЗаписьЖурналаРегистрации("Обмен",
УровеньЖурналаРегистрации.Информация, , ,
"Обмен выполнен успешно");
Исключение
ЗаписьЖурналаРегистрации("Обмен",
УровеньЖурналаРегистрации.Ошибка, , ,
ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Настройка расписания
Расписание задаётся в свойствах регламентного задания или программно:
// Каждый час Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ПериодПовтораВТечениеДня = 3600; // секунды // Каждый день в 23:00 Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ВремяНачала = Дата(1, 1, 1, 23, 0, 0); // Каждый понедельник Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ДниНедели = Новый Массив; Расписание.ДниНедели.Добавить(1); // 1 = понедельник
Запуск фонового задания вручную
// Простой запуск
ФоновыеЗадания.Выполнить("МойМодуль.МояПроцедура");
// С параметрами
Параметры = Новый Массив;
Параметры.Добавить(Ссылка);
Параметры.Добавить(ДатаНачала);
Задание = ФоновыеЗадания.Выполнить(
"МойМодуль.МояПроцедура",
Параметры,
"Ключ_" + Ссылка.УникальныйИдентификатор(),
"Обработка документа");
Ожидание завершения
// Запустить и ждать
Задание = ФоновыеЗадания.Выполнить("МойМодуль.МояПроцедура");
Задание.ОжидатьЗавершения();
// Проверить статус
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Сообщить("Успешно");
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
Сообщить("Ошибка: " + Задание.ИнформацияОбОшибке.Описание);
КонецЕсли;
// Ожидание с таймаутом
Задание.ОжидатьЗавершения(60); // 60 секунд
Асинхронный вызов с обратным вызовом
// На клиенте - запуск
&НаКлиенте
Процедура ВыполнитьДолгуюОперацию(Команда)
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне();
ПараметрыВыполнения.ОжидатьЗавершение = 0;
Результат = ВыполнитьДолгуюОперациюНаСервере(ПараметрыВыполнения);
ПараметрыОжидания = ДлительныеОперации.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ДлительныеОперации.ОжидатьЗавершение(Результат,
Новый ОписаниеОповещения("ПослеВыполнения", ЭтотОбъект),
ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыполнения(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат; // Отменено
КонецЕсли;
Если Результат.Статус = "Выполнено" Тогда
ПоказатьОповещениеПользователя("Готово");
Иначе
Сообщить("Ошибка: " + Результат.КраткоеПредставлениеОшибки);
КонецЕсли;
КонецПроцедуры
🛠️ Мониторинг заданий
Консоль кластера → Сеансы → Фоновые задания
Или программно:
// Получить все выполняющиеся
Отбор = Новый Структура("Состояние",
СостояниеФоновогоЗадания.Активно);
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
Сообщить(Задание.Наименование + ": " + Задание.Начало);
КонецЦикла;
Нужна автоматизация?
Настрою регламентные задания для обмена данными, рассылок, расчётов по расписанию.
Обсудить задачу →