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

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

Как открыть форму из расширения 1С

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

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

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

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

Что нужно подготовить перед открытием формы

Прежде чем открывать форму, убедитесь, что расширение корректно подключено к информационной базе. Откройте в режиме «1С:Предприятие» раздел «Администрирование» → «Печатные формы, отчеты и обработки» → «Расширения» (в некоторых конфигурациях путь отличается) и проверьте, что расширение загружено, активно и у него снят флаг «Безопасный режим», если форма обращается к данным, ограниченным безопасным режимом.

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

Открытие формы расширения программным вызовом

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

ОткрытьФорму("Обработка.МояОбработкаРасширения.Форма.ОсновнаяФорма",

ПараметрыФормы,

ЭтотОбъект,

Новый УникальныйИдентификатор);

Если нужно передать в открываемую форму данные, сформируйте структуру параметров:

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("ДокументОснование", СсылкаНаДокумент);

ПараметрыФормы.Вставить("РежимПросмотра", Истина);

ОткрытьФорму("Обработка.МояОбработкаРасширения.Форма.ОсновнаяФорма",

ПараметрыФормы, ЭтаФорма);

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

Открытие формы списка или элемента собственного справочника

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

// Форма списка

ОткрытьФорму("Справочник.Расш1_ДопСоглашения.ФормаСписка");

// Форма конкретного элемента

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);

ОткрытьФорму("Справочник.Расш1_ДопСоглашения.ФормаОбъекта", ПараметрыФормы);

Обратите внимание: объекты расширения часто получают префикс (например, «Расш1_»), если в свойствах расширения задан префикс имён. Используйте в коде именно то имя, которое видно в дереве метаданных расширения.

bsl
ОткрытьФорму("Обработка.МояОбработка.Форма.ОсновнаяФорма", ПараметрыФормы, ЭтаФорма);

Открытие формы через команду интерфейса

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

В модуле команды напишите вызов формы:

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

ПараметрыФормы = Новый Структура("ДокументОснование", ПараметрКоманды);

ОткрытьФорму("Обработка.МояОбработка.Форма.ОсновнаяФорма",

ПараметрыФормы, ПараметрыВыполненияКоманды.Источник);

КонецПроцедуры

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

Замещение типовой формы формой из расширения

Отдельная задача — сделать так, чтобы вместо типовой формы (например, формы элемента справочника «Номенклатура») открывалась изменённая форма из расширения. Для этого заимствуйте форму в расширение: в конфигураторе найдите типовую форму, правой кнопкой → «Добавить в расширение». Платформа создаст изменяемую форму, которая автоматически будет открываться вместо типовой.

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

Программная доработка без заимствования формы

Если нужно лишь добавить кнопку или изменить поведение, форму заимствовать не обязательно. Достаточно в модуле расширения описать обработчики с аннотациями &После, &Вместо, &Перед:

&НаКлиенте

&После("ПриОткрытии")

Процедура Расш1_ПриОткрытии(Отказ)

// Действия после открытия типовой формы

КонецПроцедуры

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

Открытие формы расширения из типовой формы

Частый сценарий: из типовой формы документа нужно по кнопке открыть собственную форму расширения. Реализуется это связкой «заимствованная форма + своя команда формы». Добавьте типовую форму в расширение, создайте на ней кнопку и в её обработчике вызовите ОткрытьФорму() с путём к форме расширения.

Альтернатива без заимствования — программное создание кнопки в обработчике ПриСозданииНаСервере с аннотацией &После. Команда и кнопка создаются кодом через ЭтаФорма.Команды.Добавить() и ЭтаФорма.Элементы.Добавить(). Это сложнее, но безопаснее при обновлениях.

Порядок действий
  1. 1
    Добавьте в расширение собственную обработку и её форму или заимствуйте типовую форму
  2. 2
    Напишите вызов ОткрытьФорму() с полным путём к форме
  3. 3
    При необходимости добавьте общую команду для кнопки в интерфейсе
  4. 4
    Обновите расширение в базе и перезапустите сеанс
  5. 5
    Проверьте открытие формы и передачу параметров

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Неверный путь к форме в ОткрытьФорму — платформа сообщает, что объект метаданных не найден; проверьте префикс имён расширения
02
Расширение не применено в базе — после загрузки нужно обновить его и перезапустить сеанс
03
Безопасный режим блокирует работу — снимите флаг или настройте профиль безопасности
04
Параметры не объявлены в свойствах формы — обращение к Параметры.Имя вызывает ошибку
05
Форма заимствована, но открывается типовая — проверьте, что расширение активно и нет конфликта с другим расширением, изменяющим ту же форму
Контрольные точки

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

Открытие формы
Норма

Открывается форма с элементами/заголовком из расширения

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

Открывается типовая форма или ошибка «объект не найден»

Передача параметров
Норма

В ПриСозданииНаСервере параметры заполнены

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

Параметры пустые или ошибка обращения к свойству

Обновление конфигурации
Норма

После обновления релиза форма работает

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

Ошибки совместимости, пропали реквизиты

Ограничения и выбор подхода

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

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

Итог

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

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

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

Почему ОткрытьФорму выдаёт ошибку «Объект метаданных не найден»?

Чаще всего неверно указан путь: проверьте точное имя обработки и формы в дереве метаданных расширения, включая префикс (например, «Расш1_»). Также убедитесь, что расширение активно в базе и сеанс перезапущен после его обновления.

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

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

Как открыть форму модально или с ожиданием результата?

Используйте ОткрытьФорму() с указанием описания оповещения о закрытии: передайте объект ОписаниеОповещения, и после закрытия формы выполнится ваш обработчик с возвращённым значением. Прямой модальный вызов ОткрытьМодально() в современных версиях платформы не рекомендуется и часто отключён.

Открывается типовая форма вместо заимствованной — в чём причина?

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

Работает ли открытие форм расширения в веб-клиенте?

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

Нужно ли назначать права на формы расширения?

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