Общие требования к регламентным заданиям

#std540

Область применения: управляемое приложение, обычное приложение.

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

2. При этом если регламентные задания не требуется добавлять или удалять в зависимости от действий пользователя или логики конфигурации, следует использовать предопределенные регламентные задания. Такие задания автоматически создаются в информационной базе с тем расписанием и состоянием, которое было задано разработчиком в Конфигураторе. Примеры предопределенных регламентных заданий:

3.1. Недопустимо выполнять регламентные задания, если соответствующая им функциональность отключена в программе. Иначе регламентные задания будут приводить к запускам сеансов, занимая вычислительные ресурсы сервера 1С:Предприятие. Для этого необходимо программно управлять признаком предопределенного регламентного задания Использование в зависимости от включенных функциональных опций (ФО). 

Например, имеем регламентное задание ПолучениеИОтправкаЭлектронныхПисем (с установленным флажком Использование), которое должно выполняться только в том случае, если установлена ФО ИспользоватьПочтовыйКлиент.

Неправильно: создавать предопределенное регламентное задание, зависящее от ФО, с установленным флажком Использование.

Правильно: снять флажок Использование и управлять использованием регламентного задания в зависимости от включения/выключения функциональной опции.
Если в конфигурации используется подсистема «Регламентные задания» Библиотеки стандартых подсистем (БСП), то для такой настройки следует использовать процедуру ПриОпределенииНастроекРегламентныхЗаданий общего модуля РегламентныеЗаданияПереопределяемый. Например:

Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS;
Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент;
Настройка.ДоступноВМоделиСервиса = Ложь;

После чего в состав определяемого типа МестоХраненияФункциональныхОпций необходимо добавить константы, соответствующие функциональным опциям, используемым для управления регламентными заданиями.

Для конфигураций без БСП следует управлять использованием регламентного задания, разместив, например, в модуле менеджера значения константы ИспользоватьПочтовыйКлиент следующий код:

Процедура ПриЗаписи(Отказ)
 
 Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем);
 
 Если Задание.Использование <> Значение Тогда
  Задание.Использование = Значение;
  Задание.Записать();
 КонецЕсли;
 
КонецПроцедуры

3.2. Дополнительно следует обезопасить выполнение регламентного задания, включенного через консоль или другим способом, минуя включение ФО, вставив в начало процедуры обработки регламентного задания следующий код:

ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда
 ВызватьИсключение НСтр("ru = 'Регламентное задание недоступно по функциональным опциям.'");
КонецЕсли;

Если в конфигурации используется подсистема «Регламентные задания» БСП и настроены зависимости регламентных заданий от ФО (как указано в п.3.1), то вместо этого достаточно вставить вызов, как показано в п.6.

4.1. Если выполнение регламентного задания зависит от данных информационной базы, то флажок Предопределенное у регламентного задания следует отключать.
Например:

В этих случаях требуется создавать экземпляры регламентных заданий и параметризовать их объектами ИБ (например, узлами ИБ, элементами справочника Дополнительные обработки и т.п.) из кода на встроенном языке с помощью метода РегламентныеЗадания.СоздатьРегламентноеЗадание. При этом в свойстве Наименование необходимо указывать представление объекта, на основании которого создается регламентное задание. Например, есть рассылка отчетов (элемент справочника), расписание, которое было настроено в карточке рассылки и ее автор, тогда добавление на основании нее регламентного задания будет выглядеть так:

// Снимаем ограничение, что только администратор может создавать регламентные задания.
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.РассылкаОтчетов);

ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(РассылкаОтчетов);
Задание.Параметры = ПараметрыЗадания;

Задание.ИмяПользователя = АвторРассылки;
Задание.Использование = Истина;
Задание.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Рассылка отчетов: %1'"), СокрЛП(РассылкаОтчетов);
Задание.Расписание = РасписаниеРассылки; 
Задание.Записать();

4.2. Если в конфигурации используется подсистема «Регламентные задания» БСП, то необходимо также запрещать интерактивное создание и запуск параметризованных регламентных заданий из формы Регламентные и фоновые задания. Для этого необходимо указать такое задание в процедуре ПриОпределенииНастроекРегламентныхЗаданий общего модуля РегламентныеЗаданияПереопределяемый. Например:

Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов;
Настройка.Параметризуется = Истина;

Также выполнить п.6.

5. Во избежание различных конфликтных ситуаций рекомендуется в копиях информационной базы автоматически блокировать все регламентные задания, обращающиеся к внешним ресурсам (рассылка почты, синхронизация данных с другими программами и т.п.). Например, если копия информационной базы была развернута для тестирования или передана в службу технической поддержки.

Если в конфигурации используется подсистема «Регламентные задания» БСП, то для этого необходимо перечислить такие задания в процедуре ПриОпределенииНастроекРегламентныхЗаданий общего модуля РегламентныеЗаданияПереопределяемый. Например:

Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов;
Настройка.РаботаетСВнешнимиРесурсами = Истина;

И выполнить п.6.

В этом случае при перемещении информационной базы администратору будет задан вопрос об отключении таких заданий.

6. Если регламентное задание попадает под требования, описанные в пунктах 3.1, 4.2, 5 и используется подсистема «Регламентные задания» БСП, то вначале процедур обработчиков таких заданий необходимо помещать вызов:

ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.<ИмяЗадания>);

Первый параметр при этом заполнять обязательно.

См. также