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

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

Как открыть форму в 1С: инструкция для пользователей и разработчиков

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

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

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

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

Как пользователю открыть форму через интерфейс

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

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

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

Программное открытие формы методом ОткрытьФорму

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

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

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта");

ОткрытьФорму("Отчет.ПродажиПоМесяцам.ФормаОтчета");

Имя формы можно указать явно (как выше) или опустить конкретную форму — тогда откроется форма по умолчанию для этого типа объекта: ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаСписка") и ОткрытьФорму("Справочник.Номенклатура.ФормаСписка") в большинстве случаев эквивалентны.

Метод работает и на клиенте, и в клиент-серверном вызове, но сам вызов всегда выполняется на клиенте — форма существует только в интерфейсе пользователя. Из серверного контекста форму открыть нельзя: код открытия размещают в клиентских процедурах, например в обработчике команды формы.

Открытие формы конкретного объекта и формы с отбором

Чтобы открыть карточку существующего элемента справочника или документа, передайте в параметрах ключ записи — ссылку на объект. Платформа сама найдёт объект и заполнит форму данными.

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

ПараметрыФормы.Вставить("Ключ", СсылкаНаЭлемент);

ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", ПараметрыФормы);

Чтобы открыть форму списка с уже установленным отбором, передайте структуру отбора. Например, показать пользователю только документы по конкретному контрагенту:

Отбор = Новый Структура;

Отбор.Вставить("Контрагент", ВыбранныйКонтрагент);

ПараметрыФормы = Новый Структура("Отбор", Отбор);

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", ПараметрыФормы);

Для создания нового объекта с предзаполненными реквизитами используйте параметр «ЗначенияЗаполнения»: передайте структуру с именами реквизитов и значениями. Форма нового элемента откроется уже частично заполненной, что удобно для ввода на основании.

Порядок действий
  1. 1
    Определите полное имя формы: тип объекта, имя объекта, имя формы
  2. 2
    Сформируйте структуру параметров: Ключ, Отбор или ЗначенияЗаполнения
  3. 3
    Вызовите ОткрытьФорму из клиентской процедуры
  4. 4
    Проверьте, что форма открылась с нужными данными и отбором

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

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

// В вызывающем коде

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

ПараметрыФормы.Вставить("РежимВыбораТолькоГрупп", Истина);

ОткрытьФорму("ОбщаяФорма.ПодборНоменклатуры", ПараметрыФормы);

// В открываемой форме

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Свойство("РежимВыбораТолькоГрупп") Тогда

// настройка формы под переданный режим

КонецЕсли;

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

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

Оповещение = Новый ОписаниеОповещения("ПослеВыбораЭлемента", ЭтотОбъект);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", , , , , , Оповещение);

&НаКлиенте

Процедура ПослеВыбораЭлемента(Результат, ДопПараметры) Экспорт

Если Результат <> Неопределено Тогда

// работа с выбранным значением

КонецЕсли;

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

Дополнительные параметры вызова: владелец, уникальность, окно

Полная сигнатура метода содержит несколько позиционных параметров после структуры параметров формы. Они управляют поведением окна и повторными вызовами.

  • Владелец — форма-владелец; при её закрытии дочерняя форма тоже закроется, а поле ввода-владелец получит результат выбора.
  • Уникальность — произвольный ключ; если форма с таким ключом уже открыта, вместо новой активируется существующая. Удобно, чтобы не плодить одинаковые окна.
  • Окно — окно программы, в котором откроется форма (актуально для многооконного режима).
  • ОписаниеОповещенияОЗакрытии — обработчик результата, рассмотренный выше.
  • РежимОткрытияОкна — например, блокировать окно владельца или весь интерфейс.

Типовой пример выбора значения в поле ввода с блокировкой владельца:

ПараметрыФормы = Новый Структура("РежимВыбора", Истина);

ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы,

Элементы.Контрагент, , , , ,

РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

Стандартные параметры вроде «РежимВыбора» платформа обрабатывает сама: форма выбора при закрытии вернёт выбранную ссылку в поле ввода-владельца без дополнительного кода.

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

Как проверить, что форма открылась правильно

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

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

Контрольные точки

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

Данные в открытой форме
Норма

Отображается нужный объект или список с заданным отбором

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

Форма пустая, отбор не применён, открыт не тот объект

Повторный вызов
Норма

Активируется уже открытая форма при заданной уникальности

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

Открываются дубликаты одного и того же окна

Закрытие без выбора
Норма

Обработчик оповещения получает Неопределено и корректно его игнорирует

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

Ошибка при обращении к результату без проверки на Неопределено

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

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

Передайте параметр «ЗначенияЗаполнения» со структурой реквизитов: Новый Структура("ЗначенияЗаполнения", Новый Структура("Контрагент", СсылкаНаКонтрагента)). Форма нового объекта откроется с уже заполненным полем, и заполнение пройдёт через стандартную обработку заполнения объекта.

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

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

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

Нет. Форма существует только в клиентском сеансе, поэтому открытие возможно только из клиентского кода. Из серверной логики верните на клиент нужные данные (например, ссылку), а открытие выполните уже в клиентской процедуре.

Как открыть внешнюю обработку программно?

Используйте ОткрытьФорму с указанием полного пути к файлу, например ОткрытьФорму("ВнешняяОбработка.МояОбработка.Форма") после подключения, либо метод глобального контекста для файловых обработок через ПолучитьФорму с путём к epf-файлу. В типовых конфигурациях с БСП применяйте программный интерфейс подсистемы дополнительных отчётов и обработок.

Чем ОткрытьЗначение отличается от ОткрытьФорму?

ОткрытьЗначение открывает объект в форме, назначенной для него по умолчанию, без указания пути к форме: достаточно передать ссылку. Это удобно для универсального кода, когда тип объекта заранее неизвестен. ОткрытьФорму даёт полный контроль над тем, какая именно форма и с какими параметрами откроется.

Как запретить открытие нескольких копий одной формы?

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

Итог

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

Пользователь открывает формы через панель навигации, поиск функций и ссылки в документах. Разработчик — методом ОткрытьФорму с параметрами Ключ, Отбор или ЗначенияЗаполнения, результат получает через описание оповещения, а дубли окон предотвращает параметром уникальности. Модальные вызовы и ПолучитьФорму в новом коде не используют.