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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе «1С:Предприятие 8» программисты часто сталкиваются с ситуацией, когда необходимо использовать современные интерфейсные решения в устаревших конфигурациях, работающих в режиме обычного приложения. Одним из самых частых вопросов является возможность запуска управляемой формы (УФ), созданной внутри внешнего файла обработки (.epf) или отчета (.erf), без перехода всей системы на управляемый интерфейс. Давайте подробно разберем, почему возникает эта проблема, какие ограничения накладывает платформа и существуют ли способы их обхода.

Анализ проблемы: почему флаг в настройках не помогает?

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

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

Техническая причина ограничения

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

Для внешних файлов (.epf) платформа не создает полноценный контекст «управляемого приложения». Когда мы пытаемся программно вызвать форму, используя стандартный метод:


Форма = ВнешниеОбработки.ПолучитьФорму("C:\MyFolder\MyReport.epf", "ФормаУправляемая");
Форма.Открыть();

Система в обычном приложении выдает ошибку, сообщающую, что форма не найдена. Пространство имен ВнешняяОбработка в данном режиме просто «не видит» коллекцию управляемых форм внешнего файла. Это жесткое ограничение платформы, которое сохраняется во всех версиях, включая 8.2 и 8.3.

Вариант решения №1: Интеграция в состав конфигурации

Рассмотрим самый надежный и полноценный способ решения задачи. Если вам жизненно необходимо использовать управляемую форму конкретной обработки в обычном приложении, её нужно перестать считать «внешней».

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

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

ОткрытьФорму("Обработка.ИмяВашейВстроеннойОбработки.Форма.ИмяУправляемойФормы");

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

Вариант решения №2: Программный «контейнер»

Разберем более сложную схему, которую применяют, когда нельзя часто менять основную конфигурацию. Мы можем создать в конфигурации одну «пустую» обработку-контейнер с управляемой формой. Эта форма будет выступать в роли «холста».

Алгоритм действий будет следующим:

  1. Создаем встроенную обработку КонтейнерУправляемыхФорм.
  2. В управляемой форме этой обработки создаем динамические элементы или используем реквизит типа Строка (HTML) или другие механизмы для отображения данных.
  3. Во внешней обработке описываем логику получения данных.
  4. При запуске передаем данные из внешнего файла во встроенный контейнер через параметры формы.

Однако помните, что этот метод не позволит отобразить именно ту форму, которая нарисована во внешнем файле «как есть». Он лишь дает возможность использовать логику внешнего файла внутри управляемого интерфейса встроенного объекта.

Вариант решения №3: Изменение режима запуска клиента

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

В этом режиме:

Минусом является то, что обычные формы в этом режиме могут отображаться некорректно или требовать дополнительной адаптации, поэтому данный путь требует тщательного тестирования всей системы.

Ограничения взаимодействия форм

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

Для передачи данных используйте:

Подведение итогов

Мы выяснили, что напрямую открыть управляемую форму внешнего файла (.epf) в режиме обычного приложения невозможно из-за архитектурных особенностей платформы 1С. Для решения задачи мы рекомендуем либо встраивать обработку в состав метаданных, либо переводить пользователей на запуск в режиме управляемого приложения. Использование флага в свойствах конфигурации эффективно только для объектов, являющихся частью самой информационной базы.

← На главную