1С: ДО, ссылки в истории задачи

1. triviumfan 99 19.07.18 14:44 Сейчас в теме
Доброго дня, коллеги.

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

Предположительное решение:
При создании формы задачи на сервере имеем:
РаботаСБизнесПроцессамиВызовСервера.ФормаЗадачиПриСозданииНаСервере(ЭтаФорма, Объект);

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

Где шаблон html с css выглядит как
	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? Может кто уже сталкивался и подскажет шаблон по замене? По поиску то их куча...
Или каждый раз вызывать регулярку при открытии задачи не по-феншую? Тогда как оптимальней выполнить замену?

Заранее спасибо.
По теме из базы знаний
Найденные решения
4. triviumfan 99 20.07.18 09:55 Сейчас в теме
Последний удачный шаблон был "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z-а-яА-Я0-9@:;%_\+.~#?&/=]*)"
Но порывшись в общих модулях ДО я нашёл вот это:
// Добавляет теги ко всем ссылкам, находящимся в строке.
// Обрабатываются следующие схемы обращения к ресурсу:
// 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);
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. triviumfan 99 19.07.18 14:47 Сейчас в теме
Короче говоря нужно в тексте всем url добавить тег <a>, чтобы получить полноценную кликабельную ссылку.
3. triviumfan 99 19.07.18 15:52 Сейчас в теме
Решил поискать нормальный шаблон для регулярки - их просто нет. То один не подходит, то второй.
Пока остановился на "(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?".
Но ссылка формата "http://www.aaa.com/домашняя.aspx" распознаётся как "http://www.aaa.com/".
4. triviumfan 99 20.07.18 09:55 Сейчас в теме
Последний удачный шаблон был "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z-а-яА-Я0-9@:;%_\+.~#?&/=]*)"
Но порывшись в общих модулях ДО я нашёл вот это:
// Добавляет теги ко всем ссылкам, находящимся в строке.
// Обрабатываются следующие схемы обращения к ресурсу:
// 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);
	
КонецПроцедуры
Показать
5. yekaterina_vesselova 11.08.22 08:14 Сейчас в теме
(4)Добрый день!

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

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

Заранее спасибо за помощь
6. triviumfan 99 11.08.22 08:40 Сейчас в теме
(5) конечно, это ведь элементарно. Повесить обработчик на сей элемент и ...
ЗапуститьПриложение("https://infostart.ru")

Правда я, кажется, там ещё проверки делал перед тем как открыть ссылку.
7. comptr 36 11.08.22 09:07 Сейчас в теме
(6) для явного перехода по ссылке лучше использовать ПерейтиПоНавигационнойСсылке() или БСП-шное ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку().
Такое заработает и в веб-клиенте, а ЗапуститьПриложение - нет.
triviumfan; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот