#std539

Запуск регламентных заданий

1.

Рекомендуется давать пользователю альтернативную возможность выполнять регламентные задания вручную.

Например, предлагать запускать «по кнопке» обработку данных, которая обычно выполняется регламентным заданием в фоне.

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

В частности:

  • выполнение регламентных заданий может быть осознанно отключено на кластере серверов 1С:Предприятия;
  • в файловом режиме отсутствовала возможность автоматического выполнения регламентных и фоновых заданий (в отличие от клиент-серверного режима 1С:Предприятия версии 8.2 и ранее, где они выполняются на сервере).

Способ ручного запуска зависит от специфики задания.

1.1.

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

Например:

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

Такие рабочие места должны информировать пользователя о дате актуальности данных и предоставлять команду для обновления или обработки (которая выполняет то же действие, что и регламентное задание).

Команда должна быть доступна только пользователям с нужными правами.

Пример

Пример ручного запуска задания по очистке устаревших версий объектов:

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

   // Проверка, выполняется ли фоновое задание по очистке устаревших версий.
   Отбор = Новый Структура;
   Отбор.Вставить("ИмяМетода", ИмяМетода);
   Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
   ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
   Если ФоновыеЗаданияОчистки.Количество() = 0 Тогда
      НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
        НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗаданиеМетаданные.Синоним);
      ФоновыеЗадания.Выполнить(ИмяМетода,,, НаименованиеФоновогоЗадания);
   КонецЕсли;
КонецПроцедуры
1.2.

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

Примеры таких заданий:

  • обновление и перестроение агрегатов;
  • установка периода рассчитанных итогов.

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

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

Если в конфигурации используется Библиотека стандартных подсистем, такое рабочее место уже входит в подсистему Регламентные задания (форма Регламентные и фоновые задания).

1.3.

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

Примеры заданий, которые не изменяют данные в базе:

  • рассылка по почтовым адресатам информации об ошибках из журнала регистрации;
  • рассылка информации о новых и просроченных задачах;
  • периодический запуск внешних обработок для рассылки отчетов.

Если в конфигурации используется Библиотека стандартных подсистем, такое рабочее место уже входит в подсистему Регламентные задания (форма Регламентные и фоновые задания).

2.

Для администраторов информационных баз рекомендуется: на время обновления ИБ блокировать выполнение регламентных заданий.

Если обновление запускает неподготовленный пользователь, особенно в файловом режиме, рекомендуется дополнительно:

  • в файловом режиме, при неудачной попытке установки монопольного режима для обновления данных ИБ, предлагать автоматически блокировать работу регламентных заданий (перезапуск программы с ключом /AllowExecuteScheduledJobs -Off);
  • в начале обработчиков регламентных заданий проверять режим работы и прерывать выполнение вызовом исключения, если обновление ИБ еще не завершено.

Если в конфигурации используется Библиотека стандартных подсистем, первая рекомендация уже реализована в подсистеме Обновление версии ИБ.

Для второй рекомендации предусмотрена процедура ПриНачалеВыполненияРегламентногоЗадания() общего модуля ОбщегоНазначения. Ее вызов нужно размещать в начале кода обработчиков регламентных заданий.

См. также
Источник

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