Разработка и Конфигурация · 8 мин
Как открыть форму объекта в 1С
Как открыть форму объекта в 1С: методы ОткрытьФорму и ПоказатьЗначение, открытие из кода и из интерфейса, параметры, типичные ошибки и примеры.
Открытие формы объекта — одна из самых частых задач при работе с 1С: пользователю нужно быстро перейти к карточке контрагента или документа, а разработчику — программно показать форму из кода, обработчика команды или другой формы. Способ зависит от контекста: интерактивная работа в интерфейсе, код на встроенном языке в управляемом приложении или внешняя обработка.
В управляемом приложении формы открываются асинхронными методами, и прямой вызов ОткрытьФормуМодально() в большинстве конфигураций запрещён. Поэтому важно понимать, какой метод применять в каждой ситуации: ОткрытьФорму(), ПоказатьЗначение() или ОткрытьЗначение(), а также как передавать параметры и получать результат закрытия.
Как открыть форму объекта в пользовательском режиме
Самый простой способ — из списка. Откройте нужный раздел (например, «Справочники → Контрагенты» или «Продажи → Реализации товаров») и дважды щёлкните по строке либо выделите её и нажмите Enter. Форма объекта откроется в отдельном окне или вкладке в зависимости от настроек конфигурации.
Если двойной щелчок не срабатывает (например, список открыт в режиме выбора), используйте кнопку «Ещё» в командной панели списка и команду «Открыть» или «Изменить». В режиме выбора форма объекта специально блокируется, чтобы пользователь не редактировал данные при подборе.
Ещё один путь — через поле ввода. Если в документе есть реквизит со ссылкой (например, «Контрагент»), нажмите кнопку открытия (иконка карандаша или стрелки) рядом с полем либо клавишу F4, когда курсор стоит в поле. Откроется форма связанного объекта.
- 1Откройте нужный список через меню раздела
- 2Найдите объект поиском или отбором
- 3Выделите строку и нажмите Enter или дважды щёлкните
- 4Если открывается выбор вместо формы — используйте «Ещё → Изменить»
- 5Проверьте, что открылась карточка именно нужного объекта
Открытие формы из кода: метод ОткрытьФорму
Универсальный способ в управляемом приложении — глобальный метод ОткрытьФорму(). Он принимает имя формы, структуру параметров, владельца и другие аргументы. Чтобы открыть форму существующего объекта, в параметры передают ключ Ключ со ссылкой.
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", СсылкаНаКонтрагента);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);Имя формы строится по шаблону: Справочник.ИмяСправочника.ФормаОбъекта или Документ.ИмяДокумента.ФормаДокумента. Если у объекта несколько форм и нужная назначена основной, можно указать просто ФормаОбъекта / ФормаДокумента без имени конкретной формы — платформа подставит основную.
Для открытия формы нового объекта параметр Ключ не передают. Можно передать ЗначенияЗаполнения — структуру с начальными значениями реквизитов, или Основание — ссылку на объект-основание для ввода на основании.
Метод ПоказатьЗначение: простая альтернатива
Если нужно просто показать пользователю карточку объекта без передачи сложных параметров, удобнее метод ПоказатьЗначение(). Он сам определяет, какую форму открыть для переданной ссылки, и работает асинхронно — не блокирует интерфейс.
ПоказатьЗначение(, СсылкаНаДокумент);
// С оповещением после закрытия:
Оповещение = Новый ОписаниеОповещения("ПослеПросмотраОбъекта", ЭтотОбъект);
ПоказатьЗначение(Оповещение, СсылкаНаДокумент);Метод ОткрытьЗначение() делает то же самое синхронно, но в конфигурациях с отключённой модальностью и в веб-клиенте его применение ограничено. Для новых разработок предпочтителен ПоказатьЗначение().
Способы открыть форму объекта
Полный контроль: параметры, владелец, уникальность. Подходит для ввода на основании и передачи настроек
Проще всего, когда нужно только показать карточку существующего объекта. Асинхронный, безопасен для веб-клиента
Синхронный вариант, устаревает. Не работает при отключённой модальности и в тонком/веб-клиенте в ряде случаев
Параметры, владелец формы и получение результата
Третий аргумент ОткрытьФорму() — владелец формы. Если передать текущую форму, открытая карточка будет связана с ней: закрытие родителя закроет и дочернюю форму, а оповещения о выборе придут именно владельцу. Это важно при реализации подбора.
Чтобы получить результат после закрытия формы, используют описание оповещения. В форме объекта при записи платформа сама генерирует оповещение ЗаписанОбъект / событие Оповестить, которое можно перехватить в обработчике ОбработкаОповещения формы-владельца.
&НаКлиенте
Процедура ОткрытьКарточку(Команда)
ПараметрыФормы = Новый Структура("Ключ", Объект.Контрагент);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ЗаписанКонтрагент" Тогда
ЭтотОбъект.Прочитать();
КонецЕсли;
КонецПроцедурыОткрытие формы в обычном приложении и внешних обработках
В обычном приложении (толстый клиент, старые конфигурации) форму открывают через объектную модель: Справочники.Контрагенты.ПолучитьФорму(\"ФормаЭлемента\") или метод ПолучитьФорму() у объекта/ссылки. Метод ОткрытьМодально() там работает без ограничений.
Во внешних обработках, запускаемых в управляемом приложении, действуют те же правила: ОткрытьФорму() и ПоказатьЗначение(). Если обработка должна работать и в веб-клиенте, избегайте модальных вызовов и проверяйте доступность методов через #Если ВебКлиент Тогда при необходимости.
Типичные ошибки и их устранение
Частая ошибка — «Форма не найдена». Причины: опечатка в имени объекта метаданных, форма с таким именем не создана в конфигураторе, либо указано ФормаОбъекта для объекта, у которого основная форма не назначена. Проверьте точное имя формы в конфигураторе.
Вторая типичная ситуация — открывается пустая форма нового объекта вместо карточки существующего. Это значит, что параметр Ключ пуст или содержит ссылку не того типа. Убедитесь, что переменная заполнена: выведите её в отладчике или через Сообщить().
Как проверить результат
Заголовок и реквизиты соответствуют переданной ссылке
Пустая форма нового объекта — Ключ не передан
Форма открывается без ошибок
Ошибка о модальности — заменить метод на ПоказатьЗначение
После записи данные владельца обновились
Данные устарели — не обработано оповещение
Часто задаваемые вопросы
Как открыть форму объекта, если известна только навигационная ссылка?
Используйте метод ПерейтиПоНавигационнойСсылке() — платформа сама откроет соответствующую форму. Навигационную ссылку можно получить через ПолучитьНавигационнуюСсылку(Ссылка).
Как открыть форму нового документа с заполненными реквизитами?
Передайте в параметрах структуру ЗначенияЗаполнения с нужными полями или параметр Основание со ссылкой на документ-основание. Реквизиты заполнятся при создании формы до её открытия.
Почему ОткрытьФорму не работает на сервере?
Методы открытия форм доступны только на клиенте — сервер не имеет интерфейса. Вызывайте их из клиентских процедур (директива &НаКлиенте), а данные для параметров готовьте в серверном вызове заранее.
Как открыть форму объекта только для просмотра?
Передайте в параметрах формы ТолькоПросмотр со значением Истина. Форма откроется в режиме чтения: поля будут недоступны для редактирования, кнопки записи заблокированы.
Как открыть конкретную неосновную форму объекта?
Укажите полное имя с именем формы из конфигуратора, например Справочник.Номенклатура.Форма.ФормаЭлементаРасширенная. Имя формы видно в палитре свойств объекта метаданных.
Можно ли открыть форму объекта из мобильного клиента?
Да, ОткрытьФорму() и ПоказатьЗначение() работают в мобильном клиенте, но форма должна быть адаптирована под мобильный интерфейс, иначе отобразится некорректно или не откроется.
Что важно запомнить
В интерфейсе форму объекта открывают двойным щелчком по списку или клавишей F4 в поле ссылки. В коде управляемого приложения используют ОткрытьФорму с параметром Ключ или ПоказатьЗначение для существующей ссылки. Модальные методы применяйте только если конфигурация это разрешает.