Почему не срабатывает событие «Нажатие» в ячейке таблицы на управляемой форме и как сделать кликабельную гиперссылку?

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

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

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

В чем причина: особенности обработки событий в таблицах управляемых форм

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

По этой причине:

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

Основное решение: использование свойства «Гиперссылка ячейки» и события таблицы «Выбор»

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

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

Посмотрим на пример реализации обработчика события Выбор на клиенте:


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

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

Рассмотрим подробнее параметры и особенности работы этого метода:

  1. Параметр Поле: содержит элемент формы — конкретную колонку, по которой кликнул пользователь. Это позволяет размещать в одной таблице сразу несколько разных колонок-гиперссылок.
  2. Параметр СтандартнаяОбработка: установка СтандартнаяОбработка = Ложь; предотвращает стандартное поведение таблицы (вход в режим редактирования ячейки или открытие формы объекта, если таблица связана с динамическим списком).
  3. Получение данных строки: для динамического списка и табличной части надежнее всего использовать Элемент.ТекущиеДанные либо получать строку через метод Объект.ТабличнаяЧасть.НайтиПоИдентификатору(ВыбраннаяСтрока).
  4. Режим «Только просмотр»: даже если у всей таблицы или формы включено свойство ТолькоПросмотр = Истина, событие Выбор продолжает штатно вызываться, что позволяет использовать данный способ в отчетах и журналах только для чтения.

Альтернативные способы реализации кликабельных элементов в таблице

В зависимости от интерфейсных требований задачи можно использовать и другие подходы платформы.

Вариант 1. Поле ввода с кнопкой открытия

Если колонка содержит ссылочный тип данных (например, ссылку на документ или элемент справочника), можно оставить у колонки вид ПолеВвода, установить для нее КнопкаОткрытия = Истина и при необходимости ТолькоПросмотр = Истина.

В этом случае у самого элемента колонки становится доступно и штатно работает событие Открытие:


&НаКлиенте
Процедура ТоварыДокументПартииОткрытие(Элемент, СтандартнаяОбработка)
    // Стандартная обработка сама откроет форму ссылки, 
    // но при необходимости ее можно переопределить:
    // СтандартнаяОбработка = Ложь;
    // ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта", ...);
КонецПроцедуры

Вариант 2. Использование поля с видом «Поле кнопки»

Если в строке таблицы требуется явное действие (например, кнопка «Заполнить» или «Показать движения»), в состав колонок таблицы можно добавить элемент с видом ПолеКнопки и связать его с клиентской командой формы.

При нажатии на кнопку в конкретной строке команда будет вызываться напрямую, а текущую строку можно получить из контекста таблицы:


&НаКлиенте
Процедура КомандаОткрытьСвязанныйДокумент(Команда)
    
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        ПоказатьЗначение(, ТекущиеДанные.ДокументПартии);
    КонецЕсли;
    
КонецПроцедуры

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

← На главную