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

#std760

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

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

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

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

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

Правильно:

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

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

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

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

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

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

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


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

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

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

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

    Правильно:

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

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

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

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

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

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

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

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

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