Как реализовать гиперссылку в табличной части 1С и обработать ее нажатие

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

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

Реализация гиперссылки в обычных формах (1С 8.2)

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


Процедура РасшифровкаПлатежаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Если ЭлементыФормы.РасшифровкаПлатежа.Колонки.Банк.Видимость Тогда
        // Устанавливаем значение, которое будет отображаться как текст ссылки
        ОформлениеСтроки.Ячейки.Банк.Значение = ДанныеСтроки.ДоговорКонтрагента.РасчетныйСчет;
        // Активируем свойство гиперссылки для конкретной ячейки
        ОформлениеСтроки.Ячейки.Банк.Гиперссылка = Истина;
    КонецЕсли;
КонецПроцедуры

Важно помнить, что событие ПриВыводеСтроки вызывается системой очень часто — при каждой перерисовке таблицы, скроллинге или изменении размера окна. Поэтому внутри этой процедуры не рекомендуется выполнять тяжелые запросы к базе данных. Проанализируем следующий шаг: как заставить эту ссылку работать? Для этого мы будем использовать событие таблицы Выбор.


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

Обратите внимание: в старых конфигурациях использование метода ОткрытьМодально было распространенной практикой, однако в современных условиях лучше использовать обычное открытие формы или асинхронные вызовы, чтобы не блокировать интерфейс пользователя.

Гиперссылки в управляемых формах (1С 8.3)

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

  1. Гиперссылка: если этот флаг установлен в значение Истина, текст внутри ячейки будет визуально выделен как ссылка (обычно синим цветом с подчеркиванием при наведении).
  2. ГиперссылкаЯчейки: это свойство определяет, будет ли вся область ячейки реагировать на клик как гиперссылка. Мы рекомендуем включать этот флаг, так как это значительно улучшает "юзабилити" — пользователю легче попасть мышкой по объекту.

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


&НаКлиенте
Процедура СписокЭкспедированиеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    // Проверяем, что нажатие произошло именно в нужной колонке
    Если Поле = Элементы.ЭкспедированиеЗаявкаНаЭкспедирование Тогда
        // Отключаем стандартный механизм выбора/редактирования
        СтандартнаяОбработка = Ложь;
        
        // Используем универсальный метод для показа значения
        // Это автоматически откроет форму объекта
        ПоказатьЗначение(, Элемент.ТекущиеДанные.ЗаявкаНаЭкспедирование);
    КонецЕсли;
КонецПроцедуры

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

Оптимизация проверки текущего элемента

В процессе разработки часто возникает вопрос: как правильно идентифицировать колонку, по которой кликнул пользователь? В обсуждении на форуме было предложено два варианта. Проанализируем их:

Вариант 1 (менее оптимальный): Если Элемент.ТекущийЭлемент.Имя = "ИмяКолонки" Тогда. Этот метод полагается на строковое имя, что может привести к ошибкам при переименовании элементов в конфигураторе.

Вариант 2 (рекомендуемый): Если Поле = Элементы.ИмяКолонки Тогда. Здесь мы сравниваем объект поля напрямую с объектом из коллекции элементов формы. Это работает быстрее и надежнее с точки зрения типизации 1С.

Дополнительные нюансы и "лучшие практики"

Чтобы гиперссылка работала максимально комфортно для пользователя, выясним несколько важных технических деталей:

Проанализировав все вышеперечисленные методы, мы видим, что реализация гиперссылок — это не только установка визуального флажка, но и грамотная обработка событий, обеспечивающая быстродействие системы и удобство работы конечного пользователя. Использование современных методов типа ПоказатьЗначение и правильная настройка свойств ячейки позволяют создавать интерфейсы, которые соответствуют стандартам современных ERP-систем.

← На главную