Разработка и Конфигурация · 12 мин
Как вызвать форму в 1С: все рабочие способы
Как вызвать форму в 1С: горячие клавиши, команды интерфейса, методы ОткрытьФорму и ПолучитьФорму, параметры открытия, типичные ошибки и ответы на вопросы.
Форма в 1С — это окно, через которое пользователь или программа взаимодействует с объектом: документом, элементом справочника, отчетом или обработкой. Вызвать форму можно двумя принципиально разными путями: через интерфейс прикладного решения (меню, команды, горячие клавиши) и программно — средствами встроенного языка. Выбор способа зависит от того, кто вы в данный момент: пользователь, которому нужно открыть нужное окно, или разработчик, который открывает форму из кода с параметрами.
У пользователей чаще всего возникают вопросы о том, как открыть форму списка, форму элемента, окно настроек или служебные формы вроде «Все функции». У разработчиков типовые задачи другие: открыть форму выбора с отбором, форму нового документа с заполненными реквизитами, получить форму объекта для дальнейшей работы. Ниже разобраны оба сценария — с конкретными действиями, синтаксисом и типичными ошибками.
Как пользователю открыть форму через интерфейс
В типовых конфигурациях на управляемых формах основной путь к любой форме — панель разделов и панель навигации. Откройте нужный раздел (например, «Продажи» или «Справочники»), затем в списке команд выберите объект: «Реализация товаров и услуг», «Номенклатура» и т.д. Откроется форма списка, а двойной щелчок по строке или кнопка «Создать» вызовут форму элемента или нового документа.
Если нужной команды нет на виду, используйте команду «Все функции». В тонком клиенте она находится в главном меню (круглая кнопка в левом верхнем углу) → «Сервис» → «Все функции»; если пункт скрыт, включите его в параметрах интерфейса. В окне «Все функции» раскройте нужный тип объектов (документы, справочники, регистры) и дважды щелкните по строке — откроется стандартная форма списка.
Дополнительные способы: поле глобального поиска в верхней части окна (введите название документа или контрагента), ссылки в истории работы (меню «Файл» → история) и избранное, куда можно добавить часто используемые формы через звездочку рядом с заголовком окна.
- 1Откройте главное меню (кнопка в левом верхнем углу окна).
- 2Выберите «Сервис» → «Все функции». Если пункта нет — включите его: «Сервис» → «Параметры» → отметка «Отображать команду Все функции».
- 3В дереве найдите нужный тип объекта: Справочники, Документы, Регистры сведений и т.д.
- 4Дважды щелкните по имени объекта — откроется форма списка.
- 5Для открытия конкретного элемента дважды щелкните по строке списка.
Горячие клавиши и быстрый вызов форм
Часть форм вызывается сочетаниями клавиш, что заметно ускоряет работу. Стандартные сочетания платформы: F2 — открыть форму текущего выделенного объекта на редактирование, Ctrl+N — создать новый элемент (в форме списка), F4 — открыть форму выбора в поле ввода, Ctrl+Shift+F4 — очистить поле, F9 — скопировать строку с созданием нового объекта на её основе.
Отдельно стоит команда «Открыть» (Ctrl+O в некоторых режимах) и быстрый переход по навигационной ссылке: любую форму можно открыть по ссылке вида e1cib/data/Справочник.Номенклатура?ref=..., если вставить её в командную строку или передать другому пользователю. Получить ссылку на открытую форму можно через меню формы → «Получить ссылку».
Программный вызов формы: метод ОткрытьФорму()
Основной способ вызвать форму из кода встроенного языка — глобальный метод ОткрытьФорму(). Он принимает полное имя формы и возвращает открытую форму, не блокируя выполнение кода (в управляемом приложении). Минимальный вызов выглядит так:
ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
Полное имя формы строится по шаблону: тип объекта, имя объекта, имя формы. Если форма не указана явно, платформа откроет основную форму, назначенную в конфигураторе: ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента") или короче — ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта").
Второй параметр — структура параметров формы. Через него передают отборы, ключ записи, значения заполнения нового объекта:
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", Контрагент));
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаСписка", ПараметрыФормы);
// Открыть форму конкретного документа по ссылке
ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта",
Новый Структура("Ключ", СсылкаНаДокумент));
// Создать новый документ с заполненными реквизитами
ПараметрыФормы = Новый Структура;
ЗначенияЗаполнения = Новый Структура;
ЗначенияЗаполнения.Вставить("Организация", Организация);
ЗначенияЗаполнения.Вставить("Контрагент", Контрагент);
ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);Модальный вызов и ожидание результата: ОткрытьФормуМодально и оповещения
Когда нужно дождаться, пока пользователь закроет форму, и получить из неё результат (например, выбранный элемент), используют два подхода. Современный — метод ОткрытьФорму() с параметром-описанием оповещения: вы передаете объект ОписаниеОповещения, и после закрытия формы платформа вызовет указанную процедуру, передав в неё результат закрытия.
Оповещение = Новый ОписаниеОповещения("ПослеВыбораКонтрагента", ЭтотОбъект);
ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", , , , , , Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Устаревший вариант — ОткрытьФормуМодально(), который приостанавливает выполнение кода до закрытия окна. Он сохранен для совместимости, но в новых разработках его применять не рекомендуется: модальные вызовы не поддерживаются в веб-клиенте без специальных настроек и блокируют интерфейс. В форме, которая должна вернуть результат, используйте метод Закрыть(РезультатВыбора) или ОповеститьОВыборе().
Метод ПолучитьФорму(): когда нужен сам объект формы
Метод ПолучитьФорму() отличается от ОткрытьФорму() тем, что возвращает сам объект формы ещё до её отображения. Это нужно, когда требуется обратиться к реквизитам, элементам или экспортным процедурам формы — например, заполнить табличную часть обработки программно:
ФормаОбработки = ПолучитьФорму("Обработка.ЗагрузкаДанных.Форма");
ФормаОбработки.ПутьКФайлу = "C:\data\import.xml";
ФормаОбработки.Открыть();
Учтите ограничение: ПолучитьФорму() создает новый экземпляр формы при каждом вызове, если не передан параметр уникальности. Для работы с уже открытой формой лучше использовать оповещения (Оповестить / обработчик ОбработкаОповещения) или параметр «КлючУникальности», чтобы не плодить дубликаты окон одного и того же объекта.
ОткрытьФорму или ПолучитьФорму
Стандартный способ показать форму пользователю. Поддерживает параметры, оповещения о закрытии, режимы окна. Используйте по умолчанию.
Нужен, когда требуется программный доступ к данным и методам формы до её показа. Требует аккуратности: легко создать лишние экземпляры формы.
Открывает стандартную форму объекта по ссылке без указания имени формы. Подходит для универсального кода, где тип объекта заранее неизвестен.
Параметры открытия: отборы, ключи и режимы окна
Метод ОткрытьФорму() принимает до восьми параметров, но на практике чаще всего используются четыре: имя формы, структура параметров, владелец формы и ключ уникальности. Владелец определяет, какое окно будет заблокировано при модальном открытии и куда вернется фокус после закрытия. Ключ уникальности предотвращает повторное открытие той же формы — платформа активирует уже существующее окно.
Стандартные параметры, которые понимают управляемые формы без доработки: Ключ (ссылка на открываемый объект), Отбор (структура отбора для формы списка), ЗначенияЗаполнения (реквизиты нового объекта), РежимВыбора (форма списка открывается для выбора), ЗакрыватьПриВыборе, ТекущаяСтрока (позиционирование в списке).
Режим окна задается седьмым параметром через перечисление РежимОткрытияОкнаФормы: блокировать весь интерфейс, блокировать окно владельца или открывать независимо. Для форм выбора корректный вариант — блокировать окно владельца: пользователь не сможет переключиться, пока не завершит выбор.
Как проверить, что форма открылась правильно
Открыт нужный объект, отбор применен, реквизиты заполнены переданными значениями
Форма пустая или открыт не тот объект — проверьте имя формы и параметр Ключ
Активируется уже открытое окно той же формы
Открываются дубликаты окон — задайте КлючУникальности
После закрытия срабатывает описание оповещения с выбранным значением
Оповещение не вызывается — в форме выбора нет вызова Закрыть() или ОповеститьОВыборе()
Типичные ошибки при вызове форм
Самая частая ошибка — неверное полное имя формы. Платформа сообщает «Ошибка при вызове метода контекста (ОткрытьФорму): Форма не найдена». Проверьте, что форма существует в конфигураторе (ветка объекта → «Формы»), и что имя указано с учетом регистра и иерархии: Справочник.Имя.Форма.ИмяФормы или сокращенно .ФормаСписка / .ФормаОбъекта для основных форм.
Вторая группа ошибок связана с контекстом выполнения. Вызов ОткрытьФорму() доступен только на клиенте: в серверной процедуре с директивой &НаСервере или в фоновом задании он вызовет исключение. Открывайте формы только в клиентских обработчиках (&НаКлиенте) или в общих модулях с признаком «Клиент».
Третья типичная проблема — передача параметров неправильного типа. Отбор в форме списка принимает структуру «имя поля — значение», а не произвольный запрос; параметр Ключ ожидает именно ссылку, а не строку с представлением объекта. Ошибки такого рода проявляются не при открытии, а молчаливым игнорированием параметров — форма открывается, но без отбора или без заполнения.
Часто задаваемые вопросы
Как открыть форму списка с отбором по конкретному контрагенту?
Передайте в ОткрытьФорму() структуру с ключом «Отбор», внутри которой — ещё одна структура «имя поля — значение»: ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", Новый Структура("Отбор", Новый Структура("Контрагент", СсылкаНаКонтрагента))). Поле должно присутствовать в данных списка и быть доступным для отбора.
Как открыть форму и дождаться выбора пользователя?
Создайте описание оповещения с именем процедуры-обработчика, передайте его седьмым параметром в ОткрытьФорму() и установите режим окна «БлокироватьОкноВладельца». В форме выбора завершите работу вызовом Закрыть(ВыбранноеЗначение) — значение придет в параметр обработчика оповещения.
Почему ОткрытьФорму() выдает ошибку «Форма не найдена»?
Причины: опечатка в имени, форма не создана в конфигураторе, либо указана обычная форма, а приложение работает в режиме управляемого приложения (или наоборот). Откройте конфигуратор, найдите объект, раскройте ветку «Формы» и скопируйте точное имя оттуда.
Можно ли открыть форму объекта, не сохраняя его в базу?
Да. Вызовите ОткрытьФорму() с параметром «ЗначенияЗаполнения» без ключа — откроется форма нового объекта с заполненными реквизитами. Запись в базу произойдет только когда пользователь нажмет «Записать» или «Провести».
Как открыть форму внешней обработки из файла?
Через меню «Файл» → «Открыть» укажите файл .epf — обработка откроется в текущем сеансе. Программно в управляемом приложении используют подсистему дополнительных отчетов и обработок либо методы работы с внешними обработками через временное хранилище двоичных данных; прямой вызов ОткрытьФорму() по пути к файлу не предусмотрен.
Чем ОткрытьЗначение() отличается от ОткрытьФорму()?
ОткрытьЗначение(Ссылка) открывает основную форму переданного объекта, не требуя указывать тип объекта и имя формы. Это удобно в универсальном коде, где тип ссылки заранее неизвестен, но не позволяет передать параметры и выбрать конкретную форму.
Что важно запомнить
Пользователь открывает формы через панель навигации, «Все функции» и горячие клавиши; разработчик — методом ОткрытьФорму() с полным именем формы и структурой параметров. Для получения результата выбора используйте описание оповещения, для доступа к данным формы — ПолучитьФорму(). Вызывайте формы только на клиенте, проверяйте точное имя формы и задавайте ключ уникальности, чтобы избежать дублирующихся окон.