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