Область применения: управляемое приложение.
1. В прикладных решениях, ориентированных на работу в режиме сервиса по Технологии 1cFresh, не должно быть регламентных заданий, которые включены в состав любого из разделителей. Это ограничение обусловлено тем, что при большом количестве областей данных в одной информационной базе разделенные регламентные задания могут вызвать перегрузку рабочих процессов, обслуживающих данную информационную базу, и серьезно затруднить работу пользователей сервиса.
2. Если требуется обеспечить регулярное выполнение определенного программного кода в приложениях пользователя, размещенных в разделенной информационной базе, необходимо использовать возможности подсистемы БТС Очередь заданий, либо разработать аналогичный механизм очереди заданий самостоятельно.
Пример № 1. Необходимо при включенной функциональной опции Обмен с сайтом ежедневно выполнять обмен с указанным в настройках сайтом. Должна быть возможность настройки индивидуального расписания выполнения для каждого приложения.
СоответствиеИменПсевдонимам.Вставить(Метаданные.РегламентныеЗадания.ОбменССайтом.ИмяМетода);
Шаблоны.Добавить(Метаданные.РегламентныеЗадания.ПересчетИтогов.ИмяМетода);
Неправильно:
// Ищем задание по наименованию.
Отбор = Новый Структура();
Отбор.Вставить(“Метаданные”, “ПроверкаЦен”);
Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
// Проверяем, что задание найдено.
Если Задания.Количество() <> 1 Тогда
// Запись в журнал ошибки опущена.
Возврат;
КонецЕсли;
// Включаем найденное задание.
НашеЗадание = Задания[0];
НашеЗадание.Использование = Истина;
НашеЗадание.Записать();
Правильно:
// Ищем задание по наименованию.
Отбор = Новый Структура();
Отбор.Вставить(“Метаданные”, “ПроверкаЦен”);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
// Проверяем, что задание найдено.
Если Задания.Количество() <> 1 Тогда
// Запись в журнал ошибки опущена.
Возврат;
КонецЕсли;
// Включаем найденное задание.
НашеЗадание = Задания[0];
Параметры = Новый Структура();
Параметры.Вставить(“Использование”, Истина);
РегламентныеЗаданияСервер.ИзменитьЗадание(НашеЗадание.УникальныйИдентификатор, Параметры);
4. Следует учитывать, что подсистема Очередь заданий не гарантирует выполнение регламентного задания в точном соответствии с указанным расписанием. Точность соблюдения расписания зависит от общего количества запланированных заданий, длительности их выполнения и количества исполняющих потоков (регулируется константой «Максимальное количество исполняющихся фоновых заданий»).
4.1. Рекомендуется в общем случае при работе в режиме сервиса не предоставлять пользователям возможность настройки расписания регламентных заданий.
4.2. Если сценарий работы подразумевает оперативную реакцию системы (обновление информации), которую очередь регламентных заданий не обеспечивает, то следует рассмотреть другие решения.
Например, регламентное задание по отправке и получению почты должно ожидаемо выполняться раз в 5 минут, но в режиме сервиса в нагруженной базе запускается с периодичностью 1 ч. 40 мин, что является неприемлемым. В таком случае оперативная работа с почтой должна быть организована таким образом:
Таким образом, при начале работы с почтой не приходится долго ждать получения писем, так как с помощью очереди заданий к этому моменту уже будет получена значительная часть новых писем. При этом оперативное взаимодействие с почтовыми серверами выполняется только тогда, когда оно действительно требуется – при фактической работе со списком писем.
* Для того чтобы не вызывать длительных задержек при работе пользователя, серверный вызов рекомендуется выполнять в длительной операции. При этом серверная логика также должна выполняться максимально быстро, только в объеме, необходимом для работы конкретного пользователя, чтобы не перегружать сервер и не затруднять работу других пользователей сервиса.