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

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

Как открыть внешнюю обработку с управляемой формой в обычном приложении 1С

Как открыть внешнюю обработку с управляемой формой в обычном приложении 1С: методы ПолучитьФорму и ОткрытьФорму, настройка конфигурации, типичные ошибки.

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

Короткий ответ: напрямую управляемая форма в обычном приложении не откроется. Платформа 1С жёстко разделяет два типа интерфейса, и обычное приложение умеет отображать только обычные формы. Однако существуют обходные пути: запуск обработки через управляемое приложение, создание обычной формы-дублёра или вызов обработки программно без открытия формы.

Ниже разобраны все рабочие варианты: от проверки режима запуска конфигурации до программного открытия формы и исправления типичных ошибок вроде «Метод объекта не обнаружен» или пустого окна вместо формы.

Почему управляемая форма не открывается в обычном приложении

Платформа 1С:Предприятие 8 поддерживает две разные технологии построения интерфейса. Обычные формы рисуются целиком на клиенте и жёстко привязаны к пиксельной разметке, а управляемые формы описываются декларативно и строятся платформой с учётом тонкого клиента, веб-клиента и серверной логики. Эти механизмы несовместимы на уровне клиентского приложения.

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

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

Как проверить режим запуска и тип формы обработки

Прежде чем менять код, убедитесь, в каком режиме реально работает база. Откройте конфигуратор, выделите корень дерева конфигурации, вызовите палитру свойств и найдите параметр «Режим запуска» (в новых версиях платформы — «Основной режим запуска»). Если там стоит «Обычное приложение», управляемые формы в интерактивном сеансе недоступны.

Далее проверьте саму внешнюю обработку. Откройте файл .epf в конфигураторе через «Файл → Открыть» и посмотрите ветку «Формы». У каждой формы в свойствах указан тип: обычная или управляемая. Если у обработки есть хотя бы одна обычная форма и она назначена основной, проблема решается без переделки.

Ошибка при открытии«Использование управляемых форм в обычном приложении невозможно»

У обработки только управляемая форма, база в обычном режиме

Обработка открывается пустойОкно появляется без содержимого

Проверить, какая форма назначена основной в свойствах обработки

Обработка работает молчаНикакого окна нет, действие выполнено

Формы нет, код выполняется в модуле объекта — всё в порядке

Способ 1: запустить базу в режиме управляемого приложения

Самый простой вариант, если конфигурация это допускает, — изменить режим запуска. В конфигураторе в свойствах корня конфигурации установите «Режим запуска» в значение «Управляемое приложение» или «Выбирать автоматически», обновите конфигурацию базы данных и перезапустите сеанс. После этого внешняя обработка с управляемой формой откроется стандартно через «Файл → Открыть».

У этого способа есть серьёзное ограничение: типовые конфигурации на обычном приложении (например, старые редакции «Управление торговлей» 10.3 или «Бухгалтерии» 1.6/2.0) не рассчитаны на управляемый режим — интерфейс станет неработоспособным или сильно искажённым. Менять режим запуска в рабочей базе без тестирования на копии нельзя.

Альтернатива без изменения конфигурации — запустить толстый клиент с ключом /RunModeManagedApplication в командной строке или в параметре «/RunModeManagedApplication» дополнительных параметров запуска в списке баз. Тогда конкретный сеанс стартует в управляемом режиме, а остальные пользователи продолжат работать как раньше.

Способ 2: добавить в обработку обычную форму

Если обработка ваша или у вас есть доступ к её исходнику, надёжнее всего создать обычную форму-дублёр. В конфигураторе откройте обработку, в ветке «Формы» добавьте новую форму и в мастере выберите тип «Обычная форма». Перенесите на неё нужные реквизиты и команды, а логику по возможности вынесите в модуль объекта, чтобы не дублировать код.

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

1c
#Если ТолстыйКлиентОбычноеПриложение Тогда
    Форма = ЭтотОбъект.ПолучитьФорму("ФормаОбычная");
    Форма.Открыть();
#Иначе
    ОткрытьФорму("ВнешняяОбработка.МояОбработка.Форма.ФормаУправляемая");
#КонецЕсли

Обратите внимание на инструкции препроцессора #Если ... #КонецЕсли: они вычисляются на этапе компиляции клиентского кода, поэтому ветка для обычного приложения не будет мешать работе в управляемом. Вызов ПолучитьФорму() доступен только в толстом клиенте обычного приложения — в тонком клиенте этого метода нет.

