Доброго дня, коллеги.

Дано: форма задачи какого-либо бизнес-процесса. История выводится как поле html дока.
Нужно: сделать ссылки "кликабельными" (если такие имеются).
Т.е. есть некий процесс с кучей задач, исполнители зачастую ссылки вставляют, автор или контролирующий просит сделать их ссылками, а не текстом (странно, что разработчики 1с:ДО это сделали).

Предположительное решение:
При создании формы задачи на сервере имеем:

```1c
    РаботаСБизнесПроцессамиВызовСервера.ФормаЗадачиПриСозданииНаСервере(ЭтаФорма, Объект);
```

В ней как раз и формируется html:

```1c
    Если Форма.Элементы.Найти("ПредставлениеHTML") <> Неопределено Тогда
    Форма.ПредставлениеHTML = ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи(Объект);
    КонецЕсли;
```

Где шаблон html с css выглядит как

```1c
    HTMLТекст = "<ht ml>
    |<head>
    |<st yle type="text/css">
    | body {
    | overflow: auto;
    | margin-top: 2px;
    | margin-left: 2px;
    | margin-right: 2px;
    | font-family: Arial;
    | font-size: 10pt;}
    | table {
    | width: 100%;
    | font-family: Arial;
    | font-size: 10pt;
    | border: 0px solid;}
    | td {vertical-align: top;}
    | a:link {
    | color: #006699; text-decoration: none;}
    | a:visited {
    | color: #006699; text-decoration: none;}
    | a:hover {
    | color: #006699; text-decoration: underline;}
    | p {
    | margin-top: 7px;}
    | img {border: 0px;}
    |</style>
    |<body>";
```

Получается, что мне нужно найти все http-ссылки и добавить им тег.
Но как лучше это сделать? regexp? Может кто уже сталкивался и подскажет шаблон по замене? По поиску то их куча...
Или каждый раз вызывать регулярку при открытии задачи не по-феншую? Тогда как оптимальней выполнить замену?

Заранее спасибо.
---
Последний удачный шаблон был "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z-а-яА-Я0-9@:;%_\+.~#?&/=]*)"
Но порывшись в общих модулях ДО я нашёл вот это:

```1c
    // Добавляет теги ко всем ссылкам, находящимся в строке.
    // Обрабатываются следующие схемы обращения к ресурсу:
    // http://, https://, ftp://, mailto:, file://, file:, e1c://, e1cib/
    // Кроме того обрабатываются с использованием схемы http:// ссылки начинающиеся с www. без схемы.
    // Строки размером 250000 больше не обрабатываются.
    Процедура ДобавитьТегиКСсылкам(ТекстHTML) Экспорт

    Если СтрДлина(ТекстHTML) > 250000 Тогда
    Возврат;
    КонецЕсли;

    // Ссылки со схемой
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "http://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "https://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "ftp://");

    // Ссылки без схемы
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "www.", "http://www.");

    // Навигационные ссылки
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1c://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1cib/", "v8doc:e1cib/");

    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "file://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "\\", "file://\\");
    СписокТомовДисков = РаботаС_HTMLПовтИсп.СписокТомовДисков();
    Для Каждого ЭлементТомДиска Из СписокТомовДисков Цикл
    ТомДиска = ЭлементТомДиска.Значение;
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":\", "file://" + ТомДиска + ":\");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":/", "file://" + ТомДиска + ":\");
    КонецЦикла;

    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "mailto:");

    // Скорректировать ссылки со схемами e1c:// и v8doc:e1cib/
    СкорректироватьСсылки(ТекстHTML, "e1c://");
    СкорректироватьСсылки(ТекстHTML, "e1cib/", "v8doc:e1cib/");

    // Заполнить title у ссылок
    ЗаполнитьСвойствоTitleУСсылок(ТекстHTML);

    КонецПроцедуры
```
---
Короче говоря нужно в тексте всем url добавить тег <a>, чтобы получить полноценную кликабельную ссылку.
---
Решил поискать нормальный шаблон для регулярки - их просто нет. То один не подходит, то второй.
Пока остановился на "(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?".
Но ссылка формата "http://www.aaa.com/домашняя.aspx" распознаётся как "http://www.aaa.com/".
---
Последний удачный шаблон был "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z-а-яА-Я0-9@:;%_\+.~#?&/=]*)"
Но порывшись в общих модулях ДО я нашёл вот это:

```1c
    // Добавляет теги ко всем ссылкам, находящимся в строке.
    // Обрабатываются следующие схемы обращения к ресурсу:
    // http://, https://, ftp://, mailto:, file://, file:, e1c://, e1cib/
    // Кроме того обрабатываются с использованием схемы http:// ссылки начинающиеся с www. без схемы.
    // Строки размером 250000 больше не обрабатываются.
    Процедура ДобавитьТегиКСсылкам(ТекстHTML) Экспорт

    Если СтрДлина(ТекстHTML) > 250000 Тогда
    Возврат;
    КонецЕсли;

    // Ссылки со схемой
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "http://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "https://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "ftp://");

    // Ссылки без схемы
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "www.", "http://www.");

    // Навигационные ссылки
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1c://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "e1cib/", "v8doc:e1cib/");

    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "file://");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "\\", "file://\\");
    СписокТомовДисков = РаботаС_HTMLПовтИсп.СписокТомовДисков();
    Для Каждого ЭлементТомДиска Из СписокТомовДисков Цикл
    ТомДиска = ЭлементТомДиска.Значение;
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":\", "file://" + ТомДиска + ":\");
    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, ТомДиска + ":/", "file://" + ТомДиска + ":\");
    КонецЦикла;

    ДобавитьТегиКСсылкамСоСхемой(ТекстHTML, "mailto:");

    // Скорректировать ссылки со схемами e1c:// и v8doc:e1cib/
    СкорректироватьСсылки(ТекстHTML, "e1c://");
    СкорректироватьСсылки(ТекстHTML, "e1cib/", "v8doc:e1cib/");

    // Заполнить title у ссылок
    ЗаполнитьСвойствоTitleУСсылок(ТекстHTML);

    КонецПроцедуры
```
---
Добрый день!

Подскажите получилось ли у вас ссылки сделать кликабельными, чтобы они не только выглядели как ссылки, но и при нажатии на них происходил переход в браузер?

Обрабатываю через процедуру текст описания задачи. Ссылка становится синей, появляется "палец" для клика, но при нажатии переход не происходит.

Заранее спасибо за помощь
---
конечно, это ведь элементарно. Повесить обработчик на сей элемент и ...

```1c
    ЗапуститьПриложение("https://infostart.ru")
```

Правда я, кажется, там ещё проверки делал перед тем как открыть ссылку.
---
для явного перехода по ссылке лучше использовать ПерейтиПоНавигационнойСсылке() или БСП-шное ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку().
Такое заработает и в веб-клиенте, а ЗапуститьПриложение - нет.