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

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

При разработке конфигураций на платформе 1С:Предприятие 8.3 часто возникает необходимость связать два справочника, которые не находятся в иерархической связи «владелец — подчиненный». Стандартная панель навигации формы обычно автоматически отображает только подчиненные объекты, однако для удобства пользователя мы можем добавить туда произвольные ссылки. Рассмотрим, как реализовать переход из карточки Контрагенты к списку другого справочника с автоматической фильтрацией по текущему контрагенту.

Способ 1: Создание команды с программным открытием формы

Это наиболее гибкий способ, который позволяет полностью контролировать процесс открытия формы и передаваемые параметры. Разберем по шагам, как это реализовать. Сначала нам необходимо создать объект метаданных типа Команда.

  1. В дереве конфигурации найдем наш «другой» справочник (который мы хотим открывать).
  2. Перейдем в ветку Команды и добавим новую команду, например, с именем ОткрытьСвязанныйСправочник.
  3. В свойствах команды установим Тип параметра команды. В нашем случае это будет СправочникСсылка.Контрагенты. Это позволит команде «понимать», из какого объекта она вызывается.
  4. Укажем Группу: Панель навигации формы.Перейти. Именно это свойство отвечает за то, что ссылка появится в верхней части формы в стандартном месте для переходов.

Теперь проанализируем программный код, который должен располагаться в модуле этой команды. Мы будем использовать обработчик ОбработкаКоманды, чтобы открыть форму списка и передать в нее структуру отбора.


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // ПараметрКоманды — это ссылка на текущего Контрагента, из формы которого нажата ссылка
    // Формируем структуру отбора по реквизиту "Контрагент" в целевом справочнике
    Отбор = Новый Структура("Контрагент", ПараметрКоманды);
    
    // Помещаем отбор в параметры формы
    ПараметрыФормы = Новый Структура("Отбор", Отбор);
    
    // Открываем форму списка целевого справочника
    ОткрытьФорму("Справочник.МойСвязанныйСправочник.ФормаСписка", 
        ПараметрыФормы, 
        ПараметрыВыполненияКоманды.Источник, 
        ПараметрыВыполненияКоманды.Уникальность, 
        ПараметрыВыполненияКоманды.Окно, 
        ПараметрыВыполненияКоманды.НавигационнаяСсылка);
        
КонецПроцедуры

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

Способ 2: Использование «Критериев отбора» (без кода)

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

Рассмотрим алгоритм настройки:

  1. В дереве конфигурации перейдем в раздел Общие — Критерии отбора.
  2. Создадим новый критерий, например, СвязиПоКонтрагенту.
  3. На вкладке Данные укажем тип — СправочникСсылка.Контрагенты.
  4. На вкладке Состав отметим галочками реквизиты других справочников (или документов), в которых хранится ссылка на контрагента.
  5. После этого в конфигураторе откроем форму справочника Контрагенты, перейдем на вкладку Командный интерфейс и в группе Перейти включим видимость нашего критерия отбора.

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

Способ 3: Использование фиксированных настроек для надежности

Проанализируем ситуацию: когда мы передаем отбор через простую структуру Отбор (как в первом способе), пользователь может зайти в меню «Настроить список» и случайно или намеренно удалить этот фильтр. Чтобы запретить изменение этого отбора, следует использовать ФиксированныеНастройки.

Выясним, как изменить код команды для использования этого механизма:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

    Настройки = Новый НастройкиКомпоновкиДанных;
    ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    
    // Указываем поле, по которому фильтруем
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = ПараметрКоманды;
    ЭлементОтбора.Использование = Истину;
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки);
    
    ОткрытьФорму("Справочник.МойСвязанныйСправочник.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник);

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

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

Способ 4: Визуальная гиперссылка непосредственно на форме

Иногда пользователям неудобно искать ссылки в верхней панели навигации (группа «Перейти»). В таком случае мы можем разместить гиперссылку прямо в теле формы, рядом с основными реквизитами. Разберем, как это сделать через элементы формы типа Декорация. Для ускорения и стандартизации такой настройки можно использовать готовый модуль для программного изменения управляемых форм.

Рассмотрим порядок действий в редакторе формы:

  1. Добавим новый элемент формы с видом Декорация - Надпись.
  2. В свойствах декорации установим заголовок, например, «Открыть связанные договоры».
  3. Активируем флаг Гиперссылка.
  4. В событии Нажатие создадим обработчик на клиенте.

Код в модуле формы будет выглядеть следующим образом:


&НаКлиенте
Процедура ДекорацияСвязанныеДанныеНажатие(Элемент)
    
    // Используем Объект.Ссылка для получения текущего контрагента
    Отбор = Новый Структура("Контрагент", Объект.Ссылка);
    ПараметрыФормы = Новый Структура("Отбор", Отбор);
    
    ОткрытьФорму("Справочник.МойСвязанныйСправочник.ФормаСписка", ПараметрыФормы, ЭтаФорма);
    
КонецПроцедуры

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

Группировка и расширения

При проектировании интерфейса важно помнить о логическом разделении ссылок. Платформа 1С предлагает три стандартные группы команд:

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

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

← На главную