В конфигурации 1С:ERP Управление предприятием 2 иногда возникает необходимость выполнять определенные периодические (возможно и однократные) действия в соответствии с расписанием или асинхронно. Для реализации такой потребности предназначен специальный механизм заданий в системе.
Механизм заданий позволяет решать такие возможности как выполнение заданных действий по расписанию, управление заданиями, выполнение вызова определенной процедуры без ожидания ее завершения, то есть асинхронно, ожидание завершения одного или нескольких заданий и т.д.
В основе механизма заданий лежат следующие составляющие:
- фоновые задания;
- метаданные регламентных заданий;
- регламентные задания;
- планировщик заданий.
Регламентное и фоновое задание: в чем отличия?
Определимся в терминологии и в том, чем отличаются фоновые задания от регламентных.
Фоновые задания предназначены для выполнения прикладных задач асинхронно. Реализуются они средствами встроенного языка. Другими словами, фоновые задания – это набор действий в системе, которые исполняются невидимо для пользователя. Выполнение фоновых заданий не влияет на работу пользователя. Увидеть выполнение фоновых заданий можно с помощью журнала регистрации.
Регламентные задания предназначены для выполнения прикладных задач по расписанию. Регламентные задания хранятся в информационной базе. Экземпляры регламентных заданий создаются на основе метаданных, определяемых в конфигурации. Фактическое выполнение регламентного задания осуществляется с помощью фонового задания.
Фоновое задание, в свою очередь, запускается планировщиком заданий. Другими словами, это некоторый инструмент, который располагается внутри конфигурации и определяет необходимость выполнения прикладной задачи согласно заданному расписанию. На основании регламентного задания появляется фоновое задание.
Расписание регламентного задания определяет, в какие моменты времени нужно выполнять связанный с регламентным заданием метод.
Планировщик заданий позволяет планировать выполнения регламентных заданий. Планировщик периодически проверяет, соответствует ли текущая дата и время расписанию регламентного задания. Если соответствует, планировщик назначает такое задание на выполнение и создает фоновое задание.
Создание фоновых заданий
Фоновые задания как отдельный инструмент удобно использовать для выполнения сложных вычислений, когда результат вычисления может быть получен через продолжительное время. Механизм заданий позволяет выполнять такие вычисления асинхронно, то есть не останавливая работу пользователя.
Создание фоновых заданий независимо от регламентных заданий реализуется средствами встроенного языка.
Рассмотрим небольшой пример, как можно запрограммировать выполнение длительной операции с помощью фонового задания.
Не будем вдаваться в подробности, какая именно продолжительная операция будет выполняться. Предположим, что это сложные вычисления, длительность которых составит 300 сек. Смоделируем подобную ситуацию для демонстрации работы фонового задания.
В программе в режиме Конфигуратор создадим расширение и добавим обработку ВыполнениеДлительнойОперации. На форму обработки добавим две кнопки ВыполнитьОперацию и ВыполнитьОперациюАсинхронно.
Для выполнения асинхронных операций в 1С:Предприятие 8 применяются фоновые задания, у которых имеется свой менеджер МенеджерФоновыхЗаданий. У этого объекта есть метод Выполнить, с помощью которого запускается фоновое задание.
Создадим не глобальный общий модуль, который может быть выполнен на сервере.
В него добавим нашу экспортную процедуру ДлительнаяОперация(). Предположим, что в этой процедуре выполняется ряд сложных вычислений.
В модуле формы определим обработчики событий кнопок. Для кнопки ВыполнитьДлительнуюОперациюАсинхронно определим выполнение фонового задания.
Запустим программу в режиме Предприятие и проверим работу длительных операций.
Если нажимаем кнопку Выполнить длительную операцию, то операция выполняется, а пользовательский интерфейс на 300 секунд блокируется.
Если нажимаем кнопку Выполнить длительную операцию асинхронно, то пользовательский интерфейс не блокируется, программный код выполняется параллельно. В том, что программный код асинхронно выполняется, можно убедиться, например, проверив журнал регистрации.
Рисунок 6 — Выполнение длительной операции асинхронно с результатом выполнения в журнале регистрации
Создание и настройка регламентных заданий
Внутри системы в режиме 1С:Предприятие полный перечень регламентных и фоновых заданий можно найти, перейдя в раздел НСИ и администрирование → Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания.
В форме списка регламентных и фоновых заданий возможно управление заданиями.
На первой вкладке Регламентные задания содержится список заданий. В списке отображается наименование, состояние и дата окончания регламентного задания. Список содержит определенные в конфигурации регламентные задания.
Зелеными флажками слева в списке отмечены задания, которые Включены и должны выполняться.
В форме возможно редактировать расписание регламентных заданий, запускать фоновые задания по их выполнению, анализировать историю выполнения фоновых заданий.
На второй вкладке Фоновые задания расположен список фоновых заданий.
В этом списке можно контролировать выполнение фоновых заданий. Для контроля есть следующие инструменты: отбор по состоянию (Выполнено, Завершено с ошибками, Отменено, Выполняется), период выполнения заданий, отбор фоновых заданий по интересующему регламентному заданию. Также в этом списке можно отменить выполнение фонового задания, открыть его для просмотра, перейти в журнал регистрации для анализа, обновить список заданий на форме.
Для того чтобы добавить новое регламентное задание, нужно в режиме Конфигуратор описать новый объект метаданных Регламентные задания и выполнить его настройку.
Рассмотрим небольшой пример создания и настройки нового регламентного задания. Предположим, что нам нужно каждый день выгружать остатки товаров на сайт.
Откроем конфигурацию в режиме Конфигуратор и добавим новое регламентное задание ВыгрузкаОстатковНаСайт. Для этого в ветке Общие дерева конфигурации в ветке Регламентные задания нужно выполнить команду Добавить.
Далее настроим свойства нашего регламентного задания.
В поле Имя метода необходимо выбрать процедуру общего модуля, которая будет выполнять выгрузку остатков на сайт. Регламентное задание можно отключать или включать по необходимости. Для этого в палитре свойств устанавливается или снимается флаг Использование. Флаг Предопределенное определяет, является ли данное регламентное задание предопределенным. Предопределенные регламентные задания запускаются автоматически. Также можно указать количество повторов и интервал между ними при аварийном завершении.
Далее требуется задать расписание для задания. Перейдем по ссылке Расписание → Открыть и зададим расписание. Например, установим, что выгрузку следует выполнять каждый день один раз в день с 11:30.
Сохраним все изменения, обновим конфигурацию и запустим в режиме Предприятие, чтобы проверить работу задания.
Откроем список регламентных заданий: задание выполнено по расписанию.
Любым регламентным заданием можно управлять в пользовательском режиме. Команда Выполнить сейчас позволяет выполнить регламентное задание в текущий момент времени. По кнопке Настроить расписание можно изменить расписание. Поменяем расписание нашего нового задания в пользовательском режиме.
Расписание заданий
Рассмотрим на нашем примере, какие бывают виды расписаний для регламентных и фоновых заданий. Откроем для изменения расписание задания Выгрузка остатков на сайт.
На первой вкладке Общие указывается дата начала и дата окончания, а также периодичность повторений в днях.
На вкладке Дневное устанавливается время начала выполнения задачи, а также конечное время и время, после которого необходимо закончить его выполнение. Периодичность повторения и наличие пауз в выполнении прописывается в секундах. В нашем случае поменяем дневное расписание: установим время начала 12:00.
Недельное расписание – устанавливаются отметки тех дней недели, в которые будут выполняться данные задачи. Также нужно указать, сколько раз они будут повторяться.
Месячное расписание – флажками отмечают месяцы, в которые надо запускать задания.
Проверим сохраненные изменения расписания. Зайдем в список регламентных и фоновых заданий. В назначенное время задание выполнено.
Особенности выполнения регламентных и фоновых заданий
Механизмы выполнения фоновых заданий имеют некоторые различия, которые зависят от того, в каком окружении исполняется фоновое задание.
Файловый вариант
Фоновые и регламентные задания выполняются последовательно клиентскими приложениями или расширением веб-сервера на том клиентском приложении, которое инициировало запуск фонового задания.
Для выполнения регламентных заданий по расписанию необходимо наличие выделенного клиентского сеанса. То есть необходимо создать выделенный клиентский процесс, который будет заниматься выполнением фоновых заданий.
Клиент-серверный вариант
В клиент-серверном варианте запуск регламентных заданий происходит автоматически, для выполнения фоновых заданий используется планировщик заданий. Он физически находится в менеджере кластера. Планировщик использует наименее загруженные рабочие процессы для выполнения находящихся в очереди фоновых заданий.
В клиент-серверном варианте имеется возможность блокировки выполнения регламентных заданий. Блокирование выполнения регламентных заданий происходит, например, с помощью установки блокировки в консоли кластера или из встроенного языка.
Мобильное приложение
Фоновые задания выполняются последовательно мобильным приложением. На мобильном устройстве не поддерживаются регламентные задания.
Материал подготовлен в конфигурации «1C:ERP» 2.5.15.40; версия платформы – 8.3.23.1688.
консультанта или программиста 1С?