Получить консультацию

Регламентные и фоновые задания в 1С 8.3. Пример настройки

Механизм регламентных и фоновых заданий позволяет выполнять определенные задачи по расписанию. В данной статье я на примере записи лога в регистр сведений покажу, как можно настроить регламентные и фоновые задания. Ну и без теории, конечно же, не обойдется! 🙂

Содержание

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

Регламентные задания – это отдельный механизм платформы, позволяющий автоматически выполнять какие-то действия по заданному расписанию. Регламентные задания можно создать и настроить в конфигураторе, в ветке метаданных “Общие”. На основе добавленных в конфигураторе регламентных заданий можно средствами языка 1С создавать отдельные экземпляры регламентных заданий с разными настройками, которые будут храниться в информационной базе.

Фоновые задания – это объекты языка 1С, которые служат для асинхронного выполнения прикладных задач. Они запускаются в отдельных системных сеансах, могут порождать подчиненные фоновые задания, и тем самым позволяют реализовать параллельную обработку данных.

Регулярно встречаю тиражируемую с сайта на сайт информацию, что фоновые задания  – это объект, порождаемый регламентными заданиями. Это не так. Фоновые задания действительно могут создаваться на основе регламентных. Но могут быть созданы и полностью независимо при помощи встроенного языка.

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

Разобраться с регламентными заданиями проще всего на примере, поэтому давайте перейдем к практике! Вне зависимости от того, клиент-серверный вариант базы, или файловый, последовательность действий будет одна и та же. Об особенностях файлового режима смотрите в конце данной статьи.

В конфигураторе откроем ветку метаданных Общее, перейдем к пункту Регламентные задания, и добавим новое задание. Пусть наше задание просто добавляет запись в регистр сведений “ЛогРеглЗадания”. Код, который выполняет запись, не принципиален, и рассматривать его в данной статье мы не будем.

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

В случае, если регламентное задание завершится с ошибкой, платформа предусматривает возможность повторной попытки выполнить это задание. Например, мы можем пытаться связаться с внешним интернет-сайтом, и в случае, если он не отвечает с первого раза, выполнить еще несколько попыток – на случай перебоев в сетевом соединении.

Количество повторов при аварийном завершении – этот параметр указывает платформе, сколько раз вызвать регламентное задание в случае неудачи, в рамках одного запуска по расписанию. Если за указанное количество повторов регламентное задание так и не завершилось успехом, его выполнение прекращается, но следующий запуск по расписанию снова будет снова предусматривать возможность повторов.

Интервал повтора при аварийном завершении – время в секундах, через которое платформа будет пытаться повторно выполнить регламентное задание.

Как это работает? Рассмотрим на примере. Мы настроили расписание задания – каждый день, каждый час. Количество попыток 2, интервал – 30 секунд. Предположим, задание прервалось по ошибке. Платформа через 30 секунд попробует снова, и если будет ошибка, подождет еще 30 секунд, и попытается выполнить задание последний раз. После этого, вне зависимости от того, отработало ли регл. задание или снова была ошибка, через 1 час согласно расписанию будет новый цикл попыток выполнить регламентное задание.

В поле Имя метода нужно указать имя экспортной процедуры серверного общего модуля. Изначально если имя метода не указано, при нажатии на кнопку увеличительного стекла будет открыт диалог выбора общего модуля, в котором далее будет автоматически создан экспортный метод.

Настройка регламентного задания в 1С - выбор модуля

Если же нажать на кнопку с многоточием, то будет открыт другой диалог – выбор обработчика события. В этом окне мы можем выбрать подходящую процедуру из уже существующих.

1С настройка регламентного задания - выбор обработчика события

Отметим флажки Использование и Предопределенное, и нажмем гиперссылку “Открыть” в строке Расписание. В открывшемся диалоговом окне можно достаточно гибко настроить расписание, по которому должно работать регламентное задание. В зависимости от настроек на разных закладках, в отдельном поле формируется понятное текстовое пояснение, например:
Выполнять: c 1 января 2022 г. каждый день; с 20:00:00 каждые 10 секунд
Чтобы понять, как вам лучше настроить расписание, лучше самостоятельно изучить закладки и поиграть с параметрами, например, выключить выполнение задания в выходные дни, или настроить выполнение раз в квартал.

1С Настройка регламентного задания Расписание

Итак, мы создали объект метаданных Регламентное задание. Но это по сути только образец, эталон, на основе которого в информационной базе будут создаваться отдельные экземпляры. Эти экземпляры регламентных заданий хранятся непосредственно в информационной базе.

Что такое предопределенные регламентные задания?

В случае, если для регламентного задания указать признак “Предопределенное”, в информационной базе будет создан предопределенный экземпляр этого задания, который нельзя удалить или создать программно. В остальном он не отличается от других регламентных заданий, которые созданы в информационной базе. Если в объекте метаданных снять флажок “Предопределенное”, то существующее в информационной базе предопределенное регламентное задание будет автоматически удалено.

