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