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