#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.¶
Если по сценарию нужна оперативная реакция системы (обновление информации), а очередь регламентных заданий ее не обеспечивает, рассмотрите другие решения.
- Если можно настроить push-уведомления от внешней системы, не используйте регламентное задание:
- загружайте данные только при получении уведомления;
- отправляйте данные только при реальной потребности. Пример push-доставки есть в Системе взаимодействий при приеме входящего SIP-звонка.
- В остальных случаях оставьте регламентное задание (через очередь заданий), но оперативное получение и отправку данных выполняйте тогда, когда пользователь фактически работает в нужном рабочем месте.
Пример: отправка и получение почты должны выполняться раз в 5 минут, но в нагруженной сервисной базе задание запускается раз в 1 ч. 40 мин, что неприемлемо.
В таком случае организуйте оперативную работу с почтой так:
- регламентное задание отправки и получения почты работает с периодичностью, которую дает очередь заданий;
- при открытии списка писем выполняется разовая дозагрузка и отправка писем для доступных пользователю учетных записей (*);
- клиентский обработчик ожидания выполняет регулярную отправку и получение писем с нужной периодичностью независимо от очереди заданий (*).
Так при начале работы с почтой пользователю не приходится долго ждать, потому что значительная часть новых писем уже получена через очередь заданий. Оперативный обмен с почтовыми серверами выполняется только когда он действительно нужен - при фактической работе со списком писем.
Для информации
- Чтобы не создавать длительные задержки для пользователя, серверный вызов рекомендуется выполнять в #std642: длительной операции. Серверная логика также должна работать максимально быстро и только в объеме, который нужен конкретному пользователю, чтобы не перегружать сервер и не затруднять работу других пользователей сервиса.