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