Разработка и Конфигурация · 10 мин
Как вызвать внешнюю обработку в 1С
Как открыть и вызвать внешнюю обработку в 1С: через меню Файл, программно из кода, в управляемых и обычных формах. Примеры, ошибки, FAQ.
Внешняя обработка в 1С — это файл с расширением .epf, который хранится отдельно от конфигурации и выполняет прикладную логику: печать документов, групповые изменения данных, загрузку и выгрузку, сервисные операции. Вызвать её можно двумя принципиально разными способами: интерактивно, через интерфейс пользователя, и программно, из встроенного языка. Выбор зависит от того, кто запускает обработку — пользователь вручную или код конфигурации.
Интерактивный запуск не требует прав разработчика и подходит для разовых задач: бухгалтер открывает файл и нажимает кнопку. Программный вызов нужен, когда обработка должна запускаться из кнопки формы, регламентного задания или другой обработки. Важно понимать, что в управляемом приложении (тонкий и веб-клиент) код выполняется на сервере, и файл обработки должен быть доступен именно серверу, а не только компьютеру пользователя.
Ниже разобраны оба сценария с готовыми примерами кода для управляемых и обычных форм, типичные ошибки и способы проверить, что обработка действительно отработала.
Как открыть внешнюю обработку вручную через интерфейс
Самый простой способ — меню «Файл → Открыть» (в большинстве конфигураций) либо кнопка открытия файла на панели. В диалоге выберите файл с расширением .epf. Платформа загрузит обработку и откроет её основную форму. Если у обработки нет формы, она может выполниться сразу при открытии либо ничего не покажет — это зависит от её модуля объекта.
В типовых конфигурациях на БСП (Библиотека стандартных подсистем) файл часто подключают не напрямую, а регистрируют в справочнике «Дополнительные отчеты и обработки» (раздел «Администрирование → Печатные формы, отчеты и обработки»). После регистрации обработка появляется в общем списке, может быть привязана к конкретным документам и запускается из интерфейса без доступа к файловой системе. Это предпочтительный путь для пользователей без прав администратора.
- 1Откройте меню «Файл → Открыть» или команду открытия файла в интерфейсе
- 2Выберите файл с расширением .epf и подтвердите открытие
- 3При появлении предупреждения безопасности проверьте источник файла и подтвердите запуск
- 4Дождитесь открытия формы обработки и выполните нужное действие
- 5Проверьте результат: изменённые данные, сформированный отчёт или сообщение об успехе
Программный вызов в управляемом приложении
В управляемых формах обработка создаётся на сервере методом ВнешниеОбработки.Создать(). Метод принимает либо полный путь к файлу, либо двоичные данные, либо имя обработки, подключённой через механизм дополнительных отчётов. Второй параметр — безопасный режим: рекомендуется передавать Истина, чтобы код обработки выполнялся с ограничениями.
&НаСервере
Процедура ВыполнитьОбработкуНаСервере()
Обработка = ВнешниеОбработки.Создать("C:\Обработки\МояОбработка.epf", Истина);
Обработка.ВыполнитьОсновноеДействие();
КонецПроцедурыЕсли нужно не выполнить серверный метод, а открыть форму обработки пользователю, используют ПолучитьФорму() с указанием пути к внешней обработке, либо метод ОткрытьФорму() с тем же путём. Путь формируется как «ВнешняяОбработка.ИмяОбработки.Форма.ИмяФормы», где имя обработки — это имя, под которым она зарегистрирована, либо полное имя файла при работе через временное подключение.
Учтите: путь «C:\Обработки\...» — это путь на сервере 1С, если код выполняется в серверном контексте. Для файловой базы, запущенной на том же компьютере, пути совпадают, но в клиент-серверном режиме файл должен лежать на сервере или быть передан туда как двоичные данные через временное хранилище.
Передача файла с клиента на сервер
Когда обработка хранится у пользователя, а выполняться должна на сервере, файл передают через временное хранилище. На клиенте файл помещается в хранилище, на сервере извлекается как двоичные данные и записывается во временный файл, после чего создаётся объект обработки.
&НаКлиенте
Процедура ЗагрузитьИВыполнить(Команда)
НачатьПомещениеФайла(Новый ОписаниеОповещения("ПослеПомещения", ЭтотОбъект), , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьИзХранилища(Адрес)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла("epf");
ДвоичныеДанные.Записать(ИмяФайла);
Обработка = ВнешниеОбработки.Создать(ИмяФайла, Истина);
Обработка.ВыполнитьОсновноеДействие();
УдалитьФайлы(ИмяФайла);
КонецПроцедурыПосле записи временного файла его следует удалять методом УдалитьФайлы(), иначе каталог временных файлов сервера будет разрастаться. Оберните вызов в попытку-исключение: если обработка вызывает ошибку, временный файл всё равно нужно удалить.
Вызов обработки в обычном приложении
В обычных формах (режим толстого клиента) всё проще: код клиента и сервера не разделён, поэтому ВнешниеОбработки.Создать() можно вызывать напрямую с путём на локальном диске, а форму открыть через ПолучитьФорму() у созданного объекта обработки.
Процедура КнопкаВыполнитьНажатие(Кнопка)
Обработка = ВнешниеОбработки.Создать("D:\1C\Обработка.epf");
ФормаОбработки = Обработка.ПолучитьФорму();
ФормаОбработки.Открыть();
КонецПроцедурыОбычное приложение встречается всё реже — современные конфигурации работают в режиме управляемого приложения. Если вы поддерживаете старую базу, проверьте в свойствах конфигурации «Режим использования модальности» и «Основной режим запуска»: от них зависит, какие методы доступны.
Подключение через «Дополнительные отчеты и обработки»
Механизм БСП позволяет хранить обработку внутри базы, а не в файле. Обработка должна содержать экспортную функцию СведенияОВнешнейОбработке() в модуле объекта, которая возвращает структуру с видом обработки, версией и списком команд. После добавления файла в справочник платформа сама регистрирует команды и размещает кнопки в интерфейсе.
Программно такую обработку вызывают через общий модуль ДополнительныеОтчетыИОбработки.ВыполнитьКоманду() или создают объект методом ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(Ссылка). Это удобно для регламентных заданий: обработка хранится в базе, не зависит от файловой системы сервера и централизованно обновляется.
Способы вызова
Подходит для разового ручного запуска. Ограничение: нужен доступ к файлу и подтверждение безопасности при каждом открытии.
Гибкий программный вызов из любого кода. Ограничение: файл должен быть доступен серверу, нужно управлять временными файлами.
Хранение в базе, права, расписание, кнопки в интерфейсе. Ограничение: требуется конфигурация на БСП и функция СведенияОВнешнейОбработке в обработке.
Безопасность и права доступа
Внешняя обработка — это исполняемый код, который получает доступ ко всем данным информационной базы в рамках прав запустившего пользователя. Открытие файла из непроверенного источника равнозначно запуску неизвестной программы: обработка может удалить или изменить данные, отправить их наружу через HTTP-запрос.
Дополнительные меры: включайте безопасный режим при программном создании (второй параметр Истина), ограничивайте права пользователей, которым доступен запуск внешних обработок, и используйте профили групп доступа. В файловых базах администратор может запретить интерактивное открытие внешних файлов через настройки публикации и прав.
Типичные ошибки и их диагностика
Чаще всего вызов обработки завершается ошибкой «Ошибка при вызове метода контекста (Создать)» с пояснением «Файл не обнаружен». Причина почти всегда одна: код ищет файл на сервере, а он лежит на клиенте, либо путь указан с опечаткой. Вторая частая ситуация — «Метод объекта не обнаружен»: вызываемая процедура не объявлена с ключевым словом Экспорт в модуле объекта обработки.
Как проверить результат
Метод Создать() вернул объект без исключения
Возникло исключение «Файл не обнаружен» или «Ошибка компоновки»
Экспортная процедура отработала, данные изменены или сформирован результат
Ошибка «Метод объекта не обнаружен» — проверьте Экспорт у процедуры
Пользователь видит форму обработки и может с ней работать
Форма не открывается — проверьте клиентский контекст вызова и имя формы
FAQ
Можно ли вызвать внешнюю обработку из регламентного задания?
Да. Регламентное задание выполняется на сервере, поэтому обработка создаётся через ВнешниеОбработки.Создать() с путём, доступным серверу, либо через механизм дополнительных отчётов и обработок БСП, где файл хранится в базе. Формы в фоновом задании открыть нельзя — только серверная логика.
Почему обработка открывается у администратора, но не у пользователя?
У пользователя недостаточно прав: нужны права на интерактивное открытие внешних обработок и на объекты данных, к которым обращается код. Проверьте роли пользователя и профиль группы доступа, а также настройки подсистемы дополнительных отчётов, если обработка подключена через неё.
Как передать параметры во внешнюю обработку при вызове?
Два способа: установить значения реквизитов созданного объекта обработки перед вызовом экспортной процедуры, либо передать структуру параметров в ПолучитьФорму()/ОткрытьФорму() — тогда параметры будут доступны в обработчике ПриСозданииНаСервере формы обработки.
Чем внешняя обработка (.epf) отличается от внешнего отчёта (.erf)?
Технически это почти одинаковые объекты, но отчёт ориентирован на формирование табличного документа и обычно содержит схему компоновки данных, а обработка — на выполнение действий. Вызываются они разными менеджерами: ВнешниеОтчеты.Создать() и ВнешниеОбработки.Создать() соответственно.
Можно ли вызвать обработку, не сохраняя её в файл?
Да, если у вас есть двоичные данные обработки (из хранилища, макета или справочника). Запишите их во временный файл на сервере и передайте путь в ВнешниеОбработки.Создать(). Напрямую из двоичных данных без временного файла объект создать нельзя.
Что важно запомнить
Вручную обработка открывается через «Файл → Открыть» или подсистему дополнительных обработок; программно — через ВнешниеОбработки.Создать() на сервере. Ключевые правила: файл должен быть доступен серверу, экспортируемые процедуры объявляются с Экспорт, непроверенные обработки не запускают в рабочей базе.