Ограничения на регламентные задания при работе в режиме сервиса

#std760

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

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

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

Пример № 1. Необходимо при включенной функциональной опции Обмен с сайтом ежедневно выполнять обмен с указанным в настройках сайтом. Должна быть возможность настройки индивидуального расписания выполнения для каждого приложения.

Неправильно:
Правильно:

     СоответствиеИменПсевдонимам.Вставить(Метаданные.РегламентныеЗадания.ОбменССайтом.ИмяМетода);

Пример № 2. Задание из примера № 1 необходимо выполнить от имени определенного пользователя.

Неправильно:
Правильно:
Пример № 3. Необходимо в начале каждого месяца во всех приложениях выполнять регламентную операцию пересчета итогов регистров накопления. Расписание задания является единым для информационной базы и может изменяться администратором сервиса для всех приложений информационной базы.
Неправильно:
  • Включить добавленное задание в состав общих реквизитов, разделяющих данные.
Правильно:
  • Исключить добавленное задание из состава общих реквизитов, разделяющих данные;
  • В общем модуле ОчередьЗаданийПереопределяемый в процедуру ПриПолученииСпискаШаблонов добавить:

     Шаблоны.Добавить(Метаданные.РегламентныеЗадания.ПересчетИтогов.ИмяМетода);

3. В прикладных решениях, ориентированных на работу в режиме сервиса по Технологии 1cFresh, не должно быть участков, где из программного кода напрямую выполняется управление регламентными заданиями. Для управления регламентными заданиями необходимо использовать программный интерфейс БСП, реализованный в модуле РегламентныеЗаданияСервер.


Неправильно:

// Ищем задание по наименованию.
Отбор = Новый Структура();
Отбор.Вставить(“Метаданные”, “ПроверкаЦен”);
Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);

// Проверяем, что задание найдено.
Если Задания.Количество() <> 1 Тогда
 // Запись в журнал ошибки опущена.
 Возврат;
КонецЕсли;

// Включаем найденное задание.
НашеЗадание = Задания[0];
НашеЗадание.Использование = Истина;
НашеЗадание.Записать();

Правильно:

// Ищем задание по наименованию.
Отбор = Новый Структура();
Отбор.Вставить(“Метаданные”, “ПроверкаЦен”);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);

// Проверяем, что задание найдено.
Если Задания.Количество() <> 1 Тогда
 // Запись в журнал ошибки опущена.
 Возврат;
КонецЕсли;

// Включаем найденное задание.
НашеЗадание = Задания[0];
Параметры = Новый Структура();
Параметры.Вставить(“Использование”, Истина);
РегламентныеЗаданияСервер.ИзменитьЗадание(НашеЗадание.УникальныйИдентификатор, Параметры);

4. Следует учитывать, что подсистема Очередь заданий не гарантирует выполнение регламентного задания в точном соответствии с указанным расписанием. Точность соблюдения расписания зависит от общего количества запланированных заданий, длительности их выполнения и количества исполняющих потоков (регулируется константой «Максимальное количество исполняющихся фоновых заданий»).

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

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

Например, регламентное задание по отправке и получению почты должно ожидаемо выполняться раз в 5 минут, но в режиме сервиса в нагруженной базе запускается с периодичностью 1 ч. 40 мин, что является неприемлемым. В таком случае оперативная работа с почтой должна быть организована таким образом:

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

* Для того чтобы не вызывать длительных задержек при работе пользователя, серверный вызов рекомендуется выполнять в длительной операции. При этом серверная логика также должна выполняться максимально быстро, только в объеме, необходимом для работы конкретного пользователя, чтобы не перегружать сервер и не затруднять работу других пользователей сервиса.