#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 и используется подсистема Регламентные задания БСП, в начало обработчика задания добавляйте вызов:

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

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

См. также
Проверки

#acc:302 #acc:496

Источник

https://its.1c.ru/db/v8std#content:540