Как программно выполнить процедуру внешней обработки в 1С без открытия формы?

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

Часто в процессе разработки на платформе 1С возникает необходимость вызвать определенную логику, содержащуюся во внешней обработке (epf) или отчете (erf), без необходимости показывать пользователю интерфейс обработки. Например, это может потребоваться для пакетной обработки данных, формирования табличного документа на сервере или вызова вспомогательного функционала. Разберем подробно, как это реализовать правильно и безопасно.

Понимание процесса

Основная ошибка при решении этой задачи заключается в использовании метода ОткрытьФорму. Этот метод предназначен исключительно для вывода интерфейса. Чтобы выполнить код, который находится в Модуле объекта внешней обработки, нам нужно получить экземпляр объекта обработки в коде и обратиться к его экспортным методам напрямую.

Шаг 1: Получение объекта обработки

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

Для обхода блокировок используем объект ОписаниеЗащитыОтОпасныхДействий. Рассмотрим пример реализации:


// ИмяОбработки — путь к файлу или внутреннее имя, полученное после подключения
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;

// Создаем объект обработки без открытия формы
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ИмяФайла, Ложь, ОписаниеЗащиты);

Шаг 2: Обращение к реквизитам и методам

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


// Установка параметров
ВнешняяОбработкаОбъект.Параметр1 = "Значение1";
ВнешняяОбработкаОбъект.ДополнительныеДанные = МояСтруктураДанных;

// Вызов экспортной процедуры
ВнешняяОбработкаОбъект.Инициализировать();

Шаг 3: Работа с БСП (Библиотека стандартных подсистем)

Если ваши обработки зарегистрированы в типовой конфигурации через справочник ДополнительныеОтчетыИОбработки, не нужно работать с файлами напрямую. БСП предоставляет штатные инструменты для управления такими объектами. Это значительно безопаснее и проще в поддержке.

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


// Находим ссылку на обработку в справочнике
СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Имя вашей обработки");

// Получаем объект через механизм БСП
ОбработкаОбъект = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаОбработку);

// Вызываем метод
ОбработкаОбъект.МетодИзМодуляОбъектаСЭкспортом();

Важные рекомендации по безопасности

При использовании программного вызова учитывайте следующие моменты:

  1. Безопасный режим: Если при вызове возникает ошибка безопасности, проверьте настройки профиля безопасности для данной обработки. Если вы разрабатываете обработку самостоятельно, убедитесь, что в функции СведенияОВнешнейОбработке правильно указан параметр БезопасныйРежим = Ложь (если это допустимо политикой вашей компании).
  2. Вызов серверных методов: В функции СведенияОВнешнейОбработке добавьте команду с использованием ВызовСерверногоМетода. Это позволит системе корректно обрабатывать фоновые вызовы без попыток отрисовки интерфейса.
  3. Консолидация логики: Если вы замечаете, что одна внешняя обработка постоянно вызывает другую, возможно, стоит пересмотреть архитектуру и вынести общий код в Общие модули конфигурации. Это избавит вас от необходимости передачи объектов между файлами и упростит отладку.

Итог

Для вызова процедур внешней обработки без интерфейса:

Следуя этим шагам, вы сможете организовать скрытое выполнение любой логики, спрятанной во внешних обработках, сделав вашу систему гибкой и модульной.

← На главную