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

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

Как открыть форму в 1С: способы, параметры и примеры кода

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

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

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

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

Как пользователю открыть нужную форму без программирования

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

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

Отдельный случай — открытие внешней обработки или отчёта из файла. Для этого используется стандартное меню: Файл → Открыть, затем выбирается файл с расширением .epf или .erf. Учтите, что в некоторых конфигурациях открытие внешних файлов заблокировано настройками безопасности, и пользователь увидит предупреждение или отказ.

Открытие формы методом ОткрытьФорму: базовый синтаксис

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

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

Имя формы строится по шаблону: тип объекта, имя объекта, имя формы — через точки. Для основных форм можно использовать сокращённые имена: ФормаОбъекта, ФормаСписка, ФормаВыбора. Если форма создана разработчиком вручную, указывается её конкретное имя из конфигуратора, например Документ.РеализацияТоваровУслуг.Форма.ФормаПодбора.

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

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

Передача параметров и отборов при открытии

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

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

Отбор = Новый Структура("Контрагент", КонтрагентСсылка);

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

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

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

Открытие формы выбора и получение результата

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

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

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

Процедура ПослеВыбораКонтрагента должна существовать в модуле формы и принимать два параметра: результат выбора и дополнительные параметры. Если описание оповещения не передать, выбор можно получить через обработчик ОбработкаВыбора формы-владельца — этот подход встречается в старом коде.

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

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

Модальное открытие и метод ПолучитьФорму

Метод ОткрытьФормуМодально() блокирует родительское окно до закрытия формы и возвращает результат напрямую, без оповещений. Однако в режиме «Такси» и в веб-клиенте модальные окна либо запрещены, либо требуют специальной настройки: современные браузеры блокируют синхронные модальные диалоги, и платформа по умолчанию работает в асинхронной модели. В новых разработках вместо модального открытия следует использовать ОткрытьФорму с описанием оповещения или методы с постфиксом Асинх.

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

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

Сравнение вариантов

ОткрытьФорму

Универсальный способ для управляемых форм; не возвращает объект формы, результат — через оповещения

ПолучитьФорму + Открыть

Позволяет настроить форму до показа и вызвать её методы; код сложнее и чувствителен к порядку вызовов

ОткрытьФормуМодально

Простой возврат результата, но блокирует интерфейс и ограничен в веб-клиенте и режиме Такси; для новых разработок не рекомендуется

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

Для внешней обработки, подключённой через механизм дополнительных отчётов и обработок, форму открывают по имени вида ВнешняяОбработка.ИмяОбработки.Форма.ИмяФормы. Если обработка открыта пользователем через Файл → Открыть, её основная форма создаётся автоматически, а из её кода дополнительные формы открываются обычным ОткрытьФорму с полным именем.

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

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

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

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

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

Обязательно протестируйте сценарий под учётной записью с правами конечного пользователя. Разработчик часто работает под полными правами, а у пользователя может не быть права «Просмотр» на объект — тогда форма не откроется, и пользователь увидит сообщение о нарушении прав доступа. Также проверьте работу в тонком и веб-клиенте, если используются оба.

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

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

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

Форма появляется без сообщений об ошибке

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

Исключение «Ошибка при вызове метода контекста» — проверяйте имя формы

Переданный объект
Норма

В форме открыт нужный элемент, поля заполнены

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

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

Отбор списка
Норма

Список показывает только нужные строки, отбор виден в панели отбора

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

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

Права пользователя
Норма

Под целевой ролью форма открывается так же, как под администратором

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

Сообщение «Нарушение прав доступа» — нужно настроить роли

Частые вопросы об открытии форм в 1С

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

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

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

Чаще всего неверно указано имя формы: опечатка, пропущен сегмент «Форма.» перед пользовательским именем, либо форма удалена из конфигурации. Откройте конфигуратор, найдите объект, разверните ветку «Формы» и скопируйте точное имя. Также проверьте, что вы не вызываете управляемую форму в обычном приложении.

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

Передайте в ОткрытьФорму описание оповещения — процедура-обработчик будет вызвана после закрытия формы и получит результат. Метод ОткрытьФормуМодально для этого использовать не стоит: в веб-клиенте и режиме Такси модальные окна ограничены или запрещены настройками конфигурации.

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

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

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

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

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

Синтаксис кода одинаков, но в веб-клиенте не работают модальные вызовы и некоторые методы работы с файловой системой. Если код с ОткрытьФорму содержит модальные конструкции, в браузере он может завершиться ошибкой — используйте асинхронные варианты с описаниями оповещений.

Итог

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

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