Регламентные задания в 1С предназначены для выполнения определенных процедур по расписанию, с некоторой периодичностью.
Регламентные задания хранятся в информационной базе, имеют расписание запуска. Сам запуск производится полностью автоматически, если режим работы информационной базы клиент-серверный. Если же база файловая, то необходимо выполнить следующие действия:
- выделить специального пользователя для выполнения регламентных заданий;
- должна быть открыта база под этим пользователем, в которой периодически должна выполняться функция ВыполнитьОбработкуЗаданий().
Создание регламентного задания
Регламентные задания — объект метаданных конфигурации 1С. Находится в группе Общие. Рассмотрим параметры и свойства регламентных заданий.
Имя метода— путь к экспортной процедуре в общем модуле, которая будет выполняться по заданному расписанию. Процедура должна выполняться на сервере. В этом регламентные задания чем-то похожи на объект Подписка на событие.
Ключ — позволяет создать несколько регламентных заданий одного типа. Например, выполнение синхронизации данных между несколькими информационными базами может быть реализовано с помощью одного объекта метаданных РегламентноеЗадание, при этом самих регламентных заданий будет создано несколько (по количеству баз для обмена). Различаться эти регламентные задания будут с помощью свойства Ключ. Одновременно может выполняться только одно задание с одинаковым ключом.
Использование — флаг, показывающий, включено ли регламентное задание.
Предопределенное — здесь можно провести аналогию с предопределенными элементами справочника. Предопределенные элементы создаются в конфигураторе и применяются пользователями в работе. Обычные элементы пользователь создает сам. С регламентными заданиями точно так же: если оно предопределенное, то оно существует и может выполняться по расписанию сразу после создания в конфигураторе. Если же флаг Предопределенное не установлен, то пользователю нужно самому создать одно или несколько регламентных заданий данного типа (например, через Консоль заданий).
Количество повторов при аварийном завершении задания — определяет, сколько раз будет выполнен перезапуск фонового задания, если оно было завершено с ошибкой.
Интервал повтора при аварийном завершении задания — определяет, с какой периодичностью будет выполнен перезапуск фонового задания, если оно было завершено с ошибкой.
Программная работа с регламентными заданиями
В данных примерах будем рассматривать работу с обычными, не предопределенными, регламентными заданиями.
Программное создание регламентного задания
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ИмяРегдаментногоЗадания");
//Устанавливаем ключ регламентного задания (не обязательно)
Задание.Ключ = "КлючЗадания";
//Включаем регламентное задание
Задание.Использование = Истина;
//Записываем регламентное задание
Задание.Записать();
Программное получение регламентного задания для изменения параметров
В этом примере предположим, что существует только одно регламентное задание данного типа. Если заданий несколько, то, зная методы работы с массивами, нетрудно внести в код соответствующие изменения.
Задания=РегламентныеЗадания.ПолучитьРегламентныеЗадания(новый Структура("Метаданные", Метаданные.РегламентныеЗадания["ИмяРегламентногоЗадания"]));
//Если задание существует, то по условию оно одно
Если Задания.Количество()>0 Тогда
Задание=Задания[0];
//Если задания нет, создадим его
Иначе
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания");
КонецЕсли;
//Регламентное задание находится в переменной Задание. Можно изменять его параметры.
Вызов диалога изменения расписания регламентного задания
Для работы с расписанием регламентного задания существует особый тип диалога. Все еще предполагаем, что у нас есть только одно регламентное задание данного типа.
Задания=РегламентныеЗадания.ПолучитьРегламентныеЗадания(новый Структура("Метаданные", Метаданные.РегламентныеЗадания["ИмяРегламентногоЗадания"]));
//Если задание существует, то по условию оно одно
Если Задания.Количество()>0 Тогда
Задание=Задания[0];
//Если задания нет, создадим его
Иначе
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания");
КонецЕсли;
Расписание=Задание.Расписание;
//Создаем диалог изменения расписания регламентного задания
ДиалогРедактирования= Новый ДиалогРасписанияРегламентногоЗадания (Расписание);
//Показываем диалог пользователю и обрабатываем изменения расписания
Если ДиалогРедактирования.ОткрытьМодально() Тогда
Задание.Расписание = ДиалогРедактирования.Расписание;
Задание.Записать();
КонецЕсли;