К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как получить объект внешней обработки в 1С 8

Как получить объект внешней обработки в 1С 8.3: метод ПолучитьОбъект, Создать, работа с файлом epf, типовые ошибки и примеры кода для управляемых форм.

Получить объект внешней обработки в 1С 8 можно несколькими способами: через менеджер внешних обработок, напрямую из файла на диске или через справочник дополнительных отчетов и обработок в БСП. Выбор зависит от того, где хранится обработка — в файловой системе, в составе конфигурации или в базе данных.

Объект обработки нужен, когда требуется программно вызвать экспортную процедуру или функцию обработки, обратиться к её реквизитам и табличным частям либо получить макет. Простое открытие формы обработки объекта не создаёт — для этого существуют отдельные методы, и путать их нельзя.

Ниже разобраны рабочие способы получения объекта с примерами кода для управляемого и обычного приложения, ограничения безопасного режима и типичные ошибки, из-за которых код возвращает «Неопределено» или падает с исключением.

Что такое объект внешней обработки и чем он отличается от формы

Внешняя обработка (файл с расширением .epf) — это самостоятельный программный модуль, который не входит в состав конфигурации, но может выполняться в её контексте. У обработки есть объектная часть: модуль объекта с экспортными процедурами и функциями, реквизиты, табличные части и макеты.

Объект обработки — это экземпляр этой объектной части, созданный в памяти. Через него доступны экспортные методы и данные. Форма обработки — это отдельная сущность для интерактивной работы пользователя; открытие формы не даёт доступа к объекту напрямую, а создание объекта не показывает никакого интерфейса.

Это различие принципиально: если задача — выполнить пакетную операцию без участия пользователя (например, загрузить данные или сформировать файл), нужен именно объект. Если пользователь должен что-то выбрать и нажать кнопку — открывают форму через ПолучитьФорму или ОткрытьФорму.

Получение объекта из файла через ВнешниеОбработки.Создать

Основной способ получить объект обработки, хранящейся в виде файла .epf, — метод Создать менеджера внешних обработок. Важно: метод доступен только на сервере, толстом клиенте и внешнем соединении. В тонком и веб-клиенте вызвать его напрямую нельзя — код нужно размещать в серверной процедуре.

&НаСервере

Функция ПолучитьОбъектОбработки(ПутьКФайлу)

Возврат ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);

КонецФункции

Первый параметр — полный путь к файлу на сервере 1С (именно на сервере, а не на компьютере пользователя, если база клиент-серверная). Второй параметр — признак безопасного режима: если передать Истина, обработка выполнится с ограничениями безопасного режима, что рекомендуется для файлов из недоверенных источников.

После создания объекта можно вызывать его экспортные методы и обращаться к реквизитам:

ОбъектОбработки = ВнешниеОбработки.Создать("C:\Обработки\ЗагрузкаДанных.epf", Ложь);

ОбъектОбработки.КаталогОбмена = "C:\Обмен";

Результат = ОбъектОбработки.ВыполнитьЗагрузку();

Получение объекта обработки, подключенной к базе (БСП)

В конфигурациях на базе Библиотеки стандартных подсистем внешние обработки регистрируются в справочнике «Дополнительные отчеты и обработки», а их двоичные данные хранятся в базе. В этом случае путь к файлу не нужен — объект получают по ссылке на элемент справочника.

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

Метод сам извлекает двоичные данные, сохраняет их во временный файл и создаёт объект. Это удобно для регламентных заданий и серверных вызовов: обработка централизованно обновляется в базе, и все вызовы используют актуальную версию.

Если БСП в конфигурации нет, аналогичную схему реализуют вручную: хранят двоичные данные обработки в хранилище значения, при вызове записывают их во временный файл через ПолучитьИмяВременногоФайла("epf") и затем вызывают ВнешниеОбработки.Создать.

Получение объекта обработки, встроенной в конфигурацию

Если обработка входит в состав конфигурации (ветка «Обработки» в дереве метаданных), объект создаётся через менеджер обработок по имени:

ОбъектОбработки = Обработки.МояОбработка.Создать();

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

Сравнение вариантов

ВнешниеОбработки.Создать(путь)

Подходит для файлов .epf на диске сервера. Требует доступа к файловой системе, работает только на сервере или толстом клиенте.

ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки

Для обработок, зарегистрированных в базе через БСП. Не требует путей к файлам, но нужна подсистема БСП.

Обработки.Имя.Создать()

Для обработок в составе конфигурации. Самый надёжный вариант для постоянной функциональности, но требует обновления конфигурации при изменениях.

Особенности работы в управляемом приложении

В управляемых формах действует строгое разделение контекстов. Клиентская процедура с директивой &НаКлиенте не может вызвать ВнешниеОбработки.Создать в тонком клиенте — будет ошибка «Метод объекта не обнаружен» или недоступность метода. Правильная схема: клиент передаёт путь или ссылку в серверную процедуру, та создаёт объект и выполняет нужную логику.

Ограничение: созданный на сервере объект нельзя вернуть на клиент как значение — тип «ОбработкаОбъект» не сериализуется. Поэтому вся работа с объектом должна завершиться внутри серверного вызова, а на клиент возвращаются только простые данные: строки, числа, структуры, таблицы значений через массивы структур.

