Регламентные задания в 1С 8.3

Создание регламентного задания

Регламентные задания позволяют выполнять определенные действия по расписанию. Для выполнения используются фоновые задания.

Регламентные задания хранятся в базе данных. В конфигурации есть объект метаданных Регламентные задания, где можно создать новое задание, указать метод для выполнения, расписание и т.п. Если установить в свойствах флаг Предопределенное, то при сохранении конфигурации базы данных регламентное задание будет записано в базу данных. Если флаг не установлен, то записать задание в базу нужно вручную.

Для примера создадим простое регламентное задание и установим у него флаг Предопределенное, а также Использование. Использование означает, что регламентное задание будет выполняться согласно его расписанию.

Регламентные задания

В свойстве Наименование можно указать произвольное наименование регламентного задания. Свойство Ключ аналогично такому же свойству фоновых заданий. Нельзя запустить несколько фоновых заданий с одним ключом и связанных с одним регламентным заданием.

В свойстве Имя метода нужно выбрать не глобальный серверный общий модуль, в котором будет создана процедура для выполнения. Можно выбрать уже существующую процедуру или функцию из общего модуля. Если выбрана функция, то результат выполнения будет проигнорирован.

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

Расписание регламентных заданий

Для настройки расписания нужно нажать на гиперссылку Открыть рядом со свойством Расписание. Будет открыто окно настройки расписания:

Расписание регламентных заданий

Для примера настроим чтобы регламентное задание выполнялось каждые 5 минут. Для этого на закладке Общее укажем, что нужно повторять задание каждый день:

Расписание регламентных заданий

А закладке Дневное — повторять через 300 секунд:

Расписание регламентных заданий

Нажмем ОК, сохраним конфигурацию базы данных. Теперь каждые 5 минут будет запускаться фоновое задание и выполнять код из процедуры, которая указана в свойстве Имя метода.

Расписание тоже сохраняется в таблице регламентных заданий. Если сейчас изменить расписание в конфигураторе и сохранить конфигурацию базы данных, то все равно будет использоваться старое расписание. Чтобы применилось новое расписание, его нужно установить в пользовательском режиме. Или снять флаг Предопределенное и сохранить конфигурацию базы данных. В этот момент запись об этом регламентном задании будет удалена из таблицы. А потом настроить в конфигураторе новое расписание и снова поставить флаг Предопределенное. Регламентное задание будет записано в таблицу с новым расписанием.

Для программного открытия окна настройки расписания регламентного задания в пользовательском режиме можно воспользоваться следующим кодом:

В результате будет открыто окно для настройки расписания, результат настройки будет записан в таблицу регламентных заданий.

Расписание регламентных заданий

Расписание можно создать программно:

Теперь регламентное задание будет выполняться каждую минуту.

Рассмотрим некоторые настройки расписания:

  • Каждый день в час ночи:
Расписание регламентных заданий
Расписание регламентных заданий
  • То же самое, но кроме выходных:
Расписание регламентных заданий
  • Только пятого числа каждого месяца:
Расписание регламентных заданий
  • Можно настроить детальное расписание в течения дня, например в 13:00 и в 18:00:
Расписание регламентных заданий
  • Можно ограничить период выполнения регламентного задания, например только с 1 по 10 мая 2021 года:
Расписание регламентных заданий

Те же самые примеры, но программно:

Планировщик регламентных заданий

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

В файловом варианте регламентные задания выполняются на клиентском приложении. Причем только на одном. Это будет самое первое запущенное клиентское приложение. Если его закрыть, то регламентные задания начнут выполняться на другом клиентском приложении. Если больше нет запущенных клиентских приложений, то регламентные задания не будут выполняться. Если расписание регламентного задания было настроено на час ночи, а в этом время не был запущен ни один сеанс, то такое задание не будет выполнено. Обработка регламентных заданий выполняется один раз в 60 секунд. Если при запуске регламентного задания на этом клиентском сеансе уже выполняются какие-нибудь фоновые задания, то регламентное задание будет выполнено только после завершения всех текущих фоновых заданий.

