Форматированный документ
Форматированный документ предназначен для оформление текста. Его можно выделить жирным, подчеркнуть, увеличить/уменьшить шрифт, центрировать и т.д. Также можно добавить картинку. Т.е. в 1С теперь можно отформатировать текст, примерно, как в MS Word и др. подобным программам. Это может быть удобно при оформлении различных договоров или, например, при редактировании электронного письма. Таким образом, у нас есть возможность привести текстовый документ в тот вид, который мы пожелаем. 
В синтакс-помощнике есть описание.
Объект ФорматированныйДокумент (FormattedDocument) имеет одноименный тип данных, который поддерживает функционирование данного объекта и имеет следующие методы:
Вставить (I_nsert)
Добавить (Add)
Записать (Write)
ПолучитьHTML (GetHTML)
ПолучитьЗакладкуКонца (GetEndBookmark)
ПолучитьЗакладкуНачала (GetBeginBookmark)
ПолучитьЗакладкуПоПозиции (GetPositionBookmark)
ПолучитьПозициюПоЗакладке (GetBookmarkPosition)
ПолучитьТекст (GetText)
Удалить (Delete)
УстановитьHTML (SetHTML)
Доступен во всех типах приложения: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Нельзя указать новый тип данных в качестве типа реквизита.
Есть одна важная особенность этого типа. Нельзя задавать тип «Форматированный документ» для реквизита объекта (справочника, документа и др.). Но есть возможность указывать его для реквизитов формы. 
Возникает вопрос, как же нам сохранить те изменения при форматировании текста, которые сделал пользователь? Для этого применяется специальный объект «ХранилищеЗначения», который может содержать в себе любой тип данных, в том числе и «форматированный документ». Таким образом, в базе данных сам объект будет храниться как «Хранилище значения», далее при открытии формы необходимо будет извлечь объект из хранилища, отобразить его на форме используя тип «ФорматированныйДокумент». Если пользователь решит сохранить изменения, то при записи объекта нужно снова взять объект «форматированный документ» и записать его в хранилище.
Пример работы
Возьмем за основу каркасную конфигурацию, создадим в ней справочники «Контрагенты» и «Договоры». Установим справочник «Договоры» подчиненным справочнику «Контрагенты» и создадим реквизит «Текст» с типом ХранилищеЗначения.
Создадим форму элемента справочника «Договоры» и добавим на нее новый реквизит, который назовем «ТекстДоговора», укажем тип данных «ФорматированныйДокумент». Обратите внимание, что реквизит «Текст» с типом «ХранилищеЗначения» на форму поместить нельзя.
Создадим также командную панель (меню) содержащую необходимые кнопки для управления форматированным документом. Для этого надо добавить в форму «Группа – Командная панель» и указать в свойстве «Источник команд» реквизит формы «ТекстДоговора» с типом ФорматированныйДокумент. 
Запускаем отладчик, проверяем, что у нас получилось…
Все бы хорошо, но есть некоторые проблемы:
Во-первых, если ввести текст и отформатировать его должным образом, то признак модифицированности для формы не возникает. Таким образом, случайно нажав на кнопку закрытия формы, система не задавая вопросов закрывает ее без всякого сохранения.
Для того чтобы подобные неприятности не случались, необходимо установить флаг у свойства «Сохраняемые данные» реквизита формы «ТекстДоговора». В результате, при любом изменении данных в реквизите «ТекстДоговора», будет устанавливаться признак модифицированности формы, а при ее закрытии система спросит: «Сохранить изменения?».
Во-вторых. Попытаемся закрыть форму и сохранить введенные данные. Заново открыв сохраненный договор, видим что текст введенный в форму договора отсутствует. Почему так происходит?
Все дело в том, что мы делаем изменения в реквизите формы, который у нас никак не связан с реквизитом объекта. Давайте настроим связь между реквизитом формы «Текст договора» с типом данных «ФорматированныйДокумент» и реквизитом объекта «Текст» с типом «ХранилищеЗначения».
Пропишем эту связь программно в модуле формы. Опишем алгоритм.
1. При открытии формы, необходимо будет обратиться к реквизиту объекта «Текст», чтобы прочитать из него данные и записать их в форматированный документ «Текст договора».
2. При записи объекта, берем содержимое форматированного документа и помещаем его в реквизит объекта «Текст» с типом «ХранилищеЗначения».
На этом пока всё. В следующий раз попробую рассказать про использование шаблонов для вставки параметров в текст форматированного документа, например, вместо %Контрагент% вставлять наименование контрагента.
Сергей (SirYozha)
У меня в текстовом реквизите есть вот такой текст, например:
Планируемый центр генетического прогнозирования, профилактики
и персонализированной медицины уникальный для РФ и будет соответствовать
мировым лидерам в этой области.
Вопрос:
1. Как мне ЭТО вывести на управляемую форму?
2. Как мне это редактировать на управляемой форме?
3. Как мне это вывести в табличный документ?
4. Как мне это преобразовать в простой текст?
Хотя бы намек дайте, дальше я сам разберусь.
Короче, для хранения удобно использовать объект ФорматированныйДокумент. Засовывать его в ХранилищеЗначения. Поле HTML документа не подходит, т. к. его невозможно редактировать.
Я уперся в вывод в табличный документ.
У меня есть макет таблицы.
Как мне в какую-то ячейку таблицы вставить текст с форматированием (он у меня будет в объекте ФорматированныйДокумент)?
То есть несколько абзацев форматированного текста из ФорматированныйДокумент вставить в ячейку табличного документа?
Поле HTML документа не подходит, т. к. его невозможно редактировать.
это еще почему невозможно?
В РФ аналогов планируемого центра нет. Лидером в мире является Центр персонализированной медицины клиники Мэйо (http://mayoresearch.mayo.edu/mayo/research/center-for-individualized-medicine/individualized-medicine-clinic.asp).
Планируемый центр генетического прогнозирования, профилактики и персонализированной медицины уникальный для РФ и будет соответствовать мировым лидерам в этой области.
Редактирование
Текст
Просмотр
Можешь не благодарить!
(10)
Вы меня не поняли.
В случае с простым текстом вывод в табличный документ делается так:
(14) извращенцы придумали такой вариант
(14) так мы получим текст с потерей всего форматирования!
А задача в том, чтобы форматирование в ячейке сохранить.
(15) Там документ на 33 страницы, в котором много обычных параметров, включая таблицы, а куски форматированного текста составляют лишь небольшую часть. Плюс колонтитулы, разделители страниц, картинки. Если я буду сам руками формировать этот документ в HTML, то, как минимум, не смогу контролировать колонтитулы и разделители страниц. Поэтому идеальным вариантом будет использование ТабличныйДокумент.
(7) TinyMCE нио чем не говорит?
Форматированный документ забудь как страшный сон. Настойчиво не рекомендую его использовать.
(17) Редактируются поля ввода на странице, а не сама страница. Веб-страница не изменяется, то есть её HTML, скрипты и все такое остаются такими как были. А автору надо править страницу.
ПолеHTMLДокумента в обычном приложении имело свойство «Режим», где можно было установить режим редактирования. Этим я успешно пользовался еще лет 5 назад.
В управляемых формах случился облом, и поле HTML документа, увы, не редактируется.
А зная это, вариант с ТабличнымДокументом придётся отставить.
Теперь остается только формировать макет печатного документа в Word через OLE.
Пошел искать, как вставить в Word кусок HTML-текста.
(18) приходила в голову мысль с картинкой. Но это архитектурно неправильное решение, корявое по определению, хотя вполне может быть, что рабочее. Я так делать не буду.
(25) На самом деле, поле HTML документа в управляемых тоже может редактироваться, если сделать как в (22).
Но это всё уже непринципиально.
Форматированный документ
1С:Предприятие 8.3.14. Документация
Глава 7. Формы
В процессе разработки прикладных решений возникает необходимость предоставить пользователю возможность выполнять редактирование текстов с оформлением (далее форматированный документ). В качестве примера такой необходимости можно привести написание писем электронной почты, различных служебных записок или сопроводительных документов.
Для работы с форматированным документом предназначен объект ФорматированныйДокумент, с помощью которого можно выполнять программную обработку документа, и поле вида Поле форматированного документа, который предназначен для интерактивного изменения форматированного документа.
В информационной базе форматированный документ рекомендуется хранить в реквизите типа ХранилищеЗначения, в который помещается объект типа ФорматированныйДокумент.
Для того чтобы предоставить пользователю возможность интерактивного изменения документа, следует выполнить следующие шаги:
В процессе работы с документом можно использовать закладки. Закладка описывает положение некоторого символа в документе. При определении положения нужно учитывать следующие особенности:
Если положение символа, с которым связана закладка, изменится, то закладка будет отслеживать положение связанного символа. Если удаляется символ, с которым связана закладка, то закладка пытается привязаться к следующему символу, а если этого символа нет ‑ закладка будет указывать на конец документа. Если заменить целиком весь форматированный документ, то все закладки в этом документе станут невалидными.
С помощью закладок можно получать и устанавливать выделение или позицию курсора в редакторе, добавлять и удалять элементы текста в документе (собственно текст, картинка, перевод строки).
Если при получении выделения позиция начала и позиция окончания совпадают, это значит, что выделение отсутствует и получено положение курсора. Так же и при установке выделения: если начальная и конечная позиция выделения совпадают, происходит изменение позиции курсора, без выделения. При программном изменении текста собственно отображение выделения в поле форматированного документа не изменится. Если перед изменением текста выполнялось получение границ выделения, то после изменения текста, закладки могут изменить свою позицию, сохранив при этом свое положение. Другими словами, если вставка происходила внутрь выделения, то позиция закладки, описывающей окончание выделения, увеличится на размер вставленного текста и т. д.
Приведем пример получения и установки выделения в редакторе форматированного документа.
При выполнении операций удаления закладка, описывающая начало удаляемого фрагмента, может оказаться некорректной. Если при этом необходимо сохранить позицию начала удаляемого фрагмента, то следует воспользоваться позицией начала фрагмента. Так, пример замены выделенного текста другим текстом будет выглядеть следующим образом.
Если в форматированном документе присутствуют гиперссылки и форматированный документ отображается в режиме Только просмотр, то гиперссылки доступны для перехода. Переход выполняется в новом окне веб-браузера.
Также имеется возможность программного доступа к тексту форматированного документа. Сам текст состоит из объектов типа ПараграфФорматированногоДокумента, который доступен через свойство Элементы объекта ФорматированныйДокумент. При этом каждый параграф состоит из объектов типа
Доступ к этой коллекции обеспечивается через свойство Элементы объекта ПараграфФорматированногоДокумента. Границей элемента не обязательно является граница слова.
Например, следующий пример показывает перебор всех параграфов форматированного документа, содержащих текст, и отдельную обработку каждого параграфа.
Обработка элементов форматированного документа, входящего в состав параграфа, может оказаться полезной в том случае, если нужно, например, убрать все оформление в виде курсива или полужирного шрифта.
При программной работе с текстом также могут помочь методы ПолучитьЭлементы() и СформироватьЭлементы(). Эти методы возвращают массив элементов форматированного документа. Чтобы увидеть разницу в работе этих методов, рассмотрим пример форматированного документа, содержащего следующую строку: 012 456 890. Строка состоит из 11 символов, где на месте символов 4 и 8 расположены пробелы. Необходимо получить элементы, которые расположены между позициями 2 и 9 этого документа.
Разница в работе этих методов будет в том, что метод ПолучитьЭлементы() возвращает все элементы, которые попадают между заданными закладками (включая все граничные элементы), т. е. рассматриваемом примере будет выведен следующий текст:
Другими словами, при использовании метода СформироватьЭлементы() система формирует набор элементов таким образом, чтобы он включал в себя только то содержимое форматированного документа, которое ограничено закладками.
Такой результат будет даже в том случае, если полученный, после вызова СформироватьЭлементы(), набор элементов никак не изменялся.
Форматированный документ
Доброго времени суток, коллеги! Это новый объект, который появился в версии платформы 1С 8.2.11. И конечно же первый вопрос, который возникает, что нового он несет и какой новый функционал он добавляет. На изображении к этой статье продемонстрирован пример работы с этим объектом, само предназначение, я думаю вы можете придумать сами.
Предназначение объекта
Что можно сделать, выделив некоторую часть этого текста? Можно сделать её жирным шрифтом или курсивом. Кроме того, форматированный документ позволяет сделать любое текстовое или цветовое оформление с помощью стандартной панели. Также можно указать, что вот этот шрифт должен быть именно таким и не иначе.
Вы можете увидеть, что все базовые возможности, которые присущи всем текстовым процессорам стали доступными. До этого релиза (8.2.11) не было возможности этого сделать, используя стандартные средства. А теперь это стандартные возможности платформы, которые очень просто поместить на абсолютно любую форму. В форматированном документе появились номерованные списки, маркированные списки, ссылка, различные шрифты. Также, в этот форматированный документ можно вставить какую-нибудь картинку.
Самый часто используемый пример, это редактирование и отправка электронных писем. Если у вас почтовый клиент встроен в одну из конфигураций, то очень удобно использовать форматированный документ для того, чтобы отправлять и принимать письма. То есть читать их в соответствующем оформлении, а также этот объект можно будет применять, чтобы оформить некоторые документы, которые будут печататься. Например: договоры, трудовые договоры и прочие документы. А дальше мы рассмотрим, как работать с объектом типа данных – форматированный документ.
Тип данных – форматированный документ
Итак, у нас появился новый объект и соответственно появился новый тип данных, который поддерживает функционирование этого объекта. Если обратиться к синтаксис-помощнику, то можно найти такой тип данных «ФорматированныйДокумент». Мы увидим, что у него есть ряд методов.
Доступны: тонкий клиент, веб-клиент, сервер, толстый клиент. То есть во всех видах приложения мы можем использовать этот форматированный документ. Но есть одна важная особенность — мы не можем указать этот тип данных в качестве типа данных реквизита.
То есть создавая какой-либо реквизит справочника или документа, и выбирая тип мы видим, что здесь нельзя указывать форматированный документ. А как же можно сохранить, те изменения, которые сделал пользователь? Допустим, пользователь хочет сохранить изменения типового договора в базе данных. Для этого применяется специальный объект «ХранилищеЗначения», который может в себе содержать значения любого типа данных, включая бинарные типы. Это могут быть различные растровые изображения и исполняемые файлы. Этот тип данных можно увидеть на иллюстрации выше. В том числе в «ХранилищеЗначения» можно и нужно записывать форматированный документ.
Таким образом, в базе данных сам документ будет храниться, как «ХранилищеЗначения», а далее при открытии формы он будет извлечен из хранилища и отображен на форме. Отображение осуществляется с использованием типа данных «ФорматированныйДокумент». После изменения, при нажатии на кнопку «Записать» нужно снова взять форматированный документ и записать информацию в хранилище. Итак, как видим, нужно делать вот такие взаимные преобразования. Здесь описана общая схема, в следующем разделе будет рассмотрено, как работать с новым объектом «ХранилищеЗначения».
Размещение форматированного документа на форме
Давайте рассмотрим решение конкретной практической задачи. Представим, что нам необходимо хранить тексты договоров с различными оформлениями, жирным, курсивом и т.д. Понятно, что для этого идеально подходит форматированный документ. И давайте сейчас это реализуем на нашей небольшой каркасной конфигурации. Итак, у нас есть справочник договоры, где нам необходимо будет создать реквизит, который назовем «Текст». Как уже отмечалось, это должен быть реквизит с типом данных «ХранилищеЗначения».
Дальше необходимо создать форму договора, форму элемента справочника и на ряду со стандартными реквизитами нужно будет разместить данные форматированного документа. Обратите внимание, если попытаться перенести «Текст» из реквизитов на «Форму», то система не позволит этого сделать. Поскольку, этот тип данных недоступен в данных формы напрямую. В скобках рядом с описанием типа реквизита написано: (Недоступен в данных формы). Мы должны извлечь из хранилища значения то, что в нем содержится и только потом можно с ним работать.
Как же можно отобразить содержимое форматированного документа на форме? Нужно создать новый реквизит формы, который можно назвать «ТекстДоговора». В качестве типа данных нужно указать «ФорматированныйДокумент». Обратите внимание, что, создавая реквизит формы можно указать этот тип данных, но в качестве реквизита объекта, форматированный документ выступать не может.
Дальше разместим «ТекстДоговора» на форме. Чтобы посмотреть, что у нас получилось нужно запустить приложение в режиме откладки. Нужно открыть любой договор, любого контрагента. В подсистеме продажа есть справочник «Договоры». Там есть ряд созданных договоров.
И мы видим, что действительно, можно написать некоторый текст договора. Также здесь можно устанавливать различные выделения, используя горячие клавиши. Но, не все пользователи знают горячие клавиши, поэтому правильно было бы создать командную панель, которая позволит менять размеры шрифта и делать цветовое выделение текста.
Итак, давайте сделаем эту командную панель. Для этого в форме договора нужно создать новый элемент — «Группа — Командная панель». Итак, укажем, что группа будет располагаться перед договором и в качестве источника команд для этой группы как раз и выступает реквизит, который имеет тип данных «Форматированный Документ». В этом случае у нас появляются соответствующие кнопки в командной панели. И теперь можно работать полноценно с данным текстом.
Можно проверить, что это действительно работает. Запустим приложение в режиме отладки и вновь обратимся к справочнику договоров. Итак, описывая некоторый текст договора, можно действительно увидеть, что существует возможность использовать все соответствующие функции для форматированного документа.
Но у нас есть ряд проблем. Первая проблема заключается вот в чем: заходя в существующий элемент и меняя текст договора признак модифицированности для формы не возникает. То есть пользователь, случайно нажав на кнопку Esc, получает закрытие элемента без каких-либо вопросов. Для того чтобы такого не возникало в качестве свойств реквизита необходимо установить флаг «Сохраняемые данные».
Этот флаг как раз и будет влиять на то, что свойства модифицированности будут выставляться в значение Истина, если данный реквизит будет как-то меняться. Более того, данный флаг означает, что если форма открывается в режиме только для чтения (read only), то и этот реквизит будет открываться в этом же режиме.
Теперь, изменяя, каким-либо образом текст договора, нажать на кнопку Esc, то сейчас система скажет, что нужно принять решение о том нужно ли сохранить изменения, либо от них отказаться. Нажимая на кнопку «Да», мы запишем данные изменения. И вполне очевидно, что система ничего не сделает, поскольку мы делаем изменения в реквизите формы, который у нас пока еще никак не связан с реквизитом объекта. Нужно настроить эту программную связь.
Сохранение форматированного документа в БД
На текущий момент мы создали форматированный документ на форме. Более того, у нас есть реквизит объекта с типом «ХранилищеЗначения». И сейчас предстоит настроить связь между двумя этими объектами, между двумя этими реквизитами.
Во-первых, при открытии формы необходимо будет обращаться к реквизиту объекта и заполнять тем значением, которое там хранится – значением форматированного документа. Во-вторых, при записи элемента мы берем содержимое форматированного документа и помещаем в хранилище значения. Таким образом у нас будет возникать эффект того, что все действия, которые пользователь делает с нашим форматированным документом сохраняются в базе данных.
Теперь давайте разберемся какие же обработчики событий нам необходимо будет выбрать. В частности, первое событие. В момент открытия формы мы должны обратиться к значению, которое содержится в хранилище значения. Итак, какие у нас обработчики есть вообще.
Допустим, пользователь открыл форму договора. И начинал что-то в ней менять. И вдруг понял, что неплохо бы вернуться к исходной версии. Нажал на кнопку «Перечитать», чтобы вернуться к исходным данным. И система возвращает то значение, которое было изначально.
Так вот, нам нужно будет тоже присоединиться к этому событию, то есть к чтению данных из базы. Поэтому идеальным вариантом для этого действия было бы событие «ПриЧтенииНаСервере». Это событие будет возникать и в момент создания формы, и в момент нажатия на кнопку «Перечитать».
Обратите внимание, что сам текущий объект передается через параметр, то есть мы указываем текст договора. Далее обращаемся к текущему объекту и свойству текста. Обратите внимание: чтобы получить данные, содержащиеся в хранилище, нужно использовать метод «Получить». Тогда система извлечет данные, которые хранятся внутри хранилища.
В тот момент, когда пользователь решит записать сделанные изменения, нам нужно записать данные в хранилище. Для этого нужно использовать обработчик событий «ПередЗаписьюНаСервере». Сначала нужно обратиться к параметру «ТекущийОбъект.Текст» и присвоить ему значение. Какое значение можно присвоить? Есть реквизит формы «ТекстДоговора». К нему можно обращаться напрямую. И это присваивание будет неправильным.
То есть, нельзя взять и напрямую присвоить реквизиту с типом «ХранилищеЗначения» какой-либо тип данных. Нужно сделать преобразование. Нужно поместить объект в хранилище и для этого нужно воспользоваться следующим приёмом: использовать конструктор для типа данных «ХранилищеЗначения».
Итак, с помощью конструктора «Новый ХранилищеЗначения» создан объект с типом «ХранилищеЗначения», который будет содержать переданные в параметре данные. И теперь это сохранение будет корректно отрабатываться.
Свойства и методы форматированного документа
Можно ли сделать шаблоны, которые заменяются значениями из реквизитов справочника? Например такие: «%контрагент%», «%организация%» и так далее. То есть вместо этих значений подставлялись бы какие-то значения, соответствующие текущему конкретному контрагенту и текущей организации. К сожалению, в явном виде шаблоны описать нельзя, но все же кое-какие возможности по программной модификации форматированного документа у нас все же имеются.
Давайте, прежде всего, рассмотрим, какой существует программный интерфейс для работы с форматированным документом. Начнем с того, что для отображения форматированного документа на форме используется самый обыкновенный элемент управления формы поля.
Вид этого поля «Поле форматированного документа». Исходя из этого вида система для элемента «ТекстДоговора» может выполнять определенные функции. В Синтаксис-помощнике видно, какие есть специальные функции для работы с форматированным документом на форме.
Обратите внимание, что есть ряд свойств. Высота документа, выделенный текст и так далее. И в частности, мы можем получить границы выделения. То есть можно заменить выделенный пользователем текст на какое-либо значение. Давайте продемонстрируем как это можно сделать.
Итак, создадим команду, неважно как она будет называться. Поместим эту команду в командную панель и опишем обработчик действия. Естественно, данный метод получит границы выделения доступные клиенту поскольку он относится непосредственно к полю.
Обратите внимание на некоторую странность. Система говорит, что метод «ПолучитьГраницыВыделения» это процедура, хотя Синтаксис-помощник упорно утверждает, что это функция, поскольку есть возвращаемое значение. Если оставить это код как есть, то при нажатии на кнопку «ПолучитьГраницы» будет выдана ошибка:
То есть метод «ПолучитьГраницыВыделения» все-таки процедура, а не функция. Давайте простим разработчикам платформы такой Синтаксис-помощник. В эту процедуру нужно передать два параметра любого типа данных. То есть, скорее все здесь имелось в виду то, что в переданные параметры возвращается выделенный фрагмент. В них и вернется выделенный фрагмент.
Если запустим отладчик, то увидим, что содержится в переменных: Начало и Конец. Обратите внимание, что возвращается специализированный тип данных форматированного документа. К сожалению, мы не можем посмотреть, что содержится внутри этой закладки. Но условно можно считать, что эта позиция начала выделения и позиция конца выделения.
То есть вся работа с текстом форматированного документа производится на уровне закладок. Для того чтобы изменить какой-либо текст нам нужно получение закладок. Для того, чтобы вставить кусочек текста в определенное место, нам нужна закладка. То есть мы должны получить эту позицию. Причем, позицией в форматированном документе считается любой символ. Картинка считается одной позицией тоже и перевод строки, это тоже позиция.
Итак, давайте сейчас сначала выполним очень простые действия. Сообщим на экран пользователя тот текст, который был выделен. Для этого потребуется обратится к форматированному документу, то есть к реквизиту формы. Обращу ваше внимание, что в форматированном документе тоже есть методы, которые получают закладку по позиции символа, либо наоборот позицию по закладке.
Для того, чтобы получить текст между закладками, существует метод, который называется «ПолучитьТекст». Обращаясь к реквизиту «ТекстДоговора.ПолучитьТекст()» выведем на экран выделенный фрагмент текста. Также, в этом методе указывается начальная и конечная закладки.
Вставка текста в форматированный документ
Сейчас давайте решим задачу вставки в форматированный документ. Допустим, вставим в документ наименование текущего владельца. Сначала вставим конкретную позицию, начало выделения. А потом попытаемся вставить наименование текущего владельца вместо наших специальных маркеров. Итак, решая данную задачу, обратимся к Синтаксис-помощнику.
Видим, что у нас есть метод «Вставить», который принимает на себя три параметра. Первый параметр, это закладка, после которой нужно будет вставить текст, второй параметр само значение, то есть это может быть обычная строка и третий параметр, тип элемента это может быть картинка, перевод строки, либо обычный текст. У нас этот текст является необязательным, поэтому мы третий параметр попросту указывать не будем.
Поступаем следующим образом. В форматированный документ вставляем в позицию «Начало выделения» определенную строчку. Вместо метода «ПолучитьТекст» мы будем использовать метод «Вставить».
Если запустить приложение и обратиться к договору, выделив фрагмент текста, затем нажав на кнопку «Получить границы», то произойдет вставка названия контрагента в начало строки. Но нужно, чтобы система анализировала данную строчку и вместо неё вставляла название контрагента. Как это сделать? Если посмотреть в Синтаксис-помощник, то увидим, что метода поиска какого-либо текста нет, но удалить какой-либо текст мы можем.
Идея заключается в следующем: выгружаем текст, который находится в форматированном документе, с помощью метода «ПолучитьТекст». В строке ищем нужную последовательность символов и понимаем какие символы нужно удалить, с какого по какой и в какую позицию нужно вставить новый текст. Обратите внимание, что существуют методы получения начала и конца закладок: «ПолучитьЗакладкуНачала» и «ПолучитьЗакладкуКонца».
Обращаясь к реквизиту «ТекстДоговора» получим закладку «Начало» и закладку «Конец». Затем получим текст между двумя закладками и заменим его на наименование владельца договора.
Итак, переменной «Шаблон» присвоено значение %контрагент%. Именно такую строчку будем искать в строке договора. Если обратиться к Синтаксис-помощнику, то можно увидеть какие существуют функции по работе со строками. Есть метод «Найти», который в строке договора поможет найти нужную подстроку и вернет значение, то есть позицию.
Переменной «ПозицияНачало» присваиваем позицию начала шаблона из строки «СтрокаДоговора», используя метод «Найти». Если значение не будет найдено, то позиция будет равна нулю. Если позиция не ноль, то выполним замену.
Удалим из форматированного документа данные между двумя закладками, но при этом закладки нужно получить. Для этого будет использоваться метод «ПолучитьЗакладкуПоПозиции «. Из текста удаляем фрагмент между закладками «ЗакладкаНачало» и «ЗакладкаКонец» и вставляем наименование владельца договора с помощью метода «Вставить».
На следующем видео (2 минуты) вы можете увидеть, как работает, то что мы сделали:

