Как программно открыть внешнюю обработку с диска в 1С на обычных формах?

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

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

Способ 1. Создание объекта внешней обработки с последующим открытием формы

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

Рассмотрим пример кода:


ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";

// Создаем объект внешней обработки
ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКФайлу);

// При необходимости заполняем реквизиты объекта
// ВнешняяОбработка.Организация = ВыбраннаяОрганизация;

// Получаем основную форму обработки и открываем ее
Форма = ВнешняяОбработка.ПолучитьФорму();
Форма.Открыть();

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

Способ 2. Прямое получение формы через менеджер внешних обработок

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

Посмотрим на пример прямой инициализации формы:


ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";

// Получаем форму напрямую через менеджер
Форма = ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу);
Форма.Открыть();

Метод ВнешниеОбработки.ПолучитьФорму() принимает путь к файлу обработки первым параметром. Дополнительно можно передать имя конкретной неосновной формы, владельца формы и параметры открытия.

Способ 3. Модальное открытие формы обработки

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

Рассмотрим синтаксис модального вызова:


ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";
Форма = ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу);

// Открытие формы в модальном режиме
Форма.ОткрытьМодально();

Ограничения платформы и контекст исполнения

При работе с обычными формами внешних обработок важно учитывать технические ограничения среды выполнения:

  1. Клиентское окружение: Обычные формы функционируют исключительно в режиме толстого клиента (режимы запуска «Толстый клиент (обычное приложение)» либо «Толстый клиент (управляемое приложение)» с поддержкой обычных форм). В тонком или веб-клиенте данный синтаксис работать не будет.
  2. Права доступа: Пользователь информационной базы должен обладать ролью с правом Интерактивное открытие внешних обработок либо Использование внешних обработок. В противном случае платформа заблокирует вызов с ошибкой нарушения прав.
  3. Безопасный режим: Метод ВнешниеОбработки.Создать() вторым параметром принимает булево значение безопасного режима. Если передано значение Истина, для кода обработки будут ограничены привилегированный режим, работа с COM-объектами и доступ к файловой системе.

Рекомендации по обработке исключительных ситуаций

Проанализируем возможные нештатные ситуации. Файл обработки может быть случайно удален, перемещен или заблокирован антивирусом. Также в модуле обработки могут возникнуть синтаксические ошибки при изменении конфигурации базы данных. Чтобы защитить конфигурацию от аварийного завершения, рекомендуется проверять существование файла и оборачивать вызов в блок обработки исключений.

Посмотрим на итоговый надежный вариант кода:


ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";

ФайлОбработки = Новый Файл(ПутьКФайлу);
Если Не ФайлОбработки.Существует() Тогда
    Предупреждение("Файл внешней обработки не найден по указанному пути: " + Символы.ПС + ПутьКФайлу);
    Возврат;
КонецЕсли;

Попытка
    ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКФайлу);
    Форма = ВнешняяОбработка.ПолучитьФорму();
    Форма.Открыть();
Исключение
    Предупреждение("Не удалось открыть внешнюю обработку!" + Символы.ПС + ОписаниеОшибки());
КонецПопытки;

Такая конструкция гарантирует корректное информирование пользователя о проблемах с файловой системой или внутренними ошибками инициализации модуля внешней обработки.

← На главную