Если вы хотите, чтобы регламентное задание сразу вступило в строй и начало работать автоматически, следует включить флажок “Предопределенное”. Если этого не сделать, то для создания и настройки такого регламентного задания можно воспользоваться обработкой “Консоль заданий”, либо создавать экземпляр этого регламентного задания средствами языка 1С.

Важный нюанс. Регламентные задания после создания в конфигураторе, можно настраивать в режиме 1С Предприятие – указать другое расписание, отметить или отключить использование, задать параметры выполнения. Изменения регламентного задания в пользовательском режиме никак не повлияют на настройки этого регламентного задания в метаданных.

Как создать регламентное задание программно?

За программную работу с регламентными заданиями отвечает свойство глобального контекста РегламентныеЗадания – это специальный объект с типом МенеджерРегламентныхЗаданий.

Объекты регламентных заданий можно создавать только на основе существующих в метаданных регламентных заданий. Рассмотрим пример:

Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодПовтораВТечениеДня = 3600;
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗаписатьВЛог");
Задание.Расписание = Расписание;
Задание.Записать();

В примере мы создаем объект задания на основе метаданных регламентного задания “ЗаписатьВЛог” и объекта расписание. Расписание в свою очередь – это объект языка, который аналогичен рассмотренному выше окну расписания – и все настройки, которые делаются в этом окне интерактивно, можно задать программно средствами языка 1С.

Второй вариант использования метода СоздатьРегламентноеЗадание – передать в качестве параметра непосредственно объект метаданных:

Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.ЗаписатьВЛог);

Важно! Создать регламентное задание можно только на основе существующего в метаданных объекта Регламентное задание. Указание других метаданных приведет к ошибке.

Создание и работа с фоновыми заданиями

При наличии в информационной базе регламентных заданий – предопределенных, или созданных программно – платформа будет на их основе создавать фоновые задания согласно расписанию. В большинстве случаев, достаточно корректной настройки регламентных заданий, чтобы фоновые задания своевременно и правильно отрабатывали.

Важно понимать, что фоновое задание – это объект встроенного языка, который предназначен для асинхронного выполнения прикладных задач. Фоновые задания нельзя запланировать при помощи языка 1С – только создать программно – и они тут же начнут выполняться.
Таким образом, можно сказать следующее: фоновые задания, созданные регламентным заданием выполняются по расписанию этого регламентного задания; а фоновые задания, созданные программно, выполняются немедленно в момент создания.

Выполнение фонового задания

Чтобы из языка 1С запустить фоновое задание, используется объект языка ФоновыеЗадания. Тип этого объекта – МенеджерФоновыхЗаданий. Для выполнения фонового задания служит метод Выполнить.

ФоновыеЗадания.Выполнить("РеглЗадания.ЗаписатьВЛог", , Строка(Новый УникальныйИдентификатор));

Выполнить в фоновом задании можно экспортную процедуру или функцию, которая должна быть размещена в общем неглобальном модуле.

Получение списка фоновых заданий

Фоновые задания могут выполняться очень длительное время, поэтому разработчику может понадобиться периодически опрашивать запущенные задания, чтобы узнать – какие уже выполнились, а какие все еще работают.
Для получения списка фоновых заданий используется метод ФоновыеЗадания.ПолучитьФоновыеЗадания(<Отбор>). Данный метод может получить как список всех фоновых заданий, если не указывать отбор, так и отфильтрованный список – например, только все активные фоновые задания, или фоновые задания с определенным методом, или же фоновые задания, созданные определенным регламентным заданием, и т.д.

В случае, если нам необходимо дождаться выполнения нескольких фоновых заданий, следует использовать метод ФоновыеЗадания.ОжидатьЗавершенияВыполнения(<Массив фоновых заданий>). Кроме того, у каждого фонового задания также есть аналогичный метод – который можно использовать, если мы хотим дождаться завершения одного конкретного фонового задания.

Регламентные задания в файловом варианте базы

При работе с файловой базой регламентные задания имеют ряд отличий от выполнения в клиент-серверном варианте.

Для выполнения регламентных заданий должен быть запущен клиентский сеанс.

  • Регламентные задания в файловом варианте, вне зависимости от расписания обрабатываются раз в 60 секунд. Т.е. можно указать расписание 1 раз в 5 секунд, но все равно следующий запуск произойдет через 60 секунд. Второй пример: расписание настроено на 90 секунд. Но по факту фоновые задания будут выполнены с интервалом 120 секунд.
  • Фоновые задания выполняются последовательно – т.е. в файловой базе одновременно не может работать два фоновых задания. Пока выполняется одно, остальные становятся в очередь на выполнение.
  • Регламентные задания выполняются только одним клиентским приложением. При этом, если не указано специальных настроек, за выполнение регламентных заданий будет отвечать первый запущенный клиентский сеанс.

От сайта к сайту часто встречается информация, что для выполнения регламентных заданий в файловом варианте следует использовать метод ВыполнитьОбработкуЗаданий().  Данная информация устарела, и в последних версиях платформы 8.3. регламентные задания в файловом режиме настраиваются и работают практически так же как в клиент-серверной среде.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

десять − три =

К НАЧАЛУ