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