Область применения: управляемое приложение, обычное приложение.
Методическая рекомендация (полезный совет)
1. Рекомендуется предоставлять пользователям альтернативную возможность по выполнению регламентных заданий вручную. Например, предлагать «по кнопке» выполнить обработку данных, обычно выполняемую регламентным заданием в фоне. Это вызвано тем соображением, что работа системы не должна зависеть от автоматического выполнения регламентных заданий. В частности:
- выполнение регламентных заданий может быть осознанно выключено на кластере серверов 1С:Предприятия;
- в отличие от клиент-серверного режима работы 1С:Предприятия версии 8.2 и ранее, в котором регламентные и фоновые задания выполняются на сервере, в файловом режиме отсутствовала возможность по их автоматическому выполнению.
В зависимости от специфики регламентных заданий, различается способ их запуска.
1.1. В случае если регламентное задание изменяет в системе некоторые данные , которые необходимы определенному бизнес-процессу или выводятся в конкретном «рабочем месте» (форме), то в таких «рабочих местах» дополнительно рекомендуется размещать команду для выполнения этого действия. Например:
- в форме для поиска в данных рекомендуется вывести дату актуальности индекса, если он не актуален, и команду «Обновить»;
- в списке входящих писем указано, когда они последний раз принимались, и имеется команда «Получить почту»;
- в рабочем месте ответственного за партионный учет указано, на какой момент времени проводилось последний раз распределение по партиям, и команда «Выполнить» для распределения по партиям.
Такие рабочие места должны информировать пользователя о дате актуальности представленных данных и команду для их обновления или обработки (которая выполняет то же действие, что и регламентное задание). Команда должна быть доступна только пользователям с необходимыми для ее выполнения правами.
Пример ручного запуска задания по очистке устаревших версий объектов:
// Проверка, выполняется ли фоновое задание по очистке устаревших версий.
Отбор = Новый Структура;
Отбор.Вставить("ИмяМетода", ИмяМетода);
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Если ФоновыеЗаданияОчистки.Количество() = 0 Тогда
НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = ‘Запуск вручную: %1’"), РегламентноеЗаданиеМетаданные.Синоним);
ФоновыеЗадания.Выполнить(ИмяМетода. НаименованиеФоновогоЗадания);
КонецЕсли;
КонецПроцедуры
1.2. Если работа регламентного задания оказывает влияние на данные, отображаемые в заранее неизвестном количестве рабочих мест, или влияет на информационную базу в целом , то не представляется возможным выделить какое-то одно рабочее место для размещения команды запуска всех таких заданий. Примеры регламентных заданий, не «привязанных» к конкретным рабочим местам:
- обновление и перестроение агрегатов;
- установка периода рассчитанных итогов.
Результат работы таких регламентных заданий оказывает влияние сразу на множество внутренних и внешних отчетов системы, которые опираются на итоги и агрегаты.
В этом случае рекомендуется заводить отдельное рабочее место для выполнения таких регламентных заданий. При использовании в конфигурации Библиотеки стандартных подсистем такое рабочее место уже входит в состав подсистемы «Регламентные задания» (форма «Регламентные и фоновые задания»).
1.3. В тех же случаях когда регламентное задание не изменяет данные в системе , а формирует различные отчеты или рассылки из нее, также рекомендуется предусматривать отдельное рабочее место для выполнения таких регламентных заданий.
Примеры регламентных заданий, которые не меняют данные в базе:
- рассылка по почтовым адресатам информации об ошибках в журнале регистрации;
- рассылка информации о новых/просроченных задачах;
- периодический запуск внешних обработок для рассылки отчетов.
При использовании в конфигурации Библиотеки стандартных подсистем такое рабочее место уже входит в состав подсистемы «Регламентные задания» (форма «Регламентные и фоновые задания»).
2. Для администраторов информационных баз действует рекомендация: на период выполнения обновления ИБ блокировать работу регламентных заданий. Однако если обновление выполняет неподготовленный пользователь, в особенности, в файловом режиме работы, то рекомендуется дополнительно предусмотреть следующие меры:
- в файловом режиме работы, при неудачной попытке установки монопольного режима для обновления данных ИБ предлагать автоматически блокировать работу регламентных заданий (перезапуск программы с ключом командной строки /AllowExecuteScheduledJobs -Off );
- в начале кода обработчиков регламентных заданий проверять режим работы и прерывать работу регламентного задания с помощью вызова исключения, если обновление ИБ еще не завершено.
При использовании в конфигурации Библиотеки стандартных подсистем первая рекомендация реализована в подсистеме «Обновление версии ИБ», а для выполнения второй предусмотрена процедура ПриНачалеВыполненияРегламентногоЗадания общего модуля ОбщегоНазначения , вызов которой необходимо размещать в начале кода обработчиков регламентных заданий.
При большом объеме обрабатываемых документов часть задач можно переложить на выполнение их в фоновом режиме без участия пользователя.
Алгоритм работы описывается в функции ВыполнитьРегламентныеДействия .
Выполнение алгоритма запускается двумя способами:
- при нажатии кнопки «Выполнить регламентное задание» в настройках модуля
- при запуске регламентного задания программно из конфигурации
В первом случае алгоритм запускается на клиенте. Поэтому он может содержать обращения к экспортным функциям, расположенным в формах основного модуля.
Второй вариант имеет несколько ограничений:
- использовать можно только методы, работающие на сервере
- обращение к формам модуля невозможно
- требуется внесение изменений в конфигурацию (добавление регламентного задания в 1С, описание функции вызова ВыполнитьРегламентныеДействия )
Чаще всего использование регламентного задания предполагает:
- обновление ленты событий
- проведение анализа документов и запись требуемых действий
- отправка на подпись или согласование
- выполнение сопоставления документов
- подписание и отправка сертификатом установленным на сервере 1С
Пример получения новых событий и отправка документов:
При большом объеме документов на отправку возникает потребность убрать эту задачу с пользователя.
В этом случае тот сертификат, которым будет производиться подписание, устанавливается на сервер 1С.
Отпечаток сертификата указывается в настройках основного модуля для организации: элемент организации → закладка «Прочие настройки» → поле «Отпечаток сертификата на сервере 1С»
Рассмотрим программный запуск фонового задания 1С на примере запуска обмена с Битрикс из «Управление торговлей ред. 10.3».
Задача: по кнопке осуществлять программный запуск фонового задания 1С для обмена заказами с сайтом. Перед запуском задания надо проверить, не выполняется ли оно прямо сейчас и проинформировать об этом пользователя.
Исходные данные: у нас уже есть регламентное задание, которое выполняет этот обмен.
Пояснения к коду
Привилегированный режим устанавливаем, т.к. не администраторы не могу получать фоновые задания.
В структуру ставим те поля, по которым будем идентифицировать нужное нам фоновое задание. В принципе, достаточно только ключа, но я на всякий случай добавил еще и наименование. Посмотреть эта параметры можно в консоли заданий:
Наименование и ключ регламентного задания
Если в массиве не ноль элементов, значит есть активное фоновое задание. Сообщаем об этом пользователю.
Если выполняемых фоновых заданий не нашли, то создаем свое.
В массив параметров надо положить код обмена. Посмотреть его можно в плане обмена битрикса:
КодНастроек обмена с Битрикс
Пробуем запустить фоновое задание. Если получилось — сообщаем пользователю, что все ОК, если нет, то рекомендуем ему обратиться к разработчику.
Если вы все сделали правильно, то программный запуск фонового задания 1С должен отработать корректно.
Также замечу, что запущенное таким образом фоновое задание не отобразится в консоли заданий. Тем не менее, вы сможете проверить корректность работы вашего кода, открыв лог обмена:
Лог обмена с Битрикс
Если не знаете, где находится нужный вам лог, посмотрите в настройках обмена:
Расположение лога обмена с Битрикс