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