Создание внешних регламентных заданий — это стандартная задача при работе с современными конфигурациями на базе Библиотеки стандартных подсистем (БСП). Такой подход позволяет автоматизировать рутинные операции (рассылку уведомлений, синхронизацию данных, очистку логов) без изменения типовой конфигурации. Однако разработчики часто сталкиваются с тем, что код, успешно работающий «вручную», выдает ошибки при запуске в фоновом режиме. Разберем подробно, как правильно подготовить внешнюю обработку и избежать типовых ловушек.
Для того чтобы система распознала обработку как дополнительную и позволила назначить ей расписание, необходимо правильно описать функцию СведенияОВнешнейОбработке(). Важно понимать, что современные версии 1С требуют строгого соответствия структуры параметров. Проанализируем правильный шаблон заполнения сведений:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Отправка уведомлений (фоновое задание)";
ПараметрыРегистрации.Информация = "Выполняет проверку дат и отправку уведомлений пользователям.";
ПараметрыРегистрации.Версия = "1.1";
ПараметрыРегистрации.БезопасныйРежим = Ложь; // Важно для доступа к почте или файлам
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Запустить процесс отправки";
НоваяКоманда.Идентификатор = "ОсновнаяКоманда";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Обратите внимание на использование функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"). Это гарантирует, что структура ПараметрыРегистрации будет содержать все поля, необходимые текущей версии вашей конфигурации (ERP, КА, ЗУП или БП).
Одной из самых частых ошибок является сообщение: «Недостаточно фактических параметров для метода фонового задания». Выясним причину: универсальный механизм запуска дополнительных обработок в БСП всегда передает два параметра в экспортную процедуру ВыполнитьКоманду. Если ваш метод принимает только один или не принимает их вовсе, задание завершится аварийно.
Рассмотрим правильную сигнатуру метода:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения = Неопределено) Экспорт
Если ИдентификаторКоманды = "ОсновнаяКоманда" Тогда
ВыполнитьЛогикуОтправки();
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьЛогикуОтправки()
// Здесь размещается основной код
ЗаписьЖурналаРегистрации("ВнешнееЗадание", УровеньЖурналаРегистрации.Информация, , , "Задание запущено успешно.");
КонецПроцедуры
Многие начинающие разработчики пытаются отладить фоновое задание через СообщениеПользователю или Предупреждение. Проанализируем ситуацию: фоновое задание выполняется в отдельном сеансе на сервере, у которого нет графического интерфейса (клиента). Объекту Сообщение просто некому отобразить текст. Программа не выдаст ошибку, но сообщение пропадет.
Для мониторинга работы фоновых процессов рекомендуется использовать следующие методы:
ЗаписьЖурналаРегистрации. Это единственный надежный способ увидеть историю выполнения и ошибки на сервере.USR1CV8 есть права на запись в эту папку).Если в журнале регистрации вы видите ошибку «Регламентное задание "Запуск дополнительных обработок" отключено» в сочетании с текстом про перемещение базы, это сработала система защиты БСП. Она блокирует фоновые активности в копиях баз, чтобы, например, тестовая база не начала рассылать реальные уведомления клиентам.
Чтобы исправить это, перейдите в раздел Администрирование — Обслуживание. Если база была перенесена или восстановлена из бэкапа, сверху появится уведомление «Информационная база перемещена». Нажмите кнопку «Информационная база перемещена» (подтверждая, что это не копия, а рабочая среда) или временно разблокируйте выполнение заданий через консоль регламентных заданий.
Посмотрим на процесс подключения по шагам:
Помните, что ваше задание не появится в общем списке регламентных заданий в Конфигураторе. В общем списке за все внешние обработки отвечает одно системное задание — Запуск дополнительных обработок. Оно по очереди опрашивает все подключенные внешние обработки и запускает их согласно их внутреннему расписанию.
Чтобы «поймать» выполнение кода в конфигураторе, выполните следующие действия:
-debug.ВыполнитьКоманду.Если автоматическое подключение не срабатывает, используйте «принудительный» метод отладки: временно создайте на форме обработки кнопку, которая вызывает экспортный метод ВыполнитьКоманду. Так вы сможете отладить бизнес-логику в клиентском сеансе, а когда будете уверены в коде, он успешно отработает и в фоне.