Способ 3: выполнить действия программно без открытия формы

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

1c
Обработка = ВнешниеОбработки.Создать("C:\Обработки\МояОбработка.epf", Ложь);
Обработка.ЗаполнитьНастройки(ПараметрыЗапуска);
Обработка.ВыполнитьОбработку();

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

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

Сравнение подходов и выбор решения

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

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

Запуск в управляемом режиме

Быстро и без доработки обработки, но требует, чтобы конфигурация корректно работала в управляемом приложении

Обычная форма-дублёр

Универсально для обоих режимов, но требует доработки обработки и поддержки двух форм

Программный вызов без формы

Работает везде и подходит для автоматизации, но нет интерактивного интерфейса для пользователя

Маршрут решения

Как выбрать действие

Конфигурация самописная или уже поддерживает управляемый режимПереключите режим запуска или запустите сеанс с ключом /RunModeManagedApplication
Обработка ваша, база на обычном приложении, нужен интерфейсДобавьте в обработку обычную форму и назначьте её основной
Нужно только выполнить действия без окнаСоздайте объект через ВнешниеОбработки.Создать и вызовите экспортную процедуру

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

Самая частая ошибка — «Метод объекта не обнаружен (ПолучитьФорму)». Она возникает, когда код с ПолучитьФорму выполняется в тонком клиенте или на сервере, где этого метода нет. Лечится обрамлением вызова инструкциями препроцессора или проверкой режима.

Вторая распространённая ситуация — обработка открывается, но показывает не ту форму. Причина в том, что основная форма назначена в свойствах обработки, и платформа открывает именно её. Проверьте свойство «Основная форма» в корне обработки и при необходимости смените.

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

Типичные ошибки
01
Вызов ПолучитьФорму в тонком клиенте — метод там отсутствует, нужна проверка режима или препроцессор
02
Перенос кода управляемой формы в обычную без переписывания обращений к элементам — приводит к ошибкам компиляции
03
Смена режима запуска рабочей базы без копии — риск остановить работу всех пользователей
04
Открытие .epf двойным щелчком из проводника — файл откроется в конфигураторе, а не в режиме предприятия

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

Контрольные точки

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

Открытие обработки через Файл → Открыть
Норма

Форма отображается, элементы доступны, кнопки работают

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

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

Программный вызов
Норма

Процедура выполняется, в журнале регистрации нет ошибок

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

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

Работа других пользователей после смены режима
Норма

Сеансы стартуют в привычном интерфейсе

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

Пользователи видят пустой или искажённый интерфейс

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

Итог

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

Управляемая форма в обычном приложении не открывается — это ограничение платформы. Выбирайте один из трёх путей: запуск сеанса в управляемом режиме, обычная форма-дублёр в обработке или программный вызов логики без интерфейса. Любые изменения режима запуска сначала тестируйте на копии базы.

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

Можно ли открыть управляемую форму в обычном приложении через хитрость или настройку?

Нет. Это жёсткое ограничение платформы на уровне клиентского приложения, а не настройка. Обходные пути — только смена режима запуска сеанса, обычная форма-дублёр или работа без формы.

Что делает ключ /RunModeManagedApplication?

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

Обработка без формы запустится в обычном приложении?

Да. Если у обработки нет форм и весь код находится в модуле объекта, она выполнится в любом режиме. Открыть её интерактивно через «Файл → Открыть» тоже можно — просто появится сообщение об отсутствии формы или сработает код инициализации, если он предусмотрен.

Чем ПолучитьФорму отличается от ОткрытьФорму?

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

Можно ли хранить в одной обработке и обычную, и управляемую форму?

Да, это стандартная практика для универсальных обработок. Основной назначают обычную форму (чтобы файл открывался в старых базах), а в коде через проверку режима вызывают нужную форму. Логику при этом выносят в модуль объекта, чтобы не дублировать её в двух формах.

Безопасно ли отключать безопасный режим при создании внешней обработки?

Только для файлов из доверенных источников. Второй параметр метода ВнешниеОбработки.Создать в значении Ложь даёт обработке полный доступ к файловой системе и COM-объектам. Для непроверенных файлов оставляйте безопасный режим включённым.