Администрирование · 12 мин
1С: как отключить регламентные задания программно
Как программно отключить регламентные задания в 1С: методы ПолучитьРегламентныеЗадания, УстановитьИспользование, работа в файловой и клиент-серверной базе.
Регламентные задания в 1С выполняют фоновую синхронизацию, загрузку курсов валют, обмен данными и десятки других операций. Иногда их нужно отключить: при копировании рабочей базы в тестовую, при переносе на другой сервер, при отладке или когда задание мешает обновлению конфигурации. Делать это вручную через консоль заданий долго, особенно если баз много, поэтому на практике применяют программное отключение через встроенный язык.
В платформе 1С:Предприятие 8.3 для этого существует менеджер регламентных заданий — объект РегламентныеЗадания. Он позволяет получить список заданий, найти нужное по имени или метаданным и снять флаг использования. Код выполняется на сервере, поэтому работает и в файловом, и в клиент-серверном варианте, хотя нюансы между ними есть.
Ниже разобраны основные способы: отключение одного задания, массовое отключение всех заданий базы, блокировка через константу в типовых конфигурациях и типичные ошибки, из-за которых задания «не отключаются» или включаются обратно.
Где хранятся регламентные задания и что именно отключается
Регламентное задание — это объект метаданных (расписание и привязка к методу общего модуля) плюс его экземпляр в информационной базе с фактическими настройками: флагом «Использование», расписанием, именем пользователя, от имени которого выполняется задание. Конфигуратор задаёт задание «по умолчанию», а в базе хранится его рабочая копия, которую и меняет администратор или код.
Отключение сводится к установке свойства Использование в Ложь у экземпляра задания в базе. Сами метаданные при этом не трогаются — после обновления конфигурации задание останется отключённым, потому что платформа при обновлении не перезаписывает признак использования существующих заданий (за редкими исключениями при первоначальном создании).
Важно понимать разницу: отключение задания не прерывает уже запущенный фоновый процесс. Если задание выполняется прямо сейчас, оно завершится, но следующий запуск по расписанию не произойдёт. Для аварийной остановки текущего выполнения используют консоль кластера или метод отмены фонового задания.
Как отключить одно регламентное задание программно
Базовый сценарий: найти задание по имени метаданных и снять флаг использования. Код выполняется в контексте, где доступен сервер, — в модуле внешней обработки с вызовом сервера, в фоновом задании или через «Выполнить» в консоли кода.
Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.СинхронизацияДанных);
Найденные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
Для Каждого Задание Из Найденные Цикл
Задание.Использование = Ложь;
Задание.Записать();
КонецЦикла;
Если известен уникальный идентификатор задания (его можно увидеть в консоли заданий или получить ранее через свойство УникальныйИдентификатор), поиск быстрее и точнее:
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(
Новый УникальныйИдентификатор("здесь-uuid-задания"));
Если Задание <> Неопределено Тогда
Задание.Использование = Ложь;
Задание.Записать();
КонецЕсли;
Метод Записать() обязателен: без него изменение свойства живёт только в памяти и теряется после завершения кода. Это самая частая причина жалоб «отключил, а оно всё равно работает».
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Ид);
Задание.Использование = Ложь;
Задание.Записать();Как массово отключить все регламентные задания в базе
Типовая задача при создании тестовой копии рабочей базы: отключить вообще всё, чтобы копия не начала отправлять письма, выполнять обмены с реальными системами и дублировать выгрузки. Для этого перебирают полный список заданий без отбора.
ВсеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из ВсеЗадания Цикл
Если Задание.Использование Тогда
Задание.Использование = Ложь;
Задание.Записать();
КонецЕсли;
КонецЦикла;
Проверка Если Задание.Использование нужна, чтобы не выполнять лишние записи: каждая запись задания — это обращение к базе, и на сотнях заданий экономия заметна. Записывать стоит только те, у которых флаг реально был установлен.
В типовых конфигурациях на БСП (Библиотека стандартных подсистем) есть более правильный путь: процедуры копирования базы сами вызывают механизм блокировки регламентных заданий при работе с копией. Если вы пишете свою обработку подготовки тестовой базы, ориентируйтесь на константу блокировки — об этом ниже.
- 1Получите список: РегламентныеЗадания.ПолучитьРегламентныеЗадания() без отбора
- 2В цикле проверьте свойство Использование и установите Ложь
- 3Вызовите Записать() только у изменённых заданий
- 4Проверьте результат через консоль заданий или повторным получением списка
Отключение через константу блокировки в типовых конфигурациях
В конфигурациях на базе БСП (1С:ERP, Управление торговлей, Комплексная автоматизация, ЗУП и другие) есть штатный механизм: константа РегламентныеЗаданияИспользуются или аналогичный функциональный признак. Пока она снята, задания не запускаются, даже если у каждого из них стоит флаг «Использование». Это удобнее точечного отключения: одно действие гасит всю фоновую активность базы.
Константы.РегламентныеЗаданияИспользуются.Установить(Ложь);
У этого подхода есть важное преимущество перед перебором: при обновлении конфигурации новые задания, которые поставляются включёнными по умолчанию, тоже не начнут работать — блокировка действует на уровне механизма запуска, а не отдельных флагов. При переборе новые задания придётся отключать повторно после каждого обновления.
Проверьте в вашей конфигурации точное имя константы: в разных версиях БСП оно может отличаться, а в самописных конфигурациях такого механизма может не быть вовсе. Откройте ветку «Константы» в конфигураторе и найдите элементы со словами «Регламентные» или «Задания».
Особенности файлового и клиент-серверного режимов
В клиент-серверном варианте регламентные задания выполняет сервер 1С, и программное отключение работает так, как описано выше, без дополнительных условий. Изменение вступает в силу сразу после записи: планировщик сервера учитывает актуальное состояние задания при следующем срабатывании расписания.
В файловом варианте фоновые задания обслуживает отдельный процесс или сеанс, запущенный с соответствующим параметром, либо выполнение инициируется из клиентского приложения. Программное отключение работает так же, но стоит помнить: если базу открывают в нескольких сеансах, задания могут запускаться из любого из них, пока флаг использования установлен. После отключения запуск прекращается во всех сеансах.
Дополнительно в файловом режиме администраторы иногда отключают задания на уровне запуска — параметром командной строки, запрещающим выполнение регламентных заданий. Это не заменяет программное отключение в базе, а дополняет его: при переносе базы на сервер параметр перестанет действовать, а снятые флаги останутся.
Способы отключения
Точечный контроль, сохраняется при обновлении. Требует записи каждого задания и повторной обработки новых заданий.
Одно действие гасит всю фоновую активность, включая будущие задания. Доступно только в конфигурациях на БСП.
Быстро и без кода, но действует вне базы: при переносе или смене настроек эффект теряется.
Проверка результата и типичные ошибки
После отключения убедитесь, что задания действительно не выполняются. Самый надёжный признак — журнал регистрации: отфильтруйте события по фоновым заданиям и проверьте, что после момента отключения новых запусков нет. Дополнительно откройте консоль заданий (в типовых — «Администрирование → Обслуживание → Регламентные операции») и посмотрите состояние флагов.
Если задание продолжает запускаться, причины обычно такие: забыли вызвать Записать(); отключили одно задание, а работает другое с похожим именем; код выполнился в тестовой базе, а проверяете рабочую; либо задание включил обратно прикладной код — некоторые обработчики обновления и настройки обменов сами устанавливают флаг использования.
Обратная ситуация тоже встречается: после возврата флага задание не запускается. Проверьте, что у задания задано расписание и указан пользователь, от имени которого оно выполняется, — в клиент-серверном режиме задание без пользователя может не стартовать. Также убедитесь, что не снята константа блокировки на уровне всей базы.
Как проверить результат
«Использование» снято у нужного задания
Флаг установлен — запись не выполнилась или отключено другое задание
После отключения нет событий запуска задания
Появляются новые записи о выполнении — задание всё ещё активно
Состояние соответствует ожиданию: база заблокирована или разблокирована целиком
Константа противоречит флагам — часть логики работает непредсказуемо
Когда программное отключение не подходит
Программный способ требует права на изменение регламентных заданий — обычно это полные права или роль администратора. Пользователь без этих прав получит исключение при вызове Записать(). Если код выполняется в привилегированном режиме, прав не требуется, но осознанно отдавать такую возможность прикладным процедурам стоит только после проверки безопасности.
Если нужно временно приостановить задания на время регламентных работ — обновления, загрузки большого объёма данных — иногда проще остановить их через консоль кластера или штатную обработку, чем писать код. Программный вариант оправдан там, где действие повторяется: скрипты подготовки копий, автоматическое обслуживание групп баз, обработчики первого запуска.
Не отключайте задания вслепую в рабочей базе: часть из них критична для учёта. Перед массовым отключением составьте список того, что было включено, — например, выгрузите имена и идентификаторы в таблицу значений и сохраните. Тогда восстановление будет управляемым, а не по памяти.
Частые вопросы
Отключится ли задание, если просто удалить расписание?
Нет, это ненадёжно. Задание без расписания может не запускаться по таймеру, но остаётся доступным для принудительного запуска из кода и консоли. Правильный способ — установить свойство Использование в Ложь и записать задание.
Сохранится ли отключение после обновления конфигурации?
Да, для существующих заданий платформа не перезаписывает признак использования при обновлении. Исключение — вновь добавленные в конфигурацию задания: они создаются с настройками по умолчанию и могут оказаться включёнными. В конфигурациях на БСП от этого защищает константа блокировки.
Можно ли отключить задание из внешней обработки?
Да, если код выполняется на сервере (директива &НаСервере или вызов серверной процедуры) и у пользователя есть права на изменение регламентных заданий. В файловом режиме достаточно полных прав, в клиент-серверном — соответствующей роли.
Как отключить задание, если неизвестен его идентификатор?
Используйте ПолучитьРегламентныеЗадания с отбором по метаданным или по наименованию: передайте структуру с ключом «Метаданные» или «Наименование». Отбор по метаданным надёжнее, так как наименование пользователь может изменить.
Чем отличается регламентное задание от фонового?
Регламентное — это планировщик: объект с расписанием, который порождает выполнение. Фоновое задание — сам процесс выполнения. Отключая регламентное задание, вы прекращаете порождение новых фоновых, но уже запущенное фоновое задание нужно останавливать отдельно.
Задание включилось обратно само — почему?
Чаще всего это делает прикладной код: обработчики обновления, помощники настройки обменов и синхронизаций при записи настроек устанавливают флаг использования. Найдите в конфигураторе все места, где у этого задания меняется свойство Использование, и скорректируйте логику или отключите соответствующую настройку обмена.
Что важно запомнить
Программное отключение — это установка Использование = Ложь и вызов Записать() у найденного задания. Для массовой блокировки в типовых конфигурациях надёжнее константа БСП, а перед отключением в рабочей базе обязательно зафиксируйте список активных заданий для восстановления.