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

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

Как программно открыть элемент справочника в 1С

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

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

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

Что нужно знать перед открытием формы

Форма элемента справочника не может открыться «в вакууме» — платформе требуется идентификатор объекта. В роли такого идентификатора выступает ссылка типа СправочникСсылка.ИмяСправочника. Если у вас есть только код или наименование элемента, сначала нужно получить ссылку методами НайтиПоКоду() или НайтиПоНаименованию().

Второй важный момент — контекст выполнения. В тонком клиенте и веб-клиенте ссылка должна быть доступна на клиенте: если ссылка вычисляется в серверной процедуре, её нужно вернуть на клиент и уже там вызывать открытие формы. Интерактивные действия с формами выполняются только на клиенте.

Третий момент — права. Если у пользователя нет права просмотра элемента справочника, форма не откроется, а пользователь получит сообщение о нарушении прав доступа. Это штатное поведение, а не ошибка кода.

Способ 1. ОткрытьЗначение — самый простой вариант

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

&НаКлиенте

Процедура ОткрытьКарточкуКонтрагента(Команда)

СсылкаНаЭлемент = ПолучитьСсылкуКонтрагента();

Если ЗначениеЗаполнено(СсылкаНаЭлемент) Тогда

ОткрытьЗначение(СсылкаНаЭлемент);

Иначе

ПоказатьПредупреждение(, "Контрагент не найден");

КонецЕсли;

КонецПроцедуры

Метод удобен тем, что не требует знания имени формы и работает для любых ссылочных типов: документов, справочников, задач. Минус — нельзя передать дополнительные параметры, управлять режимом открытия или обработать закрытие формы.

Используйте ОткрытьЗначение, когда нужно просто показать карточку объекта без дополнительной логики — например, по гиперссылке в отчёте или в табличной части.

Способ 2. ОткрытьФорму с параметром Ключ

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

&НаКлиенте

Процедура ОткрытьЭлементНоменклатуры(Команда)

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

ПараметрыФормы.Вставить("Ключ", СсылкаНаНоменклатуру);

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

КонецПроцедуры

Если параметр Ключ не передан, откроется форма нового элемента — это частая причина путаницы. Убедитесь, что ссылка заполнена и имеет правильный тип, иначе платформа либо создаст новый объект, либо выдаст ошибку несоответствия типов.

Через ОткрытьФорму можно дополнительно указать владельца формы, уникальность, окно и описание оповещения о закрытии. Это полезно, когда после редактирования элемента нужно обновить данные в вызывающей форме:

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

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

Сравнение способов открытия

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

Простой вызов одной строкой. Подходит, когда нужно только показать карточку. Нет передачи параметров и обработки закрытия.

ОткрытьФорму с Ключ

Полный контроль: параметры, владелец, оповещение о закрытии. Требует указания точного пути к форме.

ПолучитьФорму (обычное приложение)

Применяется только в обычных формах старых конфигураций. В управляемом приложении недоступен.

Открытие формы нового элемента с заполнением

Обратная задача — открыть форму не существующего, а нового элемента, сразу заполнив часть реквизитов. Для этого вместо Ключ используются параметры ЗначенияЗаполнения или Основание:

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

ЗначенияЗаполнения = Новый Структура;

ЗначенияЗаполнения.Вставить("Наименование", "Новый поставщик");

ЗначенияЗаполнения.Вставить("Родитель", СсылкаНаГруппу);

ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);

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

Значения из структуры попадут в обработчик ОбработкаЗаполнения на стороне объекта, если он предусмотрен конфигурацией. Если типовой обработчик не поддерживает переданные реквизиты, заполнение придётся реализовать самостоятельно в модуле объекта или через событие ПриСозданииНаСервере формы.

Помните: открытая таким способом форма ещё не создаёт запись в базе. Элемент появится в справочнике только после того, как пользователь нажмёт «Записать» или «Записать и закрыть».

Открытие элемента в обычном приложении

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

ФормаЭлемента = СсылкаНаЭлемент.ПолучитьОбъект().ПолучитьФорму("ФормаЭлемента");

ФормаЭлемента.Открыть();

// или через менеджер справочника

