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