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

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

Как открыть форму объекта в 1С

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

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

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

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

Самый простой способ — из списка. Откройте нужный раздел (например, «Справочники → Контрагенты» или «Продажи → Реализации товаров») и дважды щёлкните по строке либо выделите её и нажмите Enter. Форма объекта откроется в отдельном окне или вкладке в зависимости от настроек конфигурации.

Если двойной щелчок не срабатывает (например, список открыт в режиме выбора), используйте кнопку «Ещё» в командной панели списка и команду «Открыть» или «Изменить». В режиме выбора форма объекта специально блокируется, чтобы пользователь не редактировал данные при подборе.

Ещё один путь — через поле ввода. Если в документе есть реквизит со ссылкой (например, «Контрагент»), нажмите кнопку открытия (иконка карандаша или стрелки) рядом с полем либо клавишу F4, когда курсор стоит в поле. Откроется форма связанного объекта.

Открытие формы из списка
  1. 1
    Откройте нужный список через меню раздела
  2. 2
    Найдите объект поиском или отбором
  3. 3
    Выделите строку и нажмите Enter или дважды щёлкните
  4. 4
    Если открывается выбор вместо формы — используйте «Ещё → Изменить»
  5. 5
    Проверьте, что открылась карточка именно нужного объекта

Открытие формы из кода: метод ОткрытьФорму

Универсальный способ в управляемом приложении — глобальный метод ОткрытьФорму(). Он принимает имя формы, структуру параметров, владельца и другие аргументы. Чтобы открыть форму существующего объекта, в параметры передают ключ Ключ со ссылкой.

bsl
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", СсылкаНаКонтрагента);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);

Имя формы строится по шаблону: Справочник.ИмяСправочника.ФормаОбъекта или Документ.ИмяДокумента.ФормаДокумента. Если у объекта несколько форм и нужная назначена основной, можно указать просто ФормаОбъекта / ФормаДокумента без имени конкретной формы — платформа подставит основную.

Для открытия формы нового объекта параметр Ключ не передают. Можно передать ЗначенияЗаполнения — структуру с начальными значениями реквизитов, или Основание — ссылку на объект-основание для ввода на основании.

Метод ПоказатьЗначение: простая альтернатива

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

bsl
ПоказатьЗначение(, СсылкаНаДокумент);

// С оповещением после закрытия:
Оповещение = Новый ОписаниеОповещения("ПослеПросмотраОбъекта", ЭтотОбъект);
ПоказатьЗначение(Оповещение, СсылкаНаДокумент);

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

Способы открыть форму объекта

ОткрытьФорму с параметром Ключ

Полный контроль: параметры, владелец, уникальность. Подходит для ввода на основании и передачи настроек

ПоказатьЗначение

Проще всего, когда нужно только показать карточку существующего объекта. Асинхронный, безопасен для веб-клиента

ОткрытьЗначение

Синхронный вариант, устаревает. Не работает при отключённой модальности и в тонком/веб-клиенте в ряде случаев

Параметры, владелец формы и получение результата

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

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

bsl
&НаКлиенте
Процедура ОткрытьКарточку(Команда)
    ПараметрыФормы = Новый Структура("Ключ", Объект.Контрагент);
    ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ЗаписанКонтрагент" Тогда
        ЭтотОбъект.Прочитать();
    КонецЕсли;
КонецПроцедуры

Открытие формы в обычном приложении и внешних обработках

В обычном приложении (толстый клиент, старые конфигурации) форму открывают через объектную модель: Справочники.Контрагенты.ПолучитьФорму(\"ФормаЭлемента\") или метод ПолучитьФорму() у объекта/ссылки. Метод ОткрытьМодально() там работает без ограничений.

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

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

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

Вторая типичная ситуация — открывается пустая форма нового объекта вместо карточки существующего. Это значит, что параметр Ключ пуст или содержит ссылку не того типа. Убедитесь, что переменная заполнена: выведите её в отладчике или через Сообщить().

Типичные ошибки
01
Передача в Ключ значения типа «ДанныеФормыСтруктура» вместо ссылки — форма открывается пустой или с ошибкой
02
Использование модальных методов при запрещённой модальности — исключение в тонком и веб-клиенте
03
Опечатка в имени формы — ошибка «Форма не найдена» при открытии
04
Открытие формы в цикле без уникальности — десятки одинаковых окон одного объекта
Контрольные точки

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

Открылась ли форма нужного объекта
Норма

Заголовок и реквизиты соответствуют переданной ссылке

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

Пустая форма нового объекта — Ключ не передан

Работа в веб-клиенте
Норма

Форма открывается без ошибок

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

Ошибка о модальности — заменить метод на ПоказатьЗначение

Обновление родительской формы
Норма

После записи данные владельца обновились

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

Данные устарели — не обработано оповещение

Часто задаваемые вопросы

Как открыть форму объекта, если известна только навигационная ссылка?

Используйте метод ПерейтиПоНавигационнойСсылке() — платформа сама откроет соответствующую форму. Навигационную ссылку можно получить через ПолучитьНавигационнуюСсылку(Ссылка).

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

Передайте в параметрах структуру ЗначенияЗаполнения с нужными полями или параметр Основание со ссылкой на документ-основание. Реквизиты заполнятся при создании формы до её открытия.

Почему ОткрытьФорму не работает на сервере?

Методы открытия форм доступны только на клиенте — сервер не имеет интерфейса. Вызывайте их из клиентских процедур (директива &НаКлиенте), а данные для параметров готовьте в серверном вызове заранее.

Как открыть форму объекта только для просмотра?

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

Как открыть конкретную неосновную форму объекта?

Укажите полное имя с именем формы из конфигуратора, например Справочник.Номенклатура.Форма.ФормаЭлементаРасширенная. Имя формы видно в палитре свойств объекта метаданных.

Можно ли открыть форму объекта из мобильного клиента?

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

Итог

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

В интерфейсе форму объекта открывают двойным щелчком по списку или клавишей F4 в поле ссылки. В коде управляемого приложения используют ОткрытьФорму с параметром Ключ или ПоказатьЗначение для существующей ссылки. Модальные методы применяйте только если конфигурация это разрешает.