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