Как открыть обычную форму, созданную в расширении конфигурации 1С?

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

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

Выясним причину ошибки: архитектурные ограничения расширений

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

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

Посмотрим на ключевые ограничения, с которыми мы сталкиваемся:

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

Вариант 1. Перевод интерфейса на управляемые формы в расширении

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

Разберем, как получить и открыть управляемую форму из расширения программно:


// Открытие управляемой формы объекта или обработки
ПараметрыФормы = Новый Структура;
Форма = ПолучитьФорму("Обработка.МояДобавленнаяОбработка.Форма.УправляемаяФорма", ПараметрыФормы);
Форма.Открыть();

В этом случае платформа корректно разрешает имя метаданных и отображает форму без исключений.

Вариант 2. Использование внешних обработок (EPF) или отчетов (ERF)

Если специфика доработки требует использования именно обычной формы (например, внедрение специализированных инструментов разработчика, сложных ActiveX-компонентов или отчетов под обычный интерфейс) и при этом нельзя снимать основную конфигурацию с поддержки, рассмотрим вариант с выносом логики во внешнюю обработку.

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

Посмотрим на пример программного открытия обычной формы из внешнего файла:


// Подключение внешней обработки и получение ее обычной формы
ПутьКФайлу = "C:\Dev\МояОбработка.epf";
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);

// Получаем обычную форму напрямую из объекта обработки
Форма = ВнешняяОбработкаОбъект.ПолучитьФорму("Форма");
Форма.Открыть();

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

Вариант 3. Размещение обычной формы в основной конфигурации

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

  1. Включаем возможность редактирования основной конфигурации (с сохранением поддержки).
  2. В палитре свойств корня конфигурации проверяем режим использования: должен быть включен флаг «Использовать обычные формы в управляемом приложении», а основной режим запуска должен предусматривать толстый клиент.
  3. Добавляем требуемую обычную форму непосредственно в основную конфигурацию, а не в расширение.
  4. Вызываем форму стандартным методом:

Форма = ПолучитьФорму("Обработка.ИнструментыРазработчика.Форма.ФормаОбычная");
Форма.Открыть();

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

← На главную