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

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

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

Структура модуля объекта внешней обработки

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


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

Обратите внимание на использование функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"). Это гарантирует, что структура ПараметрыРегистрации будет содержать все поля, необходимые текущей версии вашей конфигурации (ERP, КА, ЗУП или БП).

Реализация обработчика выполнения: типичная ошибка параметров

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

Рассмотрим правильную сигнатуру метода:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения = Неопределено) Экспорт
    Если ИдентификаторКоманды = "ОсновнаяКоманда" Тогда
        ВыполнитьЛогикуОтправки();
    КонецЕсли;
КонецПроцедуры

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

Почему СообщениеПользователю не работает в фоне

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

Для мониторинга работы фоновых процессов рекомендуется использовать следующие методы:

  1. Журнал регистрации: Используйте метод ЗаписьЖурналаРегистрации. Это единственный надежный способ увидеть историю выполнения и ошибки на сервере.
  2. Создание объектов в базе: Для теста можно записывать дату выполнения в какую-нибудь константу или создавать запись в специально созданном справочнике/регистре сведений.
  3. Текстовые файлы: Запись лога в текстовый файл на диске сервера (при условии, что у пользователя USR1CV8 есть права на запись в эту папку).

Решение проблемы «Изменилась строка соединения информационной базы»

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

Чтобы исправить это, перейдите в раздел Администрирование — Обслуживание. Если база была перенесена или восстановлена из бэкапа, сверху появится уведомление «Информационная база перемещена». Нажмите кнопку «Информационная база перемещена» (подтверждая, что это не копия, а рабочая среда) или временно разблокируйте выполнение заданий через консоль регламентных заданий.

Где искать созданное задание и как его настроить

Посмотрим на процесс подключения по шагам:

  1. Перейдите в Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Нажмите «Добавить из файла» и выберите вашу обработку.
  3. В таблице «Команды» найдите колонку «Расписание». Нажмите на ссылку «Не установлено».
  4. Настройте нужный интервал (например, каждый день или каждые 10 минут).
  5. Важно: Проверьте, что в поле «Публикация» установлено значение «Используется».

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

Нюансы отладки на сервере

Чтобы «поймать» выполнение кода в конфигураторе, выполните следующие действия:

  1. Убедитесь, что сервер 1С запущен с ключом -debug.
  2. В конфигураторе откройте меню Отладка — Подключение.
  3. Нажмите кнопку «Настройка» и убедитесь, что флаг «Автоматически подключать фоновые задания» установлен.
  4. Поставьте точку останова в модуле объекта вашей внешней обработки внутри процедуры ВыполнитьКоманду.
  5. Дождитесь срабатывания задания по расписанию. Конфигуратор должен перехватить управление.

Если автоматическое подключение не срабатывает, используйте «принудительный» метод отладки: временно создайте на форме обработки кнопку, которая вызывает экспортный метод ВыполнитьКоманду. Так вы сможете отладить бизнес-логику в клиентском сеансе, а когда будете уверены в коде, он успешно отработает и в фоне.

← На главную