До версии платформы 8.3.3.641 в файловом варианте не было автоматического выполнения регламентных заданий. Нужно было программно вызывать метод ВыполнитьОбработкуЗаданий. Обычно для этого запускался отдельный сеанс и в нем через обработчик ожидания вызывался данный метод.

Программная работа с регламентными заданиями

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

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

В базу данных будут записаны два регламентных задания, а в процедуре, которая указана для регламентного задания можно анализировать параметр, который был указан при создании регламентного задания:

Для получения списка всех регламентных заданий можно воспользоваться методом ПолучитьРегламентныеЗадания:

Параметром можно передать структуру с отбором:

Отбор можно выполнять по следующим свойствам:

  • УникальныйИдентификатор
  • Ключ
  • Метаданные 
  • Предопределенное
  • Использование
  • Наименование 

С помощью методом НайтиПоУникальномуИдентификатору и НайтиПредопределенное можно получить конкретное задание по его идентификатору или имени предопределенного регламентного задания:

Для удаления регламентного задания используется метод Удалить. Удалена будет только запись из таблицы базы данных, само регламентное задание останется в метаданных. Предопределенные задания нельзя удалить. Они удаляются, если снять флаг Предопределенное в метаданных:

Если нужно запустить регламентное задание не дожидаясь наступления расписания, то можно просто вызвать процедуру общего модуля, которая указана в свойстве Имя метода:

Пользователь регламентных заданий

По умолчанию регламентные задания выполняются под системным пользователем DefUser. Но если регламентное задание создается программно, то можно явно указать пользователя, под которым нужно выполнять его:

Перезапуск при аварийном завершении

В настройках регламентного задания есть два свойства: Количество повторов при аварийном завершении и Интервал повтора при аварийном завершении.

Количество повторов при аварийном завершении и Интервал повтора при аварийном завершении

Если во время выполнения регламентного задания будет выброшено какое-нибудь исключение, или рабочий процесс, на котором выполнялось регламентное задание будет аварийно завершен, то регламентное задание будет перезапущено столько раз, сколько указано в свойстве Количество повторов при аварийном завершении. Каждый новый перезапуск будет выполняться через количество секунд, указанных в свойстве Интервал повтора при аварийном завершении. При этом при перезапуске регламентное задание будет всегда выполняться с самого начала.

Блокировка регламентных заданий

Чтобы заблокировать выполнение регламентных заданий в клиент-серверной базе нужно выполнить следующие действия:

  1. Запустить консоль кластера: меню Пуск -> 1С предприятие 8 -> Администрирование серверов 1С предприятие:
Администрирование серверов 1С
  1. В открывшейся консоли развернуть список информационных баз, щелкнуть по нужной правой кнопкой и выбрать Свойства:
Администрирование серверов 1С
  1. В окне свойств базы установить флаг Блокировка регламентных заданий включена и нажать ОК:
Блокировка регламентных заданий

Чтобы заблокировать выполнение регламентных заданий в файловой базе нужно выполнить следующие действия:

  1. В списке баз нажать Изменить:
Список баз
  1. Перейти на вторую закладку и в поле Дополнительные параметры запуска указать: /AllowExecuteScheduledJobs -Off
Дополнительные параметры запуска

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

В конфигурациях на базе БСП можно выключить все регламентные задания следующим образом:

  1. Перейти в раздел НСИ и администрирование -> Обслуживание -> Регламентные операции -> Регламентные и фоновые задания
Регламентные и фоновые задания
  1. В открывшемся окне выделить все задания (crtl + A), щелкнуть правой кнопкой и выбрать Выключить:
Регламентные и фоновые задания

В конфигурациях на обычном приложении нужно скачать консоль заданий с ИТС

Открыть консоль заданий в пользовательском режиме и в верхнем списке для каждого задания снять флаг Использование:

Консоль заданий

Использование можно отключить программно:


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Здесь может быть Ваша реклама
Понравилась статья? Поделиться с друзьями:
Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok