К статье
Практический материал

Администрирование · 8 мин

Как программно отключить регламентное задание в 1С

Как программно отключить регламентное задание в 1С через код: методы ПолучитьРегламентныеЗадания, свойство Использование, отключение по имени и отладка.

Регламентные задания в 1С выполняют фоновые операции: обмены данными, загрузку курсов валют, рассылку отчётов, пересчёт итогов. Иногда задание нужно выключить — на время отладки, при переносе базы, при дублировании функционала или когда задача мешает работе пользователей. Сделать это можно не только через консоль заданий, но и программно, прямо из кода на встроенном языке.

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

Объектная модель регламентных заданий в 1С

Работа с регламентными заданиями ведётся через менеджер РегламентныеЗадания. Он доступен только на сервере — код нужно выполнять в серверной процедуре, фоновом задании, через внешнюю обработку с установленным привилегированным режимом или в консоли кода на сервере.

Основные методы менеджера:

  • РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор) — возвращает массив заданий, отбор задаётся структурой (например, по имени метода или ключу);
  • РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Ид) — возвращает одно задание по GUID;
  • РегламентныеЗадания.СоздатьРегламентноеЗадание(Имя) — создаёт новое задание для предопределённого объекта метаданных.

Само отключение выполняется установкой свойства Использование в значение Ложь с последующим вызовом метода Записать(). Без записи изменения не сохранятся.

Отключение задания по уникальному идентификатору

Самый надёжный способ — обратиться к заданию по GUID. Идентификатор можно посмотреть в консоли заданий или получить выборкой. Этот вариант исключает ошибку, когда заданий с похожими именами несколько.

Идентификатор = Новый УникальныйИдентификатор("a1b2c3d4-0000-0000-0000-000000000000");

Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

Если Задание <> Неопределено Тогда

Задание.Использование = Ложь;

Задание.Записать();

КонецЕсли;

Проверка на Неопределено обязательна: если задание с таким GUID не найдено, обращение к свойству вызовет ошибку выполнения.

Отключение задания по имени метода или наименованию

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

Отбор = Новый Структура("ИмяМетода", "ЗагрузитьКурсыВалют");

МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);

Для Каждого Задание Из МассивЗаданий Цикл

Задание.Использование = Ложь;

Задание.Записать();

КонецЦикла;

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

Массовое отключение всех заданий

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

ВсеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания();

Для Каждого Задание Из ВсеЗадания Цикл

Если Задание.Использование Тогда

Задание.Использование = Ложь;

Задание.Записать();

КонецЕсли;

КонецЦикла;

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

Отключение через консоль кода и внешнюю обработку

Если под рукой нет конфигуратора или нет прав на изменение конфигурации, код выполняют через консоль кода (внешнюю обработку для выполнения произвольного кода на сервере) или через обработку «Консоль заданий». Порядок действий одинаковый: открыть обработку в режиме предприятия, вставить код, убедиться, что выполнение идёт на сервере, запустить.

Порядок действий
  1. 1
    Сделайте резервную копию базы или убедитесь, что работаете в копии
  2. 2
    Откройте консоль кода или внешнюю обработку в режиме предприятия
  3. 3
    Найдите задание отбором по ИмяМетода или по GUID
  4. 4
    Установите Использование = Ложь и вызовите Записать()
  5. 5
    Проверьте результат: получите задание заново и убедитесь, что Использование = Ложь
  6. 6
    Проверьте журнал регистрации — не должно быть новых запусков этого задания

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Свойство Использование
Норма

После повторного чтения равно Ложь

Тревожный признак

Снова Истина — запись не выполнилась или задание переопределяется кодом

Журнал регистрации
Норма

Нет новых событий запуска метода

Тревожный признак

Задание продолжает запускаться — отключён не тот экземпляр или заданий несколько

Консоль заданий
Норма

Задание отображается как выключенное

Тревожный признак

Задание активно — проверьте, в той ли базе выполнялся код

Типичные ошибки
01
Забыли вызвать Записать() — изменение свойства в памяти не сохраняется в базе
02
Отбор по наименованию вместо ИмяМетода — задание не найдено, массив пуст, код отработал «молча»
03
Выполнение кода на клиенте — менеджер РегламентныеЗадания доступен только на сервере
04
Отключили задание в рабочей базе вместо копии — остановились реальные обмены и рассылки
05
Нет прав администратора — метод Записать() вызывает ошибку доступа

Ограничения и права доступа

Запись регламентных заданий требует права администрирования. Если код выполняется под пользователем без таких прав, вызов Записать() завершится ошибкой. Обходной путь — выполнение в привилегированном режиме через УстановитьПривилегированныйРежим(Истина) в серверном общем модуле, но злоупотреблять этим не стоит: привилегированный режим обходит все проверки прав.

В клиент-серверном варианте отключение через свойство Использование работает независимо от настроек кластера. Однако если на уровне кластера задания заблокированы целиком, включение свойства обратно не запустит выполнение — сначала нужно снять блокировку в консоли кластера.

Удобно хранить отключаемые задания списком в константе или параметре обработки: при развёртывании новой копии базы одна процедура пройдёт по списку и выключит всё лишнее, не требуя ручной правки кода.
ПЗ
Практическое замечание

Частые вопросы

Можно ли отключить регламентное задание без конфигуратора?

Да. Достаточно внешней обработки или консоли кода, запущенной в режиме предприятия под пользователем с правами администратора. Изменение свойства Использование не требует изменения конфигурации.

Чем отличается отключение задания от удаления?

Отключение (Использование = Ложь) сохраняет задание в базе с его расписанием и параметрами — его можно включить обратно в любой момент. Удаление методом Удалить() уничтожает экземпляр задания; для предопределённых заданий оно восстановится при обновлении, но с настройками по умолчанию.

Почему задание продолжает выполняться после отключения?

Чаще всего причины две: отключён не тот экземпляр (в базе несколько заданий с одним методом) или код выполнялся в другой базе. Проверьте все задания отбором по ИмяМетода и убедитесь, что отключены все найденные.

Как отключить задания сразу во всех базах кластера?

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

Нужен ли монопольный режим для отключения задания?

Нет, запись регламентного задания не требует монопольного доступа. Но учтите: если в момент записи задание уже выполняется фоновым процессом, текущий запуск завершится, а следующие не начнутся.

Итог

Что важно запомнить

Отключение выполняется через РегламентныеЗадания: найти задание, установить Использование = Ложь, вызвать Записать(). Код работает только на сервере и требует прав администратора. Перед изменениями в рабочей базе делайте копию и проверяйте результат по журналу регистрации.