Порядок действий в управляемой форме
  1. 1
    Разместите файл .epf в каталоге, доступном серверу 1С
  2. 2
    Напишите серверную функцию, которая вызывает ВнешниеОбработки.Создать(Путь, Ложь)
  3. 3
    В той же серверной функции вызовите нужные экспортные методы объекта
  4. 4
    Верните на клиент результат в виде простых типов или структуры
  5. 5
    На клиенте обработайте результат и при необходимости покажите его пользователю

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

Безопасный режим и права доступа

Второй параметр метода Создать включает безопасный режим, в котором обработке запрещены операции с файловой системой вне разрешённых каталогов, COM-объекты, внешние компоненты и ряд других действий. Если обработка в безопасном режиме падает с ошибкой доступа — значит, она использует запрещённую операцию, и это повод пересмотреть её код, а не автоматически отключать защиту.

Дополнительно на вызов влияют права пользователя: интерактивное открытие внешних обработок регулируется правом «Интерактивное открытие внешних обработок», а в файловой базе при включённой защите от опасных действий платформа запросит подтверждение. В регламентных заданиях подтверждение невозможно, поэтому для фоновых вызовов защиту от опасных действий настраивают заранее в свойствах пользователя или кластера.

Типичные ошибки и их устранение

Самая частая проблема — ошибка «Ошибка создания внешней обработки» или возврат Неопределено. Причины: неверный путь к файлу, файл недоступен серверу, файл повреждён или не является обработкой нужного формата. Проверяйте существование файла через ФайлСуществует или объект Файл до вызова Создать.

Вторая группа ошибок — обращение к несуществующему экспортному методу. Если в модуле объекта обработки процедура не объявлена с ключевым словом Экспорт, вызов извне завершится ошибкой «Метод объекта не обнаружен». Откройте модуль объекта обработки в конфигураторе и проверьте сигнатуры.

Третья типичная ситуация — попытка передать объект обработки между клиентом и сервером или сохранить его в реквизит формы. Это невозможно из-за ограничений сериализации; пересоздавайте объект в каждом серверном вызове или храните только путь к файлу.

Типичные ошибки
01
Вызов ВнешниеОбработки.Создать на клиенте в тонком клиенте — метод недоступен, выносите код на сервер
02
Указание локального пути пользователя в клиент-серверной базе — сервер не видит диск C пользователя
03
Попытка вернуть объект обработки с сервера на клиент — тип не сериализуется, возвращайте только данные
04
Вызов неэкспортной процедуры модуля объекта — ошибка «Метод объекта не обнаружен»
05
Отключение безопасного режима для недоверенных файлов — риск выполнения вредоносного кода с полными правами
Контрольные точки

Как проверить результат

Объект создан
Норма

Переменная содержит значение типа ОбработкаОбъект, ТипЗнч возвращает ожидаемый тип

Тревожный признак

Переменная равна Неопределено или вызов завершился исключением

Экспортный метод доступен
Норма

Вызов метода выполняется без ошибки «Метод объекта не обнаружен»

Тревожный признак

Исключение при вызове — проверьте слово Экспорт в модуле объекта

Путь к файлу
Норма

Файл существует и доступен учётной записи сервера 1С

Тревожный признак

Ошибка создания обработки, файл не найден по указанному пути

Частые вопросы

Можно ли получить объект внешней обработки в тонком клиенте?

Напрямую — нет: метод ВнешниеОбработки.Создать недоступен в тонком клиенте. Разместите создание объекта в серверной процедуре общего модуля с признаком «Сервер» или в серверной части модуля формы, выполните там всю работу с объектом и верните на клиент только результат в виде простых типов данных.

Чем отличается ПолучитьФорму от Создать?

ПолучитьФорму (или ОткрытьФорму) создаёт и открывает интерфейсную форму обработки для интерактивной работы пользователя. Создать создаёт объектную часть обработки в памяти без интерфейса — для программного вызова экспортных методов и доступа к данным. Это независимые механизмы.

Как передать параметры во внешнюю обработку при создании объекта?

У метода Создать нет параметров конструктора. Передайте значения через реквизиты объекта после создания: ОбъектОбработки.ИмяРеквизита = Значение, либо через параметры вызываемого экспортного метода. Если реквизитов в обработке нет, добавьте их в конфигураторе или используйте экспортную процедуру с параметрами.

Почему ВнешниеОбработки.Создать возвращает ошибку, хотя файл открывается интерактивно?

Интерактивное открытие выполняется от имени клиента и видит локальные диски пользователя, а программный вызов на сервере работает от учётной записи службы сервера 1С. Проверьте, что путь указывает на ресурс, доступный серверу, и что у его учётной записи есть права на чтение файла.

Как получить объект обработки из макета или хранилища значения в базе?

Извлеките двоичные данные из хранилища, запишите их во временный файл с расширением .epf через ПолучитьИмяВременногоФайла, затем вызовите ВнешниеОбработки.Создать с путём к этому файлу. После использования временный файл можно удалить — созданный объект в памяти от него не зависит.

Нужно ли освобождать созданный объект обработки?

Специальных действий не требуется: объект уничтожается сборщиком мусора, когда на него не остаётся ссылок. Достаточно не хранить переменную дольше необходимого. В длительных циклах с массовым созданием объектов присваивайте переменной Неопределено после каждой итерации, чтобы не накапливать память сервера.

Итог

Что важно запомнить

Объект внешней обработки создаётся на сервере через ВнешниеОбработки.Создать(Путь, БезопасныйРежим) или через ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки для обработок из базы. Объект нельзя передавать между клиентом и сервером — вся работа с ним выполняется в одном серверном вызове, а на клиент возвращаются только данные.