Как реализовать кликабельную ссылку на внешний сайт в табличной части документа на управляемых формах 1С?

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

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

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

Почему стандартные события не срабатывают для гиперссылок в табличной части?

Мы привыкли, что для одиночных полей вне табличной части, помеченных как гиперссылка, могут быть доступны такие события, как ПриНажатии или ОбработкаНавигационнойСсылки. Однако, когда мы имеем дело с полем внутри табличной части, система 1С обрабатывает клик несколько иначе.

При нажатии на любую ячейку табличной части, даже если эта ячейка визуально оформлена как гиперссылка, не срабатывает событие конкретной ячейки. Вместо этого возникает событие Выбор для всей табличной части. Это означает, что обработчик события должен быть привязан не к самой гиперссылке, а к полю табличной части, которое отображает эту гиперссылку. Именно внутри этого обработчика мы сможем определить, на какую именно ячейку было произведено нажатие, извлечь из нее адрес ссылки и программно открыть его в браузере.

Пошаговая реализация кликабельной ссылки в табличной части

Чтобы успешно реализовать функциональность кликабельной ссылки, нам потребуется выполнить следующие шаги:

  1. Создать подходящий реквизит в табличной части.
  2. Настроить элемент формы для отображения ссылки как гиперссылки.
  3. Разработать обработчик события Выбор для поля табличной части.
  4. Реализовать код для открытия ссылки в браузере — для отладки подобных обработчиков событий подойдёт инструмент отладки обработчиков событий 1С.

Давайте рассмотрим каждый шаг подробнее.

1. Создание реквизита в табличной части для хранения URL

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

Мы рекомендуем создать реквизит со следующими характеристиками:

После создания реквизита, сохраните изменения в конфигурации.

2. Настройка элемента формы как гиперссылки

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

  1. Откройте форму документа (или объекта, где расположена табличная часть), в которой вы хотите разместить ссылку.
  2. Найдите элемент управления ТабличнаяЧасть в дереве элементов формы.
  3. Раскройте его и найдите колонку, соответствующую нашему новому реквизиту (например, СсылкаНаПортфолио).
  4. Выделите эту колонку и перейдите в окно "Свойства" элемента формы.
  5. В свойствах, в группе "Отображение" (или аналогичной, в зависимости от версии платформы), найдите свойство Гиперссылка и установите для него флажок Истина.

Установка этого флажка заставит текст в ячейке отображаться синим цветом и подчеркиванием, как обычная гиперссылка, однако, как мы уже выяснили, это не обеспечит ее функциональность без дополнительного кода.

3. Реализация обработчика события "Выбор" для поля табличной части

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

Чтобы создать этот обработчик, выполним следующее:

  1. Вновь откройте форму документа.
  2. В дереве элементов формы выделите нашу колонку, которая отображает ссылку (например, ТабличнаяЧасть.СсылкаНаПортфолио).
  3. Перейдите в окно "Свойства" и найдите группу "События".
  4. Возле события Выбор нажмите кнопку с лупой (или кнопку открытия) для создания обработчика. Если обработчик уже существует для другого поля, вы можете просто добавить логику в существующий.
  5. Система предложит создать клиентскую процедуру на форме. Согласитесь. Будет создан шаблон процедуры, например, ТабличнаяЧастьСсылкаНаПортфолиоВыбор().

Обратите внимание на параметры, которые передаются в эту процедуру:

4. Код для открытия ссылки в браузере

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

Разместим следующий код в процедуре обработчика события Выбор, которую мы создали на предыдущем шаге:


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

Давайте подробно рассмотрим каждую часть этого кода:

  1. СтандартнаяОбработка = Ложь;

    Этой строкой мы сообщаем платформе 1С, что мы полностью берем на себя управление событием "Выбор". Без этого стандартное поведение платформы (например, активация режима редактирования ячейки или стандартный выбор строки) может произойти после выполнения нашего кода, что не всегда желательно.

  2. Если Поле.Имя = "СсылкаНаПортфолио" Тогда

    Этот условный оператор критически важен. Поскольку обработчик Выбор срабатывает для всей табличной части, независимо от того, на какую колонку был произведен клик, нам необходимо убедиться, что пользователь нажал именно на нашу колонку с гиперссылкой. Поле.Имя содержит имя элемента формы, то есть имя колонки в табличной части. Замените "СсылкаНаПортфолио" на фактическое имя вашей колонки.

  3. АдресСсылки = ВыбраннаяСтрока.СсылкаНаПортфолио;

    Здесь мы получаем непосредственно значение адреса ссылки. ВыбраннаяСтрока – это объект данных текущей строки табличной части. Через точку мы обращаемся к реквизиту этой строки, который хранит URL. Убедитесь, что имя реквизита (СсылкаНаПортфолио) точно совпадает с именем, которое вы дали реквизиту табличной части.

  4. Если ЗначениеЗаполнено(АдресСсылки) Тогда

    Мы проверяем, что полученный адрес ссылки не пустой. Это хорошая практика, чтобы избежать попыток открытия несуществующих или пустых URL-адресов, что может привести к ошибкам или некорректному поведению.

  5. Попытка ... Исключение ... КонецПопытки;

    Блок Попытка...Исключение используется для обработки возможных ошибок. Открытие внешнего приложения (браузера) – это операция, которая может завершиться неудачей по разным причинам (например, некорректный формат URL, отсутствие браузера по умолчанию, проблемы с безопасностью и т.д.). В случае возникновения ошибки, мы перехватываем ее и выводим сообщение пользователю вместо аварийного завершения работы программы.

  6. ЗапуститьПриложение(АдресСсылки);

    Это центральная функция решения. ЗапуститьПриложение() – это клиентская функция платформы 1С, которая предназначена для запуска внешних приложений или открытия ресурсов. Если в качестве параметра ей передать строку, начинающуюся с http:// или https://, операционная система попытается открыть этот URL в браузере, установленном по умолчанию. Эта функция является наиболее универсальным и рекомендуемым способом открытия веб-страниц из 1С.

  7. Сообщить("Не удалось открыть ссылку: " + ОписаниеОшибки());

    В блоке исключения мы информируем пользователя о том, что произошла ошибка при попытке открыть ссылку, и отображаем системное описание ошибки, что может быть полезно для диагностики.

Итоги и рекомендации

Таким образом, для успешной реализации кликабельной ссылки на внешний сайт в табличной части управляемой формы 1С, мы должны учитывать специфику обработки событий. Ключевым моментом является использование обработчика события Выбор для поля табличной части и программное открытие ссылки с помощью функции ЗапуститьПриложение().

Помните, что важно тщательно проверить имя реквизита и имя колонки на форме, чтобы они точно совпадали с теми, которые вы используете в коде. Также всегда полезно предусмотреть обработку исключений для повышения надежности вашего решения.

Следуя этим шагам, вы сможете легко добавить функциональность внешних ссылок в табличные части ваших документов и справочников, значительно расширяя возможности вашей конфигурации 1С. Для более сложных сценариев может потребоваться программное изменение форм — при разработке таких решений поможет инструмент отладки и редактор объектов для 1С.

← На главную