Как настроить и отладить выполнение регламентного задания во внешней обработке на БСП

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Шаг 1. Подготовка модуля объекта внешней обработки

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.5.12.64");
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Подтверждение заказов (регламент)'");
    НоваяКоманда.Идентификатор = "РегламентноеПодтверждениеЗаказов";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода;
    НоваяКоманда.ПоказыватьОповещение = Истина;
    
    Возврат ПараметрыРегистрации;
КонецФункции

Обратим внимание на ключевой момент: ПараметрыРегистрации.БезопасныйРежим = Ложь. Если ваша обработка должна выполнять запись в базу или работать с файловой системой, безопасный режим может накладывать ограничения. Также крайне важно, чтобы Использование было установлено именно в значение ТипКомандыВызовСерверногоМетода, так как фоновые задания выполняются исключительно на сервере.

Шаг 2. Реализация исполнительного метода

Теперь создадим основную процедуру, которую будет вызывать планировщик. В модуле объекта обязательно должна присутствовать экспортная процедура ВыполнитьКоманду. Именно она является точкой входа при запуске обработки из очереди заданий.


Процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения = Неопределено) Экспорт
    // Диспетчеризация обработчиков команд
    Если ИмяКоманды = "РегламентноеПодтверждениеЗаказов" Тогда
        ПодтвердитьЗаказыПоставщикам(ПараметрыВыполнения);
    КонецЕсли;
КонецПроцедуры

Процедура ПодтвердитьЗаказыПоставщикам(ПараметрыВыполнения)
    // Пример логики: поиск и изменение документов
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЗаказПоставщику.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ЗаказПоставщику КАК ЗаказПоставщику
        |ГДЕ
        |    ЗаказПоставщику.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПоставщикам.Согласован)";
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ОбъектЗаказ = Выборка.Ссылка.ПолучитьОбъект();
        ОбъектЗаказ.Комментарий = ОбъектЗаказ.Комментарий + " [Обработано регламентом]";
        Попытка
            ОбъектЗаказ.Записать();
        Исключение
            ЗаписьЖурналаРегистрации("Ошибка.Регламент", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры

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

Шаг 3. Диагностика запуска: почему задание не выполняется?

Если вы добавили обработку в справочник «Дополнительные отчеты и обработки», настроили расписание, но в журнале регистрации пусто, проанализируем следующие причины:

  1. Блокировка регламентных заданий. Это самая частая причина. В консоли администрирования кластера 1С (для клиент-серверного варианта) или в параметрах информационной базы может стоять флажок «Блокировка регламентных заданий включена». Проверьте этот параметр в первую очередь, используя инструменты для управления регламентными заданиями.
  2. Особенности файлового режима. В файловой базе регламентные задания не запускаются сами по себе «в воздухе». Для их работы должен быть запущен хотя бы один сеанс пользователя (где возможна индикация прогресса выполнения). Именно этот сеанс будет выступать в роли «планировщика». Если база опубликована на веб-сервере, проверьте параметр AllowExecuteScheduledJobs в файле default.vrd.
  3. Очередь заданий БСП. В БСП внешние обработки запускаются через специальный механизм — «Очередь заданий», обеспечивающий запуск фонового задания независимо от места вызова. За это отвечает общее системное регламентное задание «Планировщик заданий обработки очереди». Если оно выключено или зависло, ваши внешние обработки никогда не стартуют.
  4. Права доступа. Фоновое задание выполняется от имени пользователя, указанного в настройках регламентного задания в справочнике «Дополнительные отчеты и обработки». Если пользователь не указан, права могут быть ограничены. Убедитесь, что у выбранного пользователя достаточно прав на чтение и запись соответствующих объектов метаданных.

Шаг 4. Использование Журнала регистрации для отладки

Чтобы понять, доходит ли выполнение до вашего кода, добавим контрольные точки. Это поможет выяснить, запускается ли сама процедура ВыполнитьКоманду.


ЗаписьЖурналаРегистрации("ВнешняяОбработка.Старт", 
    УровеньЖурналаРегистрации.Информация, , , 
    "Начало выполнения регламентного задания");

Разместим эту строку в самом начале процедуры ВыполнитьКоманду. Если после срабатывания расписания запись в журнале не появилась, значит проблема на уровне платформы или настроек БСП (блокировки, очередь заданий). Если запись есть, но результат работы отсутствует — ищите ошибку в логике внутри ПодтвердитьЗаказыПоставщикам.

Шаг 5. Тонкости настройки расписания

Рассмотрим ситуацию с короткими интервалами, например, «каждые 60 секунд». Для файловых баз такой агрессивный график может привести к конфликтам, если предыдущее задание не успело завершиться. Проанализируем состояние через типовой отчет «Фоновые задания» (раздел Администрирование — Обслуживание). В списке заданий ищите те, у которых имя начинается с «Запуск дополнительных обработок...». Там же можно увидеть детальный текст ошибки компиляции, если в коде модуля объекта была допущена синтаксическая ошибка.

Резюме для стабильной работы

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

← На главную