Фоновые задания 1С — создание и настройка

Как использовать фоновые и регламентные задания для автоматизации задач в 1С 8.3.

📋 Типы заданий

  • Регламентное задание — выполняется по расписанию
  • Фоновое задание — разовый запуск асинхронно

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

  • Обмен данными по расписанию
  • Рассылка email/SMS
  • Расчёт итогов и агрегатов
  • Синхронизация с внешними системами
  • Длительные операции без блокировки интерфейса

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

Шаг 1. Добавление в конфигурацию

  1. Конфигуратор → Общие → Регламентные задания
  2. ПКМ → Добавить
  3. Укажите имя: ОбменСВнешнейСистемой
  4. Выберите метод (общий модуль + процедура)
  5. Настройте расписание

Шаг 2. Создание процедуры

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

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

Расписание задаётся в свойствах регламентного задания или программно:

// Каждый час
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораВТечениеДня = 3600; // секунды

// Каждый день в 23:00
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ВремяНачала = Дата(1, 1, 1, 23, 0, 0);

// Каждый понедельник
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ДниНедели = Новый Массив;
Расписание.ДниНедели.Добавить(1); // 1 = понедельник

Запуск фонового задания вручную

// Простой запуск
ФоновыеЗадания.Выполнить("МойМодуль.МояПроцедура");

// С параметрами
Параметры = Новый Массив;
Параметры.Добавить(Ссылка);
Параметры.Добавить(ДатаНачала);

Задание = ФоновыеЗадания.Выполнить(
    "МойМодуль.МояПроцедура",
    Параметры,
    "Ключ_" + Ссылка.УникальныйИдентификатор(),
    "Обработка документа");

Ожидание завершения

// Запустить и ждать
Задание = ФоновыеЗадания.Выполнить("МойМодуль.МояПроцедура");
Задание.ОжидатьЗавершения();

// Проверить статус
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
    Сообщить("Успешно");
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
    Сообщить("Ошибка: " + Задание.ИнформацияОбОшибке.Описание);
КонецЕсли;

// Ожидание с таймаутом
Задание.ОжидатьЗавершения(60); // 60 секунд

Асинхронный вызов с обратным вызовом

// На клиенте - запуск
&НаКлиенте
Процедура ВыполнитьДолгуюОперацию(Команда)
    
    ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне();
    ПараметрыВыполнения.ОжидатьЗавершение = 0;
    
    Результат = ВыполнитьДолгуюОперациюНаСервере(ПараметрыВыполнения);
    
    ПараметрыОжидания = ДлительныеОперации.ПараметрыОжидания(ЭтотОбъект);
    ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
    
    ДлительныеОперации.ОжидатьЗавершение(Результат, 
        Новый ОписаниеОповещения("ПослеВыполнения", ЭтотОбъект),
        ПараметрыОжидания);
        
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыполнения(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = Неопределено Тогда
        Возврат; // Отменено
    КонецЕсли;
    
    Если Результат.Статус = "Выполнено" Тогда
        ПоказатьОповещениеПользователя("Готово");
    Иначе
        Сообщить("Ошибка: " + Результат.КраткоеПредставлениеОшибки);
    КонецЕсли;
КонецПроцедуры

🛠️ Мониторинг заданий

Консоль кластера → Сеансы → Фоновые задания

Или программно:

// Получить все выполняющиеся
Отбор = Новый Структура("Состояние", 
    СостояниеФоновогоЗадания.Активно);
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);

Для Каждого Задание Из Задания Цикл
    Сообщить(Задание.Наименование + ": " + Задание.Начало);
КонецЦикла;

Нужна автоматизация?

Настрою регламентные задания для обмена данными, рассылок, расчётов по расписанию.

Обсудить задачу →