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