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

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

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

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

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

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

Ниже разобраны основные способы для управляемого и обычного приложения, вариант открытия без программирования, типичные ошибки и способы проверить результат. Примеры кода приведены для типового справочника «Номенклатура» — замените имя на своё.

Как определить, какой способ подходит вашей ситуации

Прежде чем писать код, нужно ответить на три вопроса. Первый — в каком режиме работает конфигурация: управляемое приложение (основной вариант для современных решений) или обычное приложение (старые конфигурации на 8.2 и ранних 8.3). Второй — откуда выполняется вызов: с клиентской части формы, из обработчика команды или с сервера. Третий — что должно произойти после открытия: пользователь просто смотрит объект, редактирует его или после закрытия формы нужно выполнить дополнительные действия.

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

Маршрут решения

Как выбрать действие

Управляемое приложение, нужно открыть элемент для просмотра или редактированияИспользуйте ОткрытьФорму с параметром Ключ
Нужно просто показать объект без логики после закрытияИспользуйте ПоказатьЗначение(Неопределено, Ссылка)
Обычное приложение (режим обычного клиента)Используйте Ссылка.ПолучитьФорму() и Открыть() или ОткрытьМодально()
После закрытия формы нужно выполнить код (обновить список, обработать результат)Передавайте ОписаниеОповещения в ОткрытьФорму или ПоказатьЗначение

Открытие формы элемента в управляемом приложении через ОткрытьФорму

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

&НаКлиенте

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

СсылкаНаЭлемент = ПолучитьСсылкуНоменклатуры(); // ваша функция получения ссылки

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

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

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

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

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

Важный нюанс: если элемент с переданной ссылкой уже открыт, по умолчанию платформа активирует существующее окно, а не создаст второе. Если нужно гарантированно открыть новую копию формы, добавьте в параметры уникальность: ОткрытьФорму(ИмяФормы, ПараметрыФормы, , , , , , Новый УникальныйИдентификатор) либо передайте параметр КлючУникальности.

Порядок действий
  1. 1
    Получите ссылку на нужный элемент справочника (из реквизита формы, запроса или поиска по коду/наименованию)
  2. 2
    Сформируйте структуру параметров и добавьте ключ Ключ со ссылкой
  3. 3
    Вызовите ОткрытьФорму с именем формы объекта и параметрами
  4. 4
    Проверьте, что открылась карточка именно нужного элемента: сравните код и наименование с ожидаемыми

Открытие формы с обработкой результата закрытия

Часто недостаточно просто открыть форму — после её закрытия нужно обновить список, пересчитать итоги или получить введённые пользователем данные. Для этого в ОткрытьФорму передаётся описание оповещения — указание на процедуру, которая выполнится после закрытия формы.

&НаКлиенте

Процедура ОткрытьСОповещением(Команда)

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);

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

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

ЭтотОбъект, , , , Оповещение);

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

&НаКлиенте

Процедура ПослеЗакрытияФормы(Результат, ДополнительныеПараметры) Экспорт

Элементы.Список.Обновить();

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

Обратите внимание на два момента. Во-первых, процедура обработчика должна быть экспортной и находиться на клиенте. Во-вторых, параметр Результат будет заполнен только если закрываемая форма возвращает значение (например, форма выбора). Обычная форма элемента при закрытии возвращает Неопределено — это нормально, оповещение всё равно сработает.

Быстрый показ элемента через ПоказатьЗначение

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

&НаКлиенте

Процедура ПоказатьТовар(Команда)

ПоказатьЗначение(Неопределено, СсылкаНаЭлемент);

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

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

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

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

// Вариант 1: через ссылку

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

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

// Вариант 2: через менеджер справочника

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

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

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

Сравнение вариантов

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

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

ПоказатьЗначение

Самый короткий код, работает с любым типом ссылки. Нельзя передать параметры и выбрать неосновную форму

ПолучитьФорму + Открыть

Только обычное приложение. Даёт доступ к объекту формы до открытия, но не работает в тонком и веб-клиенте

Как открыть нужный элемент без программирования

Если задача стоит перед пользователем, а не разработчиком, форму нужного элемента можно открыть штатными средствами интерфейса. Основной путь: открыть список справочника через главное меню или панель разделов, найти элемент поиском по наименованию или коду и дважды щёлкнуть по строке либо нажать кнопку «Изменить».

Быстрый поиск в списке выполняется через поле поиска в командной панели списка или сочетанием клавиш Ctrl+F. Если элементов много, эффективнее использовать отбор: кнопка «Настроить список» (или «Ещё» → «Настроить список») позволяет отфильтровать список по любому реквизиту, например по артикулу или группе.

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

Типичные ошибки и как их избежать

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

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

Третья группа ошибок связана с именем формы: опечатка в имени справочника или формы приводит к ошибке «Форма не найдена». Имя проверяется в конфигураторе: откройте справочник, посмотрите список форм и уточните, какая из них назначена основной формой объекта.

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

Как проверить, что открыт правильный элемент

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

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

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

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

Какой элемент открылся
Норма

Код и наименование в форме совпадают с нужным элементом в списке

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

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

Повторное открытие того же элемента
Норма

Активируется уже открытое окно

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

Открываются дубликаты окон — при необходимости задайте ключ уникальности

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

Форма открывается и доступна для чтения или редактирования

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

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

Частые вопросы

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

Сначала получите ссылку методом менеджера: Ссылка = Справочники.Номенклатура.НайтиПоКоду("000123"). Проверьте, что ссылка не пустая (Ссылка.Пустая()), и затем передайте её в параметре Ключ при вызове ОткрытьФорму. Если код не найден, НайтиПоКоду вернёт пустую ссылку, и открывать форму не нужно — покажите пользователю сообщение.

Можно ли открыть форму элемента из внешней обработки?

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

Почему после ОткрытьФорму открывается пустая форма нового элемента?

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

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

Тем же способом: передайте в параметре Ключ ссылку на группу. Платформа автоматически откроет форму группы, если она определена в конфигурации. Если нужна конкретная форма группы, укажите её имя явно, например Справочник.Номенклатура.Форма.ФормаГруппы.

Чем ПоказатьЗначение отличается от ОткрытьФорму на практике?

ПоказатьЗначение сам определяет тип ссылки и открывает основную форму объекта — это короче, но не даёт выбрать нестандартную форму и передать дополнительные параметры. ОткрытьФорму требует точного имени формы, зато позволяет передать любые параметры, указать владельца и обработать закрытие через оповещение.

Можно ли открыть форму элемента в режиме «только просмотр»?

Да. Добавьте в структуру параметров ТолькоПросмотр со значением Истина вместе с Ключ: ПараметрыФормы.Вставить("ТолькоПросмотр", Истина). Форма откроется в режиме, где редактирование недоступно, — это удобно для показа данных пользователям без права изменения.

Итог

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

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