В процессе разработки прикладных решений возникает необходимость предоставить пользователю возможность выполнять редактирование текстов с оформлением (далее форматированный документ). В качестве примера такой необходимости можно привести написание писем электронной почты, различных служебных записок или сопроводительных документов.
Для работы с форматированным документом предназначен объект ФорматированныйДокумент, с помощью которого можно выполнять программную обработку документа и поле ввода вида Поле форматированного документа, который предназначен для интерактивного изменения форматированного документа.
В информационной базе форматированный документ рекомендуется хранить в реквизите типа ХранилищеЗначения, в который помещается объект типа ФорматированныйДокумент.
Для того чтобы предоставить пользователю возможность интерактивного изменения документа, следует выполнить следующие шаги:
- создать реквизит формы типа ФорматированныйДокумент и установить для него свойство Сохраняемые данные;
- создать элемент формы типа Поле ввода вида Поле форматированного документа и связать его с ранее созданным реквизитом;
- при чтении данных формы (обработчик ПриЧтенииНаСервере()) загрузить в реквизит формы документ, который необходимо редактировать, предварительно получив его из информационной базы;
- перед записью данных формы (обработчик ПередЗаписьюНаСервере()) получить результат редактирования документа и поместить его в реквизит, сохраняемый в информационной базе.
- В процессе работы с документом можно использовать закладки. Закладкой называет позиция в документе. При определении позиции следует учитывать следующие особенности:
- содержимое документа считается одной последовательностью символов.
- перенос строки считается одним символом.
- картинка считается одним символом.
С помощью закладок можно получать и устанавливать выделение или позицию курсора в редакторе, добавлять и удалять элементы текста в документе (собственно текст, картинка, перевод строки).
Если при получении выделения позиции начала и окончания выделения совпадают, это значит, что выделение отсутствует и получено положение курсора. Также и при установке выделения: если начальная и конечная позиция выделения совпадают – происходит изменение позиции курсора, без выделения. Также следует помнить, что при программном изменении выделенного текста не происходит отмены выделения. Выделение остается в тех же позициях, в которых оно было до программного изменения текста.
Приведем пример получения и установки выделения в редакторе форматированного документа:
// Содержимое – реквизит формы типа ФорматированныйДокумент
// Редактор – элемент формы типа Поле форматированного документа
// Начало – реквизит формы типа Число. Указывает позицию начала выделения.
// Окончание – реквизит формы типа Число. Указывает позицию окончания выделения.
&НаКлиенте
Процедура ПолучитьВыделение()
ПозицияНачала = 0;
ПозицияОкончания = 0;
Элементы.Редактор.ПолучитьГраницыВыделения(ПозицияНачала,ПозицияОкончания);
Начало = Содержимое.ПолучитьПозициюПоЗакладке(ПозицияНачала);
Окончание = Содержимое.ПолучитьПозициюПоЗакладке(ПозицияОкончания);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВыделение()
ПозицияНачала = Содержимое.ПолучитьЗакладкуПоПозиции(Начало);
ПозицияОкончания = Содержимое.ПолучитьЗакладкуПоПозиции(Окончание);
Элементы.Редактор.УстановитьГраницыВыделения(ПозицияНачала,ПозицияОкончания);
КонецПроцедуры
[необходимо зарегистрироваться для просмотра ссылки]