При автоматизации рутинных операций в 1С нередко возникает необходимость программно запустить внешнюю обработку (файл с расширением .epf), расположенную на локальном диске или в сетевом каталоге. Разберем по шагам, какими способами можно открыть форму внешней обработки в режиме обычного приложения, как передать в нее начальные данные и какие нюансы платформы необходимо учитывать.
Классический подход заключается в создании объекта через менеджер ВнешниеОбработки и дальнейшем получении его формы. Этот способ особенно удобен, если перед показом формы пользователю требуется программно заполнить реквизиты обработки.
Рассмотрим пример кода:
ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";
// Создаем объект внешней обработки
ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКФайлу);
// При необходимости заполняем реквизиты объекта
// ВнешняяОбработка.Организация = ВыбраннаяОрганизация;
// Получаем основную форму обработки и открываем ее
Форма = ВнешняяОбработка.ПолучитьФорму();
Форма.Открыть();
Разберем этот механизм подробнее. Метод ВнешниеОбработки.Создать() загружает файл с диска в память и инициализирует объект. Метод ПолучитьФорму() возвращает основную форму обработки, после чего метод Открыть() отображает ее на экране пользователя.
Если нам не требуется предварительно обращаться к реквизитам объекта или вызывать экспортные процедуры модуля объекта перед показом интерфейса, мы можем получить форму напрямую, не создавая экземпляр объекта явным вызовом Создать().
Посмотрим на пример прямой инициализации формы:
ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";
// Получаем форму напрямую через менеджер
Форма = ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу);
Форма.Открыть();
Метод ВнешниеОбработки.ПолучитьФорму() принимает путь к файлу обработки первым параметром. Дополнительно можно передать имя конкретной неосновной формы, владельца формы и параметры открытия.
В сценариях, когда дальнейшее выполнение исходного программного алгоритма должно быть приостановлено до тех пор, пока пользователь не закроет открытую обработку (или не выберет в ней результат), форму следует открывать модально.
Рассмотрим синтаксис модального вызова:
ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";
Форма = ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу);
// Открытие формы в модальном режиме
Форма.ОткрытьМодально();
При работе с обычными формами внешних обработок важно учитывать технические ограничения среды выполнения:
Интерактивное открытие внешних обработок либо Использование внешних обработок. В противном случае платформа заблокирует вызов с ошибкой нарушения прав.ВнешниеОбработки.Создать() вторым параметром принимает булево значение безопасного режима. Если передано значение Истина, для кода обработки будут ограничены привилегированный режим, работа с COM-объектами и доступ к файловой системе.Проанализируем возможные нештатные ситуации. Файл обработки может быть случайно удален, перемещен или заблокирован антивирусом. Также в модуле обработки могут возникнуть синтаксические ошибки при изменении конфигурации базы данных. Чтобы защитить конфигурацию от аварийного завершения, рекомендуется проверять существование файла и оборачивать вызов в блок обработки исключений.
Посмотрим на итоговый надежный вариант кода:
ПутьКФайлу = "C:\1C\Scale\ТУ_8_3_ОбычныеФормы.epf";
ФайлОбработки = Новый Файл(ПутьКФайлу);
Если Не ФайлОбработки.Существует() Тогда
Предупреждение("Файл внешней обработки не найден по указанному пути: " + Символы.ПС + ПутьКФайлу);
Возврат;
КонецЕсли;
Попытка
ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКФайлу);
Форма = ВнешняяОбработка.ПолучитьФорму();
Форма.Открыть();
Исключение
Предупреждение("Не удалось открыть внешнюю обработку!" + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
Такая конструкция гарантирует корректное информирование пользователя о проблемах с файловой системой или внутренними ошибками инициализации модуля внешней обработки.