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

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

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

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

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

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

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

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

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

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

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

Горячие клавиши и быстрый вызов форм

Часть форм вызывается сочетаниями клавиш, что заметно ускоряет работу. Стандартные сочетания платформы: F2 — открыть форму текущего выделенного объекта на редактирование, Ctrl+N — создать новый элемент (в форме списка), F4 — открыть форму выбора в поле ввода, Ctrl+Shift+F4 — очистить поле, F9 — скопировать строку с созданием нового объекта на её основе.

Отдельно стоит команда «Открыть» (Ctrl+O в некоторых режимах) и быстрый переход по навигационной ссылке: любую форму можно открыть по ссылке вида e1cib/data/Справочник.Номенклатура?ref=..., если вставить её в командную строку или передать другому пользователю. Получить ссылку на открытую форму можно через меню формы → «Получить ссылку».

Программный вызов формы: метод ОткрытьФорму()

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

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

Полное имя формы строится по шаблону: тип объекта, имя объекта, имя формы. Если форма не указана явно, платформа откроет основную форму, назначенную в конфигураторе: ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента") или короче — ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта").

Второй параметр — структура параметров формы. Через него передают отборы, ключ записи, значения заполнения нового объекта:

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

ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", Контрагент));

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

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

ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта",

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

1c
// Создать новый документ с заполненными реквизитами
ПараметрыФормы = Новый Структура;
ЗначенияЗаполнения = Новый Структура;
ЗначенияЗаполнения.Вставить("Организация", Организация);
ЗначенияЗаполнения.Вставить("Контрагент", Контрагент);
ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);

Модальный вызов и ожидание результата: ОткрытьФормуМодально и оповещения

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

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

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

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

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

Метод ПолучитьФорму(): когда нужен сам объект формы

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

ФормаОбработки = ПолучитьФорму("Обработка.ЗагрузкаДанных.Форма");

ФормаОбработки.ПутьКФайлу = "C:\data\import.xml";

ФормаОбработки.Открыть();

Учтите ограничение: ПолучитьФорму() создает новый экземпляр формы при каждом вызове, если не передан параметр уникальности. Для работы с уже открытой формой лучше использовать оповещения (Оповестить / обработчик ОбработкаОповещения) или параметр «КлючУникальности», чтобы не плодить дубликаты окон одного и того же объекта.

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

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

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

ПолучитьФорму()

Нужен, когда требуется программный доступ к данным и методам формы до её показа. Требует аккуратности: легко создать лишние экземпляры формы.

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

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

Параметры открытия: отборы, ключи и режимы окна

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

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

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

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

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

Содержимое формы
Норма

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

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

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

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

Активируется уже открытое окно той же формы

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

Открываются дубликаты окон — задайте КлючУникальности

Результат выбора
Норма

После закрытия срабатывает описание оповещения с выбранным значением

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

Оповещение не вызывается — в форме выбора нет вызова Закрыть() или ОповеститьОВыборе()

Типичные ошибки при вызове форм

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

Вторая группа ошибок связана с контекстом выполнения. Вызов ОткрытьФорму() доступен только на клиенте: в серверной процедуре с директивой &НаСервере или в фоновом задании он вызовет исключение. Открывайте формы только в клиентских обработчиках (&НаКлиенте) или в общих модулях с признаком «Клиент».

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

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

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

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

Передайте в ОткрытьФорму() структуру с ключом «Отбор», внутри которой — ещё одна структура «имя поля — значение»: ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", Новый Структура("Отбор", Новый Структура("Контрагент", СсылкаНаКонтрагента))). Поле должно присутствовать в данных списка и быть доступным для отбора.

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

Создайте описание оповещения с именем процедуры-обработчика, передайте его седьмым параметром в ОткрытьФорму() и установите режим окна «БлокироватьОкноВладельца». В форме выбора завершите работу вызовом Закрыть(ВыбранноеЗначение) — значение придет в параметр обработчика оповещения.

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

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

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

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

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

Через меню «Файл» → «Открыть» укажите файл .epf — обработка откроется в текущем сеансе. Программно в управляемом приложении используют подсистему дополнительных отчетов и обработок либо методы работы с внешними обработками через временное хранилище двоичных данных; прямой вызов ОткрытьФорму() по пути к файлу не предусмотрен.

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

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

Итог

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

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