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

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

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

Причина поведения платформы 1С при работе с ячейками таблиц

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

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

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

Реализация перехода по гиперссылке в управляемых формах (УФ)

Разберем по шагам правильную настройку таблицы в управляемом приложении:

  1. Перейдем в дерево элементов формы и выберем колонку таблицы, в которой отображается ссылка.
  2. В палитре свойств элемента колонки включим свойство Гиперссылка (или ГиперссылкаЯчейки) в значение Истина. Это позволит платформе вызывать событие выбора сразу по одинарному клику.
  3. Выделим саму Таблицу (родительский элемент в дереве элементов, а не колонку) и в списке ее событий найдем событие Выбор.
  4. Создадим клиентский обработчик события выбора таблицы.

Посмотрим на пример клиентского кода обработчика события:


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

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

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

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

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

  1. В свойствах нужной колонки элемента управления ТабличноеПоле установим флаг Гиперссылка в значение Истина.
  2. В свойствах самого элемента ТабличноеПоле создадим процедуру-обработчик для события Выбор.

Посмотрим на пример кода для обычной формы:


Процедура ТабличноеПолеВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

    Если Колонка.Имя = "АдресСайта" Тогда
        СтандартнаяОбработка = Ложь;
        
        Если ЗначениеЗаполнено(ВыбраннаяСтрока.АдресСайта) Тогда
            ЗапуститьПриложение(ВыбраннаяСтрока.АдресСайта);
        КонецЕсли;
    КонецЕсли;

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

Важные практические нюансы и методы открытия ссылок

Выясним детали, которые необходимо учитывать при работе со ссылками в интерфейсе 1С:

  1. Обязательное отключение стандартной обработки: Установка параметра СтандартнаяОбработка = Ложь критически важна. Если не сбросить этот флаг, платформа параллельно с открытием веб-страницы попытается начать редактирование ячейки или выделить всю строку, что может вызвать визуальные зависания интерфейса.
  2. Использование метода ПерейтиПоНавигационнойСсылке: Функция ПерейтиПоНавигационнойСсылке() является кроссплатформенной и универсальной. Она отлично работает как с внешними веб-адресами протоколов http:// и https://, так и с внутренними навигационными ссылками 1С формата e1cib:// во всех типах клиентов (тонкий клиент, веб-клиент).
  3. Использование Библиотеки Стандартных Подсистем (БСП): Если конфигурация разработана на базе БСП, для безопасного открытия внешних ссылок и файлов рекомендуется использовать методы общих модулей:
    
    // Открытие ссылки через БСП
    ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ТекущиеДанныеСтроки.АдресСайта);
    
  4. Разделение отображаемого текста и URL: Если требуется показывать пользователю понятный текст (например, «Перейти на страницу товара»), а переходить по длинному техническому адресу, то в колонку таблицы выводим строковое представление, а сам полный URL храним в отдельном скрытом реквизите строки табличной части и считываем его из свойства ТекущиеДанные.
← На главную