Форма = Справочники.Номенклатура.ПолучитьФорму("ФормаЭлемента");

Форма.КлючУникальности = СсылкаНаЭлемент;

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

Обратите внимание: ПолучитьОбъект() выполняет чтение объекта из базы и может вызвать блокировку при модификации. Если нужно только открыть форму без изменения данных, предпочтительнее вариант через менеджер справочника с установкой ключа.

Типичные ошибки и их устранение

Первая ошибка — передача в параметр Ключ пустой ссылки или значения другого типа. Платформа в этом случае открывает форму нового элемента либо генерирует ошибку. Всегда проверяйте ссылку через ЗначениеЗаполнено() перед открытием.

Вторая ошибка — вызов открытия формы на сервере. В управляемом приложении ОткрытьФорму и ОткрытьЗначение доступны только в клиентском контексте. Типовая схема: серверная функция возвращает ссылку, клиентская процедура открывает форму.

Третья ошибка — неверный путь к форме. Строка вида "Справочник.Номенклатура.Форма.ФормаЭлемента" должна точно соответствовать имени формы в конфигураторе. Если форма называется иначе или используется форма по умолчанию, проще указать "Справочник.Номенклатура.ФормаОбъекта" — это универсальный псевдоним основной формы элемента.

Типичные ошибки
01
Передача пустого Ключа — вместо карточки элемента открывается форма нового объекта, пользователь случайно создаёт дубли
02
Вызов ОткрытьФорму в серверной процедуре — ошибка выполнения, так как интерактивные операции доступны только на клиенте
03
Опечатка в пути формы — ошибка «форма не найдена»; используйте универсальный путь ФормаОбъекта
04
Открытие без проверки прав — пользователь без доступа получает системное сообщение об ошибке вместо понятного пояснения

Проверка результата и отладка

После внедрения кода проверьте три сценария: открытие существующего элемента, поведение при пустой ссылке и поведение под пользователем с ограниченными правами. Все три ситуации должны обрабатываться предсказуемо, без технических сообщений платформы.

Для отладки удобно временно вывести ссылку в сообщение перед открытием формы — так вы убедитесь, что на клиент пришло именно то значение, которое ожидалось. Если форма открывается, но показывает не тот элемент, проблема почти всегда в том, что ссылка получена неверным запросом или поиском по наименованию с дублями.

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

Как проверить результат

Открывшаяся форма
Норма

Показывает карточку именно того элемента, ссылка на который передавалась

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

Открывается форма нового пустого элемента — значит, Ключ пустой или не того типа

Контекст выполнения
Норма

Открытие вызывается в клиентской процедуре

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

Ошибка «метод не обнаружен» или недоступность метода на сервере

Права пользователя
Норма

Карточка открывается под пользователем с типовыми правами

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

Сообщение о нарушении прав — нужно настроить роли или показать понятное предупреждение

FAQ

Как открыть форму элемента, если известен только код справочника?

Сначала получите ссылку: Справочники.Номенклатура.НайтиПоКоду(Код). Проверьте результат на заполненность — если элемент не найден, вернётся пустая ссылка. Затем передайте ссылку в ОткрытьЗначение или в параметр Ключ метода ОткрытьФорму.

Чем отличаются параметры Ключ и ЗначенияЗаполнения?

Ключ указывает на существующий элемент и открывает его карточку. ЗначенияЗаполнения применяется при создании нового элемента и передаёт начальные значения реквизитов. Одновременно использовать оба параметра не имеет смысла: Ключ открывает существующий объект, а не новый.

Можно ли открыть форму элемента из фонового задания?

Нет. Фоновые задания выполняются на сервере без пользовательского интерфейса, поэтому интерактивные операции там недоступны. Результат работы фонового задания нужно вернуть на клиент и уже там открыть форму.

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

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

Как открыть элемент в том же окне, а не в новом?

Передайте в ОткрытьФорму параметр владельца и признак уникальности. Если при повторном открытии указать тот же ключ уникальности, платформа активирует уже открытую форму вместо создания новой. Управление окнами доступно также через параметры Окно и НавигационнаяСсылка.

Почему ОткрытьЗначение не работает в модуле объекта?

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

Итог

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

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