Рассмотрим частую задачу при доработке конфигураций 1С: необходимо из формы одного объекта (например, из карточки контрагента) быстро переходить к списку другого, не связанного с ним напрямую справочника. В нашем примере мы хотим добавить в форму элемента справочника "Контрагенты" навигационную ссылку "Страны", по нажатию на которую будет открываться форма списка справочника "Страны" без каких-либо отборов. Для этой задачи есть обработка для быстрого перехода к связанным объектам.
Проанализируем ситуацию, с которой столкнулся автор вопроса. Он пытался использовать функцию ОткрытьФорму, но передавал в нее неопределенную переменную, что приводило к ошибке. Также возник вопрос, в каком обработчике размещать код. Разберем по шагам, как правильно реализовать такую функциональность.
Задача решается в три основных этапа: создание команды, ее размещение на форме и написание кода для обработчика этой команды. Все действия выполняются в конфигураторе в редакторе формы элемента справочника "Контрагенты".
Команда — это объект формы, который определяет действие, выполняемое пользователем. Сначала нам нужно создать саму команду, которая будет "висеть в воздухе", пока мы не свяжем ее с кнопкой или гиперссылкой.
ОткрытьСписокСтран. Это имя будет использоваться в коде.Теперь нужно "вытащить" нашу команду на форму и сделать так, чтобы она выглядела как стандартная навигационная ссылка (такая же, как "Документы", "Договоры" и т.д.).
ПанельНавигацииФормы, ГруппаКомандыПерейти или что-то в этом роде. Раскройте ее.ОткрытьСписокСтран и просто перетащите ее мышкой в найденную навигационную группу в дереве элементов.Важный момент: само размещение команды в стандартной группе навигации обычно автоматически придает ей вид гиперссылки. Если этого не произошло, можно выделить добавленный на форму элемент и в его свойствах найти поле "Вид", установив значение "Гиперссылка".
Это финальный и самый важный шаг. Нам нужно "оживить" нашу гиперссылку, написав код, который будет выполняться при ее нажатии.
ОткрытьСписокСтран.&НаКлиенте, что абсолютно верно, так как открытие форм — это действие пользовательского интерфейса.Теперь напишем код. Разберем, почему у автора возникла ошибка и как сделать правильно.
Автор пытался использовать такой код:
ОткрытьФорму("Справочник.Страны.Форма.ФормаСписка", ПараметрыФормы, ...);
Ошибка возникала потому, что переменная ПараметрыФормы не была нигде определена. Этот параметр используется, когда нужно передать в открываемую форму какие-то данные, например, отбор. Если же нам нужно открыть форму без всяких условий и отборов, этот параметр просто не нужно указывать.
Правильный и самый простой код для нашей задачи выглядит так:
&НаКлиенте
Процедура ОткрытьСписокСтран(Команда)
ОткрытьФорму("Справочник.Страны.ФормаСписка");
КонецПроцедуры
Этот код напрямую говорит системе: "Открой, пожалуйста, форму списка справочника 'Страны'". Никаких дополнительных параметров не требуется.
Автор задавался вопросом, не нужно ли вызывать процедуру в обработчике ПриСозданииНаСервере. Это распространенное заблуждение у начинающих разработчиков. Давайте разберемся.
&НаСервере: Код с этой директивой выполняется на сервере. Он предназначен для работы с данными базы (чтение, запись объектов), выполнения сложных расчетов. Сервер ничего не знает о кнопках, окнах и прочих элементах интерфейса пользователя.&НаКлиенте: Код выполняется на компьютере пользователя. Он отвечает за всю интерактивность: реакцию на нажатие кнопок, открытие новых окон, вывод сообщений.Поскольку открытие формы — это чисто интерфейсная операция, ее обработчик всегда должен находиться на клиенте (&НаКлиенте).
ОткрытьФорму?Рассмотрим ее синтаксис подробнее, чтобы понять, какие еще возможности она предоставляет.
ОткрытьФорму(ИмяФормы, Параметры, Владелец, Уникальность, Окно)
"Справочник.Страны.ФормаСписка".
// Пример для открытия формы с отбором (не для нашей задачи!)
ПараметрыОтбора = Новый Структура("СтранаПредставления", "Россия");
ПараметрыФормы = Новый Структура("Отбор", ПараметрыОтбора);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы);
Как видите, чтобы использовать этот параметр, нужно сначала создать и заполнить структуру. Для нашей задачи он просто не нужен.
ОткрытьФорму с тем же ключом уникальности, новая форма не откроется, а активируется уже существующая.Для нашей простой задачи достаточно было указать только первый, обязательный параметр — имя формы. Все остальные параметры система использует по умолчанию, что нас полностью устраивает.