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