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