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

Разработка и Конфигурация · 11 мин

Как добавить регламентное задание в расширение 1С

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

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

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

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

Требования к платформе и режиму совместимости

Собственные регламентные задания в расширениях поддерживаются начиная с платформы 1С:Предприятие 8.3.11. Если информационная база работает на более ранней версии, объект «Регламентное задание» в палитре расширения будет недоступен — сначала потребуется обновить платформу на сервере и клиентских местах.

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

Также проверьте назначение расширения: для регламентных заданий подходит назначение «Дополнение» или «Адаптация». Расширение с назначением «Исправление» предназначено для точечных патчей и может иметь ограничения на добавление новых объектов.

Создание общего модуля с обработчиком

Обработчик регламентного задания должен располагаться в общем модуле расширения. В конфигураторе откройте расширение, в дереве метаданных найдите ветку «Общие» → «Общие модули» и добавьте новый модуль, например Расш1_ФоновыеЗадания. Префикс помогает отличать объекты расширения от объектов основной конфигурации.

В свойствах модуля установите флажки «Сервер» и «Вызов сервера». Флажок «Клиент» не нужен — регламентные задания выполняются только на сервере. Флажок «Привилегированный режим» ставьте осознанно: он нужен, если обработчик должен обращаться к данным без проверки прав, но расширяет риск при ошибках в коде.

Добавьте в модуль экспортную процедуру без параметров (или с параметрами, если планируете передавать их через свойство «Параметры» задания):

bsl
Процедура Расш1_ВыполнитьОбменДанными() Экспорт
	ЗаписьЖурналаРегистрации("Обмен расширения", УровеньЖурналаРегистрации.Информация, , , "Задание запущено");
	// Основная логика обработчика
	ЗаписьЖурналаРегистрации("Обмен расширения", УровеньЖурналаРегистрации.Информация, , , "Задание завершено");
КонецПроцедуры

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

Добавление регламентного задания в расширение

В дереве метаданных расширения найдите ветку «Общие» → «Регламентные задания» и добавьте новый объект. Заполните ключевые свойства:

  • Имя — уникальный идентификатор, например Расш1_ОбменДанными;
  • Имя метода — полное имя обработчика в формате ИмяОбщегоМодуля.ИмяПроцедуры, например Расш1_ФоновыеЗадания.Расш1_ВыполнитьОбменДанными;
  • Ключ — произвольная строка, запрещающая параллельный запуск заданий с одинаковым ключом; полезно, чтобы исключить дубли выполнения;
  • Использование — флажок активности задания по умолчанию;
  • Наименование — отображаемое название в консоли заданий;
  • Предопределенное — снимите флажок, если не хотите, чтобы задание создавалось автоматически при первом запуске; для заданий расширений чаще оставляют создание через консоль.

Расписание в свойствах задания задать нельзя — оно назначается в режиме предприятия через консоль регламентных заданий или программно. Это сделано намеренно: расписание является данными, а не метаданными, и хранится в очереди заданий конкретной базы.

Порядок действий
  1. 1
    Создайте в расширении общий серверный модуль с экспортной процедурой-обработчиком
  2. 2
    Добавьте в расширение объект «Регламентное задание» и укажите имя метода в формате Модуль.Процедура
  3. 3
    Задайте ключ задания, чтобы исключить параллельные запуски
  4. 4
    Обновите конфигурацию базы данных (F7) и опубликуйте расширение
  5. 5
    В режиме предприятия откройте консоль регламентных и фоновых заданий, найдите задание и настройте расписание
  6. 6
    Выполните задание вручную и проверьте журнал регистрации

Настройка расписания и запуск в режиме предприятия

После обновления базы откройте в режиме 1С:Предприятие стандартную обработку «Регламентные и фоновые задания» (в типовых конфигурациях: «Администрирование» → «Обслуживание» → «Регламентные операции»). Задание из расширения появится в списке под заданным наименованием.

