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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Пошаговое решение: Добавляем навигационную ссылку

Задача решается в три основных этапа: создание команды, ее размещение на форме и написание кода для обработчика этой команды. Все действия выполняются в конфигураторе в редакторе формы элемента справочника "Контрагенты".

  1. Создание команды формы

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

    • Откройте форму элемента справочника "Контрагенты".
    • Перейдите на вкладку "Команды" в левой верхней части редактора.
    • В открывшемся списке команд нажмите на кнопку "Добавить" (зеленый плюсик).
    • В свойствах новой команды задайте осмысленные значения:
      • Имя: ОткрытьСписокСтран. Это имя будет использоваться в коде.
      • Синоним: "Страны". Этот текст увидит пользователь.
  2. Размещение команды на форме в виде гиперссылки

    Теперь нужно "вытащить" нашу команду на форму и сделать так, чтобы она выглядела как стандартная навигационная ссылка (такая же, как "Документы", "Договоры" и т.д.).

    • Перейдите на основную вкладку "Элементы" в редакторе формы.
    • Найдите в дереве элементов группу, отвечающую за панель навигации. Обычно она называется ПанельНавигацииФормы, ГруппаКомандыПерейти или что-то в этом роде. Раскройте ее.
    • Вернитесь на вкладку "Команды", найдите созданную команду ОткрытьСписокСтран и просто перетащите ее мышкой в найденную навигационную группу в дереве элементов.

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

  3. Создание обработчика и написание кода

    Это финальный и самый важный шаг. Нам нужно "оживить" нашу гиперссылку, написав код, который будет выполняться при ее нажатии.

    • Снова перейдите на вкладку "Команды" и выделите нашу команду ОткрытьСписокСтран.
    • В палитре свойств команды найдите свойство "Действие" и нажмите на иконку лупы справа от него.
    • Система автоматически создаст процедуру-обработчик в модуле формы и перенесет вас туда. Процедура будет иметь директиву компиляции &НаКлиенте, что абсолютно верно, так как открытие форм — это действие пользовательского интерфейса.

    Теперь напишем код. Разберем, почему у автора возникла ошибка и как сделать правильно.

    Автор пытался использовать такой код:

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

    Ошибка возникала потому, что переменная ПараметрыФормы не была нигде определена. Этот параметр используется, когда нужно передать в открываемую форму какие-то данные, например, отбор. Если же нам нужно открыть форму без всяких условий и отборов, этот параметр просто не нужно указывать.

    Правильный и самый простой код для нашей задачи выглядит так:

    
    &НаКлиенте
    Процедура ОткрытьСписокСтран(Команда)
        ОткрытьФорму("Справочник.Страны.ФормаСписка");
    КонецПроцедуры
    

    Этот код напрямую говорит системе: "Открой, пожалуйста, форму списка справочника 'Страны'". Никаких дополнительных параметров не требуется.

Дополнительные пояснения и частые вопросы

Почему код должен быть на клиенте?

Автор задавался вопросом, не нужно ли вызывать процедуру в обработчике ПриСозданииНаСервере. Это распространенное заблуждение у начинающих разработчиков. Давайте разберемся.

Поскольку открытие формы — это чисто интерфейсная операция, ее обработчик всегда должен находиться на клиенте (&НаКлиенте).

Как работает функция ОткрытьФорму?

Рассмотрим ее синтаксис подробнее, чтобы понять, какие еще возможности она предоставляет.

ОткрытьФорму(ИмяФормы, Параметры, Владелец, Уникальность, Окно)

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

← На главную