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