Откройте задание, установите флажок «Используется» и настройте расписание: периодичность, время начала, дни недели. Для файловой базы учтите важное ограничение — регламентные задания выполняются только пока запущен сеанс с включённым выполнением заданий; в клиент-серверном варианте их выполняет кластер серверов независимо от открытых сеансов.

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

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

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

Задание в консоли
Норма

Видно в списке, расписание задано, статус «Выполнено»

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

Задание отсутствует или статус «Ошибка выполнения»

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

Есть записи о запуске и завершении обработчика

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

Записей нет или есть события с уровнем «Ошибка»

Результат обработки
Норма

Данные изменились согласно логике обработчика

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

Задание выполняется, но данные не меняются

Типичные ошибки и их устранение

Самая частая проблема — ошибка «Метод не обнаружен» при запуске. Причины: опечатка в свойстве «Имя метода», процедура не объявлена с ключевым словом Экспорт, модуль не серверный или расширение не применено к базе. Проверьте имя метода посимвольно и убедитесь, что в списке расширений конфигурации ваше расширение активно.

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

Третья типичная ситуация — задание не запускается по расписанию в файловой базе. Это норма, а не сбой: в файловом варианте нет отдельного планировщика, и задания выполняются только в работающем клиентском сеансе. Для автономного выполнения используйте отдельный сеанс с параметром запуска ExecuteScheduledJobs или переходите на клиент-серверный вариант.

Типичные ошибки
01
Указать в «Имя метода» только процедуру без имени модуля — задание упадёт с ошибкой «метод не обнаружен»
02
Забыть слово «Экспорт» у процедуры обработчика — метод будет недоступен планировщику
03
Не задать ключ задания — при ручном запуске возможны параллельные экземпляры и блокировки данных
04
Ожидать автономного выполнения в файловой базе без запущенного сеанса — задание просто не стартует
05
Изменить код обработчика и забыть обновить конфигурацию базы данных — выполняться будет старая версия

Ограничения расширений и альтернативные подходы

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

Если база работает на платформе ниже 8.3.11 и обновление невозможно, собственное регламентное задание в расширении создать не получится. Обходной путь — внешняя обработка, запускаемая по расписанию штатным планировщиком Windows с параметрами командной строки 1cv8.exe ENTERPRISE /Execute, либо заимствование задания через доработку основной конфигурации с последующим контролем при обновлениях.

Сравнение вариантов

Задание в расширении

Основной вариант: не снимает конфигурацию с поддержки, требует платформу 8.3.11+; задание пропадает при отключении расширения

Задание в основной конфигурации

Полный контроль и работа на любой платформе, но усложняет обновление типовой конфигурации

Внешняя обработка + планировщик ОС

Работает без доработки базы, но требует настройки на каждом сервере и хранения учётных данных для запуска

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

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

Почему в расширении недоступен объект «Регламентное задание»?

Проверьте три условия: версия платформы должна быть 8.3.11 или новее, режим совместимости расширения — соответствовать этой версии, назначение расширения — «Дополнение» или «Адаптация». Если хотя бы одно условие не выполнено, ветка будет скрыта или заблокирована.

Можно ли передать параметры в обработчик регламентного задания?

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

Что произойдёт с заданием при отключении расширения?

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

Как отладить обработчик, если задание падает только в фоновом режиме?

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

Можно ли из расширения изменить расписание типового регламентного задания?

Изменить само типовое задание через расширение нельзя, но расписание — это данные, а не метаданные: его может поменять администратор в консоли заданий или программно через менеджер регламентных заданий. Код такой настройки можно разместить в обработчике первого запуска расширения.

Итог

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

Регламентное задание добавляется в расширение в три шага: серверный общий модуль с экспортной процедурой, объект «Регламентное задание» с указанием метода и настройка расписания в консоли заданий. Требуется платформа 8.3.11+, а проверку всегда начинайте с ручного запуска и журнала регистрации.