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

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

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

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

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

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

Ниже разобран полный цикл: от создания объекта метаданных до проверки выполнения и устранения типовых ошибок. Инструкция актуальна для управляемых приложений на платформе 8.3.

Где создаётся объект регламентного задания

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

Основные свойства, которые нужно заполнить:

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

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

Как написать обработчик задания

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

Процедура объявляется с ключевым словом Экспорт и не должна иметь параметров. Пример минимального обработчика:

Процедура ВыполнитьОчисткуЖурнала() Экспорт

ЗаписьЖурналаРегистрации("ОчисткаЖурнала.Начало",

УровеньЖурналаРегистрации.Информация);

// Основная логика задания

УдалитьУстаревшиеЗаписи();

ЗаписьЖурналаРегистрации("ОчисткаЖурнала.Завершение",

УровеньЖурналаРегистрации.Информация);

КонецПроцедуры

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

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

Типичные ошибки в обработчике
01
Процедура без слова Экспорт — задание падает с ошибкой «Метод не обнаружен»
02
Использование Предупреждение() или Сообщить() — в фоновом сеансе вызовы недоступны, сообщения теряются
03
Отсутствие записи в журнал регистрации — при сбое невозможно понять, на каком этапе остановилось задание
04
Транзакция на весь объём данных — длинные транзакции приводят к блокировкам и тайм-аутам

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

После обновления конфигурации откройте в режиме предприятия список регламентных заданий. В типовых конфигурациях он находится в разделе «Администрирование» — «Обслуживание» — «Регламентные и фоновые задания». В пустой конфигурации без БСП список доступен через «Все функции» — «Стандартные» — «Регламентные задания».

Откройте своё задание, установите флаг «Используется» и перейдите по ссылке расписания. Диалог позволяет задать периодичность: ежедневно в указанное время, каждые N минут в интервале, по дням недели, раз в месяц. Для частых запусков учитывайте время выполнения: если задание работает 10 минут, ставить расписание «каждые 5 минут» бессмысленно.

Параметр «Интервал повтора при аварийном завершении» определяет, через сколько секунд задание перезапустится после ошибки, а «Количество повторов» — сколько раз платформа попытается это сделать. Для некритичных задач разумно 2–3 повтора с интервалом в несколько минут.

Порядок настройки расписания
  1. 1
    Откройте список регламентных заданий в режиме предприятия
  2. 2
    Найдите своё задание и установите флаг «Используется»
  3. 3
    Откройте расписание и задайте периодичность запуска
  4. 4
    Укажите интервал и количество повторов при аварийном завершении
  5. 5
    Сохраните и дождитесь ближайшего запуска либо выполните задание вручную

Как проверить, что задание работает

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

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

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

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

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

«Задание выполнено», дата последнего запуска обновилась

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

Статус «Ошибка» или дата запуска не меняется

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

Записи о начале и завершении обработчика

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

Записи с уровнем «Ошибка», отсутствие записи о завершении

Прикладной результат
Норма

Данные созданы или обновлены, как задумано

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

Задание «выполнено», но данные не изменились — логика отработала вхолостую

Если задание «выполняется», но результата нет, чаще всего причина в условии внутри обработчика, которое тихо отсекает все данные, либо в правах: фоновое задание выполняется от имени пользователя, запустившего сеанс, либо от пользователя, указанного в свойстве «Имя пользователя» задания.

Особенности файловых и клиент-серверных баз

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

Для файловой базы есть два решения. Первое — запуск отдельного сеанса с ключом /ExecuteScheduledJobs (в старых версиях — параметр AllowExecuteScheduledJobs через код). Второе — публикация базы на веб-сервере, тогда задания выполняются через веб-сервер. В типовых конфигурациях на БСП файловый режим обрабатывается автоматически: при работе пользователей платформа периодически проверяет и запускает задания.

Отладка и типичные проблемы

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

Типовые проблемы и их причины:

  • «Метод не обнаружен» — неверный путь в свойстве «Метод», отсутствует Экспорт или не установлены флаги серверного модуля;
  • Задание не запускается по расписанию — снят флаг «Используется», файловая база без обслуживающего сеанса, либо задание заблокировано в консоли кластера;
  • Задание зависает — ожидание блокировки данных другим сеансом; проверьте активные сеансы и транзакции;
  • Множественный параллельный запуск — не задан уникальный «Ключ», задания накладываются друг на друга.
Если обработчик нужно вызывать и вручную из интерфейса, вынесите логику в отдельную процедуру общего модуля, а обработчик регламентного задания сделайте тонкой обёрткой. Так код не дублируется, а ручной запуск проходит с теми же проверками, что и фоновый.
ПЗ
Практическое замечание

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

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

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

От имени какого пользователя выполняется задание?

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

Как отключить задание, не удаляя его из конфигурации?

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

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

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

Нужна ли БСП для работы регламентных заданий?

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

Как запустить задание программно из кода?

Используйте метод ФоновыеЗадания.Выполнить("ИмяМодуля.ИмяПроцедуры", Параметры, Ключ, Наименование) — в отличие от регламентного задания, здесь параметры передать можно. Либо найдите задание через РегламентныеЗадания.НайтиПредопределенное() и создайте фоновое задание на его основе.

Итог

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

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