gifts2017

Проблема вставки ссылки в Поле HTML документа в управляемой форме (8.2, 8.3)

Опубликовал Евгений Сахненко (Duketm) в раздел Программирование - Практика программирования

Вставка ссылки Поле HTML документа (УФ)

Возможно, кому-то эта информация пригодится.

Недавно столкнулся с вопросом редактирования на управляемой форме поля HTML документа. Это нужно для красивого оформления содержимого документа, а именно форматировать текст документа, размещать ссылки и таблицы. Однако, не всё так просто. В отличии от обычного приложения, в УФ нет возможности непосредственно править поле HTML.  Для этих целей там есть специальный тип ФорматированныйДокумент, и соответственно, вид поля "Поле форматированного документа". Однако, форматированный документ до сих пор не поддерживает отображение таблиц. А это одна из главных задач, потому как пользователи постоянно копируют из экселя таблицы и вставляют их в документ. Поэтому обратил внимание на вот эту публикацию http://infostart.ru/public/75313/. В ней всё решается штатными средствами, что понравилось. Правда ,пришлось немного доработать вставку ссылки в поле HTML документа из-за того что метод execCommand("CreateLink"...) ком-объекта не очень красиво отрабатывает, т.е. не вставляет ссылку в поле сразу. Поэтому вставку ссылки сделал так:

 

&НаКлиенте
Процедура ВставитьСсылку(Команда)
	ПредставлениеСсылки = "";
	Если ВвестиСтроку(ПредставлениеСсылки,"Адрес ссылки") Тогда
		//копируем в буфер это представление:
		Документ.ParentWindow.ClipboardData.SetData("Text", ПредставлениеСсылки); 
		//вставляем в поле текст представления:
		Документ.execCommand("Paste");
		//выделяем текст представления в поле:
		Область = Документ.body.createTextRange();
		Область.findText(ПредставлениеСсылки);
		Область.select();
		//заменяем выделенную область ссылкой:
		Область.pasteHTML("<a href="+ПредставлениеСсылки+">"+ПредставлениеСсылки+"</a>");
	КонецЕсли;
	
КонецПроцедуры

Как позже выяснилось,  execCommand("CreateLink"...) может отработать правильно, но также нужно выделять область текста, для которого задаётся ссылка. Но текст остаётся выделенным и выделение снимается толко щелчком мыши в другой области поля:

&НаКлиенте
Процедура ВставитьСсылкуСтандартно(Команда)
	ПредставлениеСсылки = "";
	Если ВвестиСтроку(ПредставлениеСсылки,"Адрес ссылки") Тогда
		
		//Если не делать копирование в буфер и выделение текста, то
		//Документ.execCommand("CreateLink", Ложь, ПредставлениеСсылки) не отработает
		
		//Поэтому делаем так же
		
		//копируем в буфер это представление:
		Документ.ParentWindow.ClipboardData.SetData("Text", ПредставлениеСсылки); 
		//вставляем в поле текст представления:
		Документ.execCommand("Paste");
		//выделяем текст представления в поле:
		Область = Документ.body.createTextRange();
		Область.findText(ПредставлениеСсылки);
		Область.select();
		
		//создаём ссылку и вставляем
		Документ.execCommand("CreateLink", Ложь, ПредставлениеСсылки);
	КонецЕсли;
КонецПроцедуры

Для примера прилагаю обработочку

Скачать файлы

Наименование Файл Версия Размер
ВставкаСсылкиВПолеХТМЛ 15
.epf 6,34Kb
17.12.14
15
.epf V.1 